From b50cbdbd6bb2dd24a530fd34ba2de8f6e8652eae Mon Sep 17 00:00:00 2001 From: nilptr Date: Sun, 15 Dec 2024 23:52:28 +0800 Subject: [PATCH 01/38] fix: should not use the same instance in benches --- benches/resolver.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index b523b5a3..2689131e 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -156,8 +156,8 @@ fn bench_resolver(c: &mut Criterion) { let mut group = c.benchmark_group("resolver"); group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { - let oxc_resolver = oxc_resolver(); b.iter(|| { + let oxc_resolver = oxc_resolver(); for (path, request) in data { _ = oxc_resolver.resolve(path, request); } @@ -165,8 +165,8 @@ fn bench_resolver(c: &mut Criterion) { }); group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { - let oxc_resolver = oxc_resolver(); b.iter(|| { + let oxc_resolver = oxc_resolver(); data.par_iter().for_each(|(path, request)| { _ = oxc_resolver.resolve(path, request); }); @@ -177,8 +177,8 @@ fn bench_resolver(c: &mut Criterion) { BenchmarkId::from_parameter("resolve from symlinks"), &symlinks_range, |b, data| { - let oxc_resolver = oxc_resolver(); b.iter(|| { + let oxc_resolver = oxc_resolver(); for i in data.clone() { assert!( oxc_resolver.resolve(&symlink_test_dir, &format!("./file{i}")).is_ok(), From 4a9756d1825305418e7129d5480053203e0d1dc8 Mon Sep 17 00:00:00 2001 From: nilptr Date: Mon, 16 Dec 2024 23:20:03 +0800 Subject: [PATCH 02/38] feat: replace rayon with tokio as the multi-thread runner --- Cargo.lock | 103 ++++++++++++++++++++++++-------------------- Cargo.toml | 4 +- benches/resolver.rs | 32 +++++++++++--- 3 files changed, 84 insertions(+), 55 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f157c16a..03e4a802 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,15 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "addr2line" +version = "0.22.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +dependencies = [ + "gimli", +] + [[package]] name = "adler" version = "1.0.2" @@ -55,6 +64,21 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +[[package]] +name = "backtrace" +version = "0.3.73" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base64" version = "0.22.1" @@ -231,28 +255,10 @@ dependencies = [ "oorandom", "serde", "serde_json", + "tokio", "walkdir", ] -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - [[package]] name = "crossbeam-utils" version = "0.8.20" @@ -349,12 +355,6 @@ version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" -[[package]] -name = "either" -version = "1.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" - [[package]] name = "endian-type" version = "0.1.2" @@ -396,6 +396,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "gimli" +version = "0.29.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" + [[package]] name = "half" version = "2.4.1" @@ -647,6 +653,15 @@ dependencies = [ "autocfg", ] +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" version = "1.19.0" @@ -744,26 +759,6 @@ dependencies = [ "nibble_vec", ] -[[package]] -name = "rayon" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - [[package]] name = "redox_syscall" version = "0.4.1" @@ -836,16 +831,22 @@ dependencies = [ "normalize-path", "once_cell", "pnp", - "rayon", "rustc-hash", "serde", "serde_json", "simdutf8", "thiserror", + "tokio", "tracing", "vfs", ] +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + [[package]] name = "rustc-hash" version = "2.0.0" @@ -1041,6 +1042,16 @@ dependencies = [ "time-core", ] +[[package]] +name = "tokio" +version = "1.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +dependencies = [ + "backtrace", + "pin-project-lite", +] + [[package]] name = "tracing" version = "0.1.40" diff --git a/Cargo.toml b/Cargo.toml index 4be5eafb..1380ff02 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,11 +93,11 @@ simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } pnp = { version = "0.9.0", optional = true } document-features = { version = "0.2.8", optional = true } +tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system -rayon = { version = "1.10.0" } -criterion2 = { version = "1.0.0", default-features = false } +criterion2 = { version = "1.0.0", default-features = false, features = ["async_tokio"]} normalize-path = { version = "0.2.1" } [features] diff --git a/benches/resolver.rs b/benches/resolver.rs index 2689131e..faf022f4 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -2,10 +2,11 @@ use std::{ env, fs, io::{self, Write}, path::{Path, PathBuf}, + sync::Arc, }; use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; -use rayon::prelude::*; +use tokio::runtime; fn data() -> Vec<(PathBuf, &'static str)> { let cwd = env::current_dir().unwrap().join("fixtures/enhanced_resolve"); @@ -134,6 +135,16 @@ fn oxc_resolver() -> rspack_resolver::Resolver { }) } +fn create_async_resolve_task( + oxc_resolver: Arc, + path: PathBuf, + request: String, +) -> tokio::task::JoinHandle<()> { + tokio::spawn(async move { + let _ = oxc_resolver.resolve(path, &request); + }) +} + fn bench_resolver(c: &mut Criterion) { let data = data(); @@ -156,7 +167,8 @@ fn bench_resolver(c: &mut Criterion) { let mut group = c.benchmark_group("resolver"); group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { - b.iter(|| { + let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); + b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for (path, request) in data { _ = oxc_resolver.resolve(path, request); @@ -165,11 +177,16 @@ fn bench_resolver(c: &mut Criterion) { }); group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { - b.iter(|| { - let oxc_resolver = oxc_resolver(); - data.par_iter().for_each(|(path, request)| { - _ = oxc_resolver.resolve(path, request); + let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); + b.to_async(runner).iter(|| async { + let oxc_resolver = Arc::new(oxc_resolver()); + + let handles = data.iter().map(|(path, request)| { + create_async_resolve_task(oxc_resolver.clone(), path.clone(), request.to_string()) }); + for handle in handles { + let _ = handle.await; + } }); }); @@ -177,7 +194,8 @@ fn bench_resolver(c: &mut Criterion) { BenchmarkId::from_parameter("resolve from symlinks"), &symlinks_range, |b, data| { - b.iter(|| { + let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); + b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for i in data.clone() { assert!( From 82eab8bb6258df6c891c62d6bd93c8d54d4f26ef Mon Sep 17 00:00:00 2001 From: nilptr Date: Tue, 17 Dec 2024 23:03:01 +0800 Subject: [PATCH 03/38] feat: add resolve-from-symlinks-multi-thread bench --- benches/resolver.rs | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index faf022f4..4371e0a3 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -191,7 +191,7 @@ fn bench_resolver(c: &mut Criterion) { }); group.bench_with_input( - BenchmarkId::from_parameter("resolve from symlinks"), + BenchmarkId::from_parameter("resolve-from-symlinks"), &symlinks_range, |b, data| { let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); @@ -206,6 +206,24 @@ fn bench_resolver(c: &mut Criterion) { }); }, ); + + group.bench_with_input( + BenchmarkId::from_parameter("resolve-from-symlinks-multi-thread"), + &symlinks_range, + |b, data| { + let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); + b.to_async(runner).iter(|| async { + let oxc_resolver = Arc::new(oxc_resolver()); + + let handles = data.clone().map(|i| { + create_async_resolve_task(oxc_resolver.clone(), symlink_test_dir.clone(), format!("./file{i}").to_string()) + }); + for handle in handles { + let _ = handle.await; + } + }); + }, + ); } criterion_group!(resolver, bench_resolver); From 701e7e52f20a4ef0e41e49107e2318601f979d3d Mon Sep 17 00:00:00 2001 From: nilptr Date: Thu, 19 Dec 2024 12:48:44 +0800 Subject: [PATCH 04/38] chore: cargo fmt --- benches/resolver.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index 4371e0a3..b4d80173 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -167,7 +167,8 @@ fn bench_resolver(c: &mut Criterion) { let mut group = c.benchmark_group("resolver"); group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { - let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); + let runner = + runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for (path, request) in data { @@ -194,7 +195,9 @@ fn bench_resolver(c: &mut Criterion) { BenchmarkId::from_parameter("resolve-from-symlinks"), &symlinks_range, |b, data| { - let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); + let runner = runtime::Builder::new_current_thread() + .build() + .expect("failed to create tokio runtime"); b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for i in data.clone() { @@ -216,7 +219,11 @@ fn bench_resolver(c: &mut Criterion) { let oxc_resolver = Arc::new(oxc_resolver()); let handles = data.clone().map(|i| { - create_async_resolve_task(oxc_resolver.clone(), symlink_test_dir.clone(), format!("./file{i}").to_string()) + create_async_resolve_task( + oxc_resolver.clone(), + symlink_test_dir.clone(), + format!("./file{i}").to_string(), + ) }); for handle in handles { let _ = handle.await; From b7e3e2991f6dd89eb44e49fb9a09644888dc0521 Mon Sep 17 00:00:00 2001 From: nilptr Date: Thu, 19 Dec 2024 20:40:38 +0800 Subject: [PATCH 05/38] fix: check wasm error --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 1380ff02..00cc18d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -93,11 +93,11 @@ simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } pnp = { version = "0.9.0", optional = true } document-features = { version = "0.2.8", optional = true } -tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system criterion2 = { version = "1.0.0", default-features = false, features = ["async_tokio"]} +tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } normalize-path = { version = "0.2.1" } [features] From aac8c3963f2dc85936e972d8e7b6852275b27bee Mon Sep 17 00:00:00 2001 From: nilptr Date: Sat, 14 Dec 2024 00:39:56 +0800 Subject: [PATCH 06/38] feat: change to async --- Cargo.lock | 156 +++++++++++- Cargo.toml | 3 +- benches/resolver.rs | 25 +- examples/resolver.rs | 5 +- napi/Cargo.toml | 2 +- napi/src/lib.rs | 35 +-- src/cache.rs | 73 +++--- src/error.rs | 8 +- src/file_system.rs | 64 ++--- src/lib.rs | 302 ++++++++++++----------- src/path.rs | 8 +- src/resolution.rs | 4 +- src/tests/alias.rs | 50 ++-- src/tests/browser_field.rs | 50 ++-- src/tests/builtins.rs | 24 +- src/tests/dependencies.rs | 6 +- src/tests/exports_field.rs | 69 +++--- src/tests/extension_alias.rs | 14 +- src/tests/extensions.rs | 29 +-- src/tests/fallback.rs | 8 +- src/tests/full_specified.rs | 14 +- src/tests/imports_field.rs | 21 +- src/tests/incorrect_description_file.rs | 26 +- src/tests/main_field.rs | 14 +- src/tests/memory_fs.rs | 10 +- src/tests/missing.rs | 10 +- src/tests/mod.rs | 4 +- src/tests/pnp.rs | 8 +- src/tests/resolve.rs | 30 +-- src/tests/restrictions.rs | 6 +- src/tests/roots.rs | 26 +- src/tests/scoped_packages.rs | 6 +- src/tests/simple.rs | 18 +- src/tests/symlink.rs | 8 +- src/tests/tsconfig_paths.rs | 52 ++-- src/tests/tsconfig_project_references.rs | 24 +- tests/integration_test.rs | 56 ++--- tests/resolve_test.rs | 50 ++-- 38 files changed, 728 insertions(+), 590 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 03e4a802..0c38020d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.22.0" +version = "0.24.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" dependencies = [ "gimli", ] @@ -17,6 +17,12 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + [[package]] name = "aho-corasick" version = "1.1.3" @@ -66,17 +72,17 @@ checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.73" +version = "0.3.74" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" dependencies = [ "addr2line", - "cc", "cfg-if", "libc", - "miniz_oxide", + "miniz_oxide 0.8.0", "object", "rustc-demangle", + "windows-targets 0.52.6", ] [[package]] @@ -396,11 +402,100 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + [[package]] name = "gimli" -version = "0.29.0" +version = "0.31.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "half" @@ -513,9 +608,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "libloading" @@ -564,6 +659,15 @@ dependencies = [ "adler", ] +[[package]] +name = "miniz_oxide" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + [[package]] name = "napi" version = "3.0.0-alpha.7" @@ -577,6 +681,7 @@ dependencies = [ "once_cell", "serde", "serde_json", + "tokio", ] [[package]] @@ -705,6 +810,12 @@ version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + [[package]] name = "pnp" version = "0.9.0" @@ -716,7 +827,7 @@ dependencies = [ "concurrent_lru", "fancy-regex", "lazy_static", - "miniz_oxide", + "miniz_oxide 0.7.4", "pathdiff", "regex", "serde", @@ -826,10 +937,10 @@ dependencies = [ "dashmap", "document-features", "dunce", + "futures", "indexmap 2.3.0", "json-strip-comments", "normalize-path", - "once_cell", "pnp", "rustc-hash", "serde", @@ -958,6 +1069,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + [[package]] name = "smallvec" version = "1.13.2" @@ -1050,6 +1170,18 @@ checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "pin-project-lite", + "tokio-macros", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 00cc18d9..972b0b9c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -83,7 +83,6 @@ serde_json = { version = "1.0.117", features = [ ] } # preserve_order: package_json.exports requires order such as `["require", "import", "default"]` rustc-hash = { version = "2.0.0", default-features = false, features = ["std"] } dunce = "1.0.4" # Normalize Windows paths to the most compatible format, avoiding UNC where possible -once_cell = "1.19.0" # Use `std::sync::OnceLock::get_or_try_init` when it is stable. thiserror = "1.0.61" json-strip-comments = "1.0.2" indexmap = { version = "2.2.6", features = ["serde"] } @@ -93,6 +92,8 @@ simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } pnp = { version = "0.9.0", optional = true } document-features = { version = "0.2.8", optional = true } +tokio = { version = "1.42.0", features = ["sync", "rt", "macros"] } +futures = "0.3.31" [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system diff --git a/benches/resolver.rs b/benches/resolver.rs index b4d80173..a5f5f097 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -149,20 +149,20 @@ fn bench_resolver(c: &mut Criterion) { let data = data(); // check validity - for (path, request) in &data { - assert!(oxc_resolver().resolve(path, request).is_ok(), "{path:?} {request}"); - } + // for (path, request) in &data { + // assert!(oxc_resolver().resolve(path, request).is_ok(), "{path:?} {request}"); + // } let symlink_test_dir = create_symlinks().expect("Create symlink fixtures failed"); let symlinks_range = 0u32..10000; - for i in symlinks_range.clone() { - assert!( - oxc_resolver().resolve(&symlink_test_dir, &format!("./file{i}")).is_ok(), - "file{i}.js" - ); - } + // for i in symlinks_range.clone() { + // assert!( + // oxc_resolver().resolve(&symlink_test_dir, &format!("./file{i}")).is_ok(), + // "file{i}.js" + // ); + // } let mut group = c.benchmark_group("resolver"); @@ -172,7 +172,7 @@ fn bench_resolver(c: &mut Criterion) { b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for (path, request) in data { - _ = oxc_resolver.resolve(path, request); + _ = oxc_resolver.resolve(path, request).await; } }); }); @@ -202,7 +202,10 @@ fn bench_resolver(c: &mut Criterion) { let oxc_resolver = oxc_resolver(); for i in data.clone() { assert!( - oxc_resolver.resolve(&symlink_test_dir, &format!("./file{i}")).is_ok(), + oxc_resolver + .resolve(&symlink_test_dir, &format!("./file{i}")) + .await + .is_ok(), "file{i}.js" ); } diff --git a/examples/resolver.rs b/examples/resolver.rs index b6ae015d..43a22f1f 100644 --- a/examples/resolver.rs +++ b/examples/resolver.rs @@ -3,7 +3,8 @@ use std::{env, path::PathBuf}; use rspack_resolver::{AliasValue, ResolveOptions, Resolver}; -fn main() { +#[tokio::main] +async fn main() { let path = PathBuf::from(env::args().nth(1).expect("path")); assert!(path.is_dir(), "{path:?} must be a directory that will be resolved against."); @@ -26,7 +27,7 @@ fn main() { ..ResolveOptions::default() }; - match Resolver::new(options).resolve(path, &specifier) { + match Resolver::new(options).resolve(path, &specifier).await { Err(error) => println!("Error: {error}"), Ok(resolution) => println!("Resolved: {:?}", resolution.full_path()), } diff --git a/napi/Cargo.toml b/napi/Cargo.toml index 4392504a..8c1f339f 100644 --- a/napi/Cargo.toml +++ b/napi/Cargo.toml @@ -12,7 +12,7 @@ doctest = false [dependencies] oxc_resolver = { path = "..", package = "rspack_resolver" } -napi = { version = "3.0.0-alpha", default-features = false, features = ["napi3", "serde-json"] } +napi = { version = "3.0.0-alpha", default-features = false, features = ["napi3", "serde-json", "async"] } napi-derive = { version = "3.0.0-alpha" } tracing-subscriber = { version = "0.3.18", default-features = false, features = [ "std", diff --git a/napi/src/lib.rs b/napi/src/lib.rs index f59e705c..c9264c65 100644 --- a/napi/src/lib.rs +++ b/napi/src/lib.rs @@ -6,8 +6,7 @@ use std::{ path::{Path, PathBuf}, sync::Arc, }; - -use napi::{bindgen_prelude::AsyncTask, Task}; +use napi::tokio::runtime; use napi_derive::napi; use oxc_resolver::{ResolveOptions, Resolver}; @@ -27,8 +26,8 @@ pub struct ResolveResult { pub module_type: Option, } -fn resolve(resolver: &Resolver, path: &Path, request: &str) -> ResolveResult { - match resolver.resolve(path, request) { +async fn resolve(resolver: &Resolver, path: &Path, request: &str) -> ResolveResult { + match resolver.resolve(path, request).await { Ok(resolution) => ResolveResult { path: Some(resolution.full_path().to_string_lossy().to_string()), error: None, @@ -47,27 +46,7 @@ fn resolve(resolver: &Resolver, path: &Path, request: &str) -> ResolveResult { pub fn sync(path: String, request: String) -> ResolveResult { let path = PathBuf::from(path); let resolver = Resolver::new(ResolveOptions::default()); - resolve(&resolver, &path, &request) -} - -pub struct ResolveTask { - resolver: Arc, - directory: PathBuf, - request: String, -} - -#[napi] -impl Task for ResolveTask { - type Output = ResolveResult; - type JsValue = ResolveResult; - - fn compute(&mut self) -> napi::Result { - Ok(resolve(&self.resolver, &self.directory, &self.request)) - } - - fn resolve(&mut self, _: napi::Env, result: Self::Output) -> napi::Result { - Ok(result) - } + runtime::Handle::current().block_on(resolve(&resolver, &path, &request)) } #[napi] @@ -109,16 +88,16 @@ impl ResolverFactory { #[napi] pub fn sync(&self, directory: String, request: String) -> ResolveResult { let path = PathBuf::from(directory); - resolve(&self.resolver, &path, &request) + runtime::Handle::current().block_on(resolve(&self.resolver, &path, &request)) } /// Asynchronously resolve `specifier` at an absolute path to a `directory`. #[allow(clippy::needless_pass_by_value)] #[napi(js_name = "async")] - pub fn resolve_async(&self, directory: String, request: String) -> AsyncTask { + pub async fn resolve_async(&self, directory: String, request: String) -> ResolveResult { let path = PathBuf::from(directory); let resolver = self.resolver.clone(); - AsyncTask::new(ResolveTask { resolver, directory: path, request }) + resolve(&resolver, &path, &request).await } fn normalize_options(op: NapiResolveOptions) -> ResolveOptions { diff --git a/src/cache.rs b/src/cache.rs index 6e600664..49ccdf63 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -1,12 +1,7 @@ -use once_cell::sync::OnceCell as OnceLock; +use tokio::sync::OnceCell as OnceLock; + use std::{ - borrow::{Borrow, Cow}, - convert::AsRef, - hash::{BuildHasherDefault, Hash, Hasher}, - io, - ops::Deref, - path::{Path, PathBuf}, - sync::Arc, + borrow::{Borrow, Cow}, convert::AsRef, future::Future, hash::{BuildHasherDefault, Hash, Hasher}, io, ops::Deref, path::{Path, PathBuf}, sync::Arc }; use dashmap::{DashMap, DashSet}; @@ -53,16 +48,20 @@ impl Cache { data } - pub fn tsconfig Result<(), ResolveError>>( + pub async fn tsconfig( &self, root: bool, path: &Path, callback: F, // callback for modifying tsconfig with `extends` - ) -> Result, ResolveError> { + ) -> Result, ResolveError> + where + F: FnOnce(TsConfig) -> Fut, + Fut: Future> + { if let Some(tsconfig_ref) = self.tsconfigs.get(path) { return Ok(Arc::clone(tsconfig_ref.value())); } - let meta = self.fs.metadata(path).ok(); + let meta = self.fs.metadata(path).await.ok(); let tsconfig_path = if meta.is_some_and(|m| m.is_file) { Cow::Borrowed(path) } else if meta.is_some_and(|m| m.is_dir) { @@ -75,12 +74,13 @@ impl Cache { let mut tsconfig_string = self .fs .read_to_string(&tsconfig_path) + .await .map_err(|_| ResolveError::TsconfigNotFound(path.to_path_buf()))?; let mut tsconfig = TsConfig::parse(root, &tsconfig_path, &mut tsconfig_string).map_err(|error| { ResolveError::from_serde_json_error(tsconfig_path.to_path_buf(), &error) })?; - callback(&mut tsconfig)?; + tsconfig = callback(tsconfig).await?; let tsconfig = Arc::new(tsconfig.build()); self.tsconfigs.insert(path.to_path_buf(), Arc::clone(&tsconfig)); Ok(tsconfig) @@ -164,12 +164,12 @@ impl CachedPathImpl { self.parent.as_ref() } - fn meta(&self, fs: &Fs) -> Option { - *self.meta.get_or_init(|| fs.metadata(&self.path).ok()) + async fn meta(&self, fs: &Fs) -> Option { + *self.meta.get_or_init(|| async { fs.metadata(&self.path).await.ok() }).await } - pub fn is_file(&self, fs: &Fs, ctx: &mut Ctx) -> bool { - if let Some(meta) = self.meta(fs) { + pub async fn is_file(&self, fs: &Fs, ctx: &mut Ctx) -> bool { + if let Some(meta) = self.meta(fs).await { ctx.add_file_dependency(self.path()); meta.is_file } else { @@ -178,8 +178,8 @@ impl CachedPathImpl { } } - pub fn is_dir(&self, fs: &Fs, ctx: &mut Ctx) -> bool { - self.meta(fs).map_or_else( + pub async fn is_dir(&self, fs: &Fs, ctx: &mut Ctx) -> bool { + self.meta(fs).await.map_or_else( || { ctx.add_missing_dependency(self.path()); false @@ -188,40 +188,44 @@ impl CachedPathImpl { ) } - pub fn realpath(&self, fs: &Fs) -> io::Result { + pub async fn realpath(&self, fs: &Fs) -> io::Result { self.canonicalized - .get_or_try_init(|| { - if fs.symlink_metadata(&self.path).is_ok_and(|m| m.is_symlink) { - return fs.canonicalize(&self.path).map(Some); + .get_or_try_init(|| async move { + if fs.symlink_metadata(&self.path).await.is_ok_and(|m| m.is_symlink) { + return fs.canonicalize(&self.path).await.map(Some); } if let Some(parent) = self.parent() { - let parent_path = parent.realpath(fs)?; + let parent_path = parent.realpath(fs).await?; return Ok(Some( parent_path.normalize_with(self.path.strip_prefix(&parent.path).unwrap()), )); }; Ok(None) }) + .await .cloned() .map(|r| r.unwrap_or_else(|| self.path.clone().to_path_buf())) } - pub fn module_directory( + pub async fn module_directory( &self, module_name: &str, cache: &Cache, ctx: &mut Ctx, ) -> Option { let cached_path = cache.value(&self.path.join(module_name)); - cached_path.is_dir(&cache.fs, ctx).then_some(cached_path) + cached_path.is_dir(&cache.fs, ctx).await.then_some(cached_path) } - pub fn cached_node_modules( + pub async fn cached_node_modules( &self, cache: &Cache, ctx: &mut Ctx, ) -> Option { - self.node_modules.get_or_init(|| self.module_directory("node_modules", cache, ctx)).clone() + self.node_modules + .get_or_init(|| self.module_directory("node_modules", cache, ctx)) + .await + .clone() } /// Find package.json of a path by traversing parent directories. @@ -229,7 +233,7 @@ impl CachedPathImpl { /// # Errors /// /// * [ResolveError::JSON] - pub fn find_package_json( + pub async fn find_package_json( &self, fs: &Fs, options: &ResolveOptions, @@ -237,7 +241,7 @@ impl CachedPathImpl { ) -> Result>, ResolveError> { let mut cache_value = self; // Go up directories when the querying path is not a directory - while !cache_value.is_dir(fs, ctx) { + while !cache_value.is_dir(fs, ctx).await { if let Some(cv) = &cache_value.parent { cache_value = cv.as_ref(); } else { @@ -246,7 +250,7 @@ impl CachedPathImpl { } let mut cache_value = Some(cache_value); while let Some(cv) = cache_value { - if let Some(package_json) = cv.package_json(fs, options, ctx)? { + if let Some(package_json) = cv.package_json(fs, options, ctx).await? { return Ok(Some(Arc::clone(&package_json))); } cache_value = cv.parent.as_deref(); @@ -259,7 +263,7 @@ impl CachedPathImpl { /// # Errors /// /// * [ResolveError::JSON] - pub fn package_json( + pub async fn package_json( &self, fs: &Fs, options: &ResolveOptions, @@ -268,13 +272,13 @@ impl CachedPathImpl { // Change to `std::sync::OnceLock::get_or_try_init` when it is stable. let result = self .package_json - .get_or_try_init(|| { + .get_or_try_init(|| async { let package_json_path = self.path.join("package.json"); - let Ok(package_json_string) = fs.read_to_string(&package_json_path) else { + let Ok(package_json_string) = fs.read_to_string(&package_json_path).await else { return Ok(None); }; let real_path = if options.symlinks { - self.realpath(fs)?.join("package.json") + self.realpath(fs).await?.join("package.json") } else { package_json_path.clone() }; @@ -283,6 +287,7 @@ impl CachedPathImpl { .map(Some) .map_err(|error| ResolveError::from_serde_json_error(package_json_path, &error)) }) + .await .cloned(); // https://github.com/webpack/enhanced-resolve/blob/58464fc7cb56673c9aa849e68e6300239601e615/lib/DescriptionFileUtils.js#L68-L82 match &result { diff --git a/src/error.rs b/src/error.rs index b961234c..364833c9 100644 --- a/src/error.rs +++ b/src/error.rs @@ -152,8 +152,8 @@ impl From for ResolveError { } } -#[test] -fn test_into_io_error() { +#[tokio::test] +async fn test_into_io_error() { use std::io::{self, ErrorKind}; let error_string = "IOError occurred"; let string_error = io::Error::new(ErrorKind::Interrupted, error_string.to_string()); @@ -177,8 +177,8 @@ fn test_into_io_error() { ); } -#[test] -fn test_coverage() { +#[tokio::test] +async fn test_coverage() { let error = ResolveError::NotFound("x".into()); assert_eq!(format!("{error:?}"), r#"NotFound("x")"#); assert_eq!(error.clone(), error); diff --git a/src/file_system.rs b/src/file_system.rs index d3274833..293e6f33 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -19,7 +19,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn read_to_string(&self, path: &Path) -> io::Result; + async fn read_to_string(&self, path: &Path) -> io::Result; /// See [std::fs::metadata] /// @@ -30,7 +30,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn metadata(&self, path: &Path) -> io::Result; + async fn metadata(&self, path: &Path) -> io::Result; /// See [std::fs::symlink_metadata] /// @@ -42,7 +42,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn symlink_metadata(&self, path: &Path) -> io::Result; + async fn symlink_metadata(&self, path: &Path) -> io::Result; /// See [std::fs::canonicalize] /// @@ -54,7 +54,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn canonicalize(&self, path: &Path) -> io::Result; + async fn canonicalize(&self, path: &Path) -> io::Result; } /// Metadata information about a file @@ -105,38 +105,38 @@ impl Default for FileSystemOs { } } -fn read_to_string(path: &Path) -> io::Result { - // `simdutf8` is faster than `std::str::from_utf8` which `fs::read_to_string` uses internally - let bytes = std::fs::read(path)?; - if simdutf8::basic::from_utf8(&bytes).is_err() { - // Same error as `fs::read_to_string` produces (`io::Error::INVALID_UTF8`) - return Err(io::Error::new( - io::ErrorKind::InvalidData, - "stream did not contain valid UTF-8", - )); - } - // SAFETY: `simdutf8` has ensured it's a valid UTF-8 string - Ok(unsafe { String::from_utf8_unchecked(bytes) }) -} +// fn read_to_string(path: &Path) -> io::Result { +// // `simdutf8` is faster than `std::str::from_utf8` which `fs::read_to_string` uses internally +// let bytes = std::fs::read(path)?; +// if simdutf8::basic::from_utf8(&bytes).is_err() { +// // Same error as `fs::read_to_string` produces (`io::Error::INVALID_UTF8`) +// return Err(io::Error::new( +// io::ErrorKind::InvalidData, +// "stream did not contain valid UTF-8", +// )); +// } +// // SAFETY: `simdutf8` has ensured it's a valid UTF-8 string +// Ok(unsafe { String::from_utf8_unchecked(bytes) }) +// } impl FileSystem for FileSystemOs { - fn read_to_string(&self, path: &Path) -> io::Result { + async fn read_to_string(&self, path: &Path) -> io::Result { cfg_if! { if #[cfg(feature = "yarn_pnp")] { match VPath::from(path)? { VPath::Zip(info) => { self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path) } - VPath::Virtual(info) => read_to_string(&info.physical_base_path()), - VPath::Native(path) => read_to_string(&path), + VPath::Virtual(info) => tokio::fs::read_to_string(&info.physical_base_path()).await, + VPath::Native(path) => tokio::fs::read_to_string(&path).await, } } else { - read_to_string(path) + tokio::fs::read_to_string(path).await } } } - fn metadata(&self, path: &Path) -> io::Result { + async fn metadata(&self, path: &Path) -> io::Result { cfg_if! { if #[cfg(feature = "yarn_pnp")] { match VPath::from(path)? { @@ -145,21 +145,21 @@ impl FileSystem for FileSystemOs { .file_type(info.physical_base_path(), info.zip_path) .map(FileMetadata::from), VPath::Virtual(info) => { - fs::metadata(info.physical_base_path()).map(FileMetadata::from) + tokio::fs::metadata(info.physical_base_path()).await.map(FileMetadata::from) } - VPath::Native(path) => fs::metadata(path).map(FileMetadata::from), + VPath::Native(path) => tokio::fs::metadata(path).await.map(FileMetadata::from), } } else { - fs::metadata(path).map(FileMetadata::from) + tokio::fs::metadata(path).await.map(FileMetadata::from) } } } - fn symlink_metadata(&self, path: &Path) -> io::Result { - fs::symlink_metadata(path).map(FileMetadata::from) + async fn symlink_metadata(&self, path: &Path) -> io::Result { + tokio::fs::symlink_metadata(path).await.map(FileMetadata::from) } - fn canonicalize(&self, path: &Path) -> io::Result { + async fn canonicalize(&self, path: &Path) -> io::Result { cfg_if! { if #[cfg(feature = "yarn_pnp")] { match VPath::from(path)? { @@ -175,7 +175,7 @@ impl FileSystem for FileSystemOs { use std::path::Component; let mut path_buf = path.to_path_buf(); loop { - let link = fs::read_link(&path_buf)?; + let link = tokio::fs::read_link(&path_buf).await?; path_buf.pop(); for component in link.components() { match component { @@ -199,7 +199,7 @@ impl FileSystem for FileSystemOs { Component::CurDir | Component::Prefix(_) => {} } } - if !fs::symlink_metadata(&path_buf)?.is_symlink() { + if !tokio::fs::symlink_metadata(&path_buf).await?.is_symlink() { break; } } @@ -209,8 +209,8 @@ impl FileSystem for FileSystemOs { } } -#[test] -fn metadata() { +#[tokio::test] +async fn metadata() { let meta = FileMetadata { is_file: true, is_dir: true, is_symlink: true }; assert_eq!( format!("{meta:?}"), diff --git a/src/lib.rs b/src/lib.rs index efc06cb8..88d9edb2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,6 +71,7 @@ use std::{ sync::Arc, }; +use futures::future::try_join_all; use rustc_hash::FxHashSet; use serde_json::Value as JSONValue; @@ -167,13 +168,13 @@ impl ResolverGeneric { /// # Errors /// /// * See [ResolveError] - pub fn resolve>( + pub async fn resolve>( &self, directory: P, specifier: &str, ) -> Result { let mut ctx = Ctx::default(); - self.resolve_tracing(directory.as_ref(), specifier, &mut ctx) + self.resolve_tracing(directory.as_ref(), specifier, &mut ctx).await } /// Resolve `specifier` at absolute `path` with [ResolveContext] @@ -181,7 +182,7 @@ impl ResolverGeneric { /// # Errors /// /// * See [ResolveError] - pub fn resolve_with_context>( + pub async fn resolve_with_context>( &self, directory: P, specifier: &str, @@ -189,7 +190,7 @@ impl ResolverGeneric { ) -> Result { let mut ctx = Ctx::default(); ctx.init_file_dependencies(); - let result = self.resolve_tracing(directory.as_ref(), specifier, &mut ctx); + let result = self.resolve_tracing(directory.as_ref(), specifier, &mut ctx).await; if let Some(deps) = &mut ctx.file_dependencies { resolve_context.file_dependencies.extend(deps.drain(..)); } @@ -200,7 +201,7 @@ impl ResolverGeneric { } /// Wrap `resolve_impl` with `tracing` information - fn resolve_tracing( + async fn resolve_tracing( &self, directory: &Path, specifier: &str, @@ -208,7 +209,7 @@ impl ResolverGeneric { ) -> Result { let span = tracing::debug_span!("resolve", path = ?directory, specifier = specifier); let _enter = span.enter(); - let r = self.resolve_impl(directory, specifier, ctx); + let r = self.resolve_impl(directory, specifier, ctx).await; match &r { Ok(r) => { tracing::debug!(options = ?self.options, path = ?directory, specifier = specifier, ret = ?r.path); @@ -220,7 +221,7 @@ impl ResolverGeneric { r } - fn resolve_impl( + async fn resolve_impl( &self, path: &Path, specifier: &str, @@ -228,11 +229,11 @@ impl ResolverGeneric { ) -> Result { ctx.with_fully_specified(self.options.fully_specified); let cached_path = self.cache.value(path); - let cached_path = self.require(&cached_path, specifier, ctx)?; - let path = self.load_realpath(&cached_path)?; + let cached_path = self.require(&cached_path, specifier, ctx).await?; + let path = self.load_realpath(&cached_path).await?; // enhanced-resolve: restrictions self.check_restrictions(&path)?; - let package_json = cached_path.find_package_json(&self.cache.fs, &self.options, ctx)?; + let package_json = cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await?; if let Some(package_json) = &package_json { // path must be inside the package. debug_assert!(path.starts_with(package_json.directory())); @@ -251,7 +252,7 @@ impl ResolverGeneric { /// Y: path /// /// - fn require( + async fn require( &self, cached_path: &CachedPath, specifier: &str, @@ -260,42 +261,42 @@ impl ResolverGeneric { ctx.test_for_infinite_recursion()?; // enhanced-resolve: parse - let (parsed, try_fragment_as_path) = self.load_parse(cached_path, specifier, ctx)?; + let (parsed, try_fragment_as_path) = self.load_parse(cached_path, specifier, ctx).await?; if let Some(path) = try_fragment_as_path { return Ok(path); } - self.require_without_parse(cached_path, parsed.path(), ctx) + self.require_without_parse(cached_path, parsed.path(), ctx).await } - fn require_without_parse( + async fn require_without_parse( &self, cached_path: &CachedPath, specifier: &str, ctx: &mut Ctx, ) -> Result { // tsconfig-paths - if let Some(path) = self.load_tsconfig_paths(cached_path, specifier, &mut Ctx::default())? { + if let Some(path) = self.load_tsconfig_paths(cached_path, specifier, &mut Ctx::default()).await? { return Ok(path); } // enhanced-resolve: try alias - if let Some(path) = self.load_alias(cached_path, specifier, &self.options.alias, ctx)? { + if let Some(path) = self.load_alias(cached_path, specifier, &self.options.alias, ctx).await? { return Ok(path); } let result = match Path::new(specifier).components().next() { // 2. If X begins with '/' Some(Component::RootDir | Component::Prefix(_)) => { - self.require_absolute(cached_path, specifier, ctx) + self.require_absolute(cached_path, specifier, ctx).await } // 3. If X begins with './' or '/' or '../' Some(Component::CurDir | Component::ParentDir) => { - self.require_relative(cached_path, specifier, ctx) + self.require_relative(cached_path, specifier, ctx).await } // 4. If X begins with '#' Some(Component::Normal(_)) if specifier.as_bytes()[0] == b'#' => { - self.require_hash(cached_path, specifier, ctx) + self.require_hash(cached_path, specifier, ctx).await } _ => { // 1. If X is a core module, @@ -306,18 +307,30 @@ impl ResolverGeneric { // (ESM) 5. Otherwise, // Note: specifier is now a bare specifier. // Set resolved the result of PACKAGE_RESOLVE(specifier, parentURL). - self.require_bare(cached_path, specifier, ctx) + self.require_bare(cached_path, specifier, ctx).await } }; - result.or_else(|err| { - if err.is_ignore() { - return Err(err); - } - // enhanced-resolve: try fallback - self.load_alias(cached_path, specifier, &self.options.fallback, ctx) - .and_then(|value| value.ok_or(err)) - }) + // result.or_else(|err| { + // if err.is_ignore() { + // return Err(err); + // } + // // enhanced-resolve: try fallback + // self.load_alias(cached_path, specifier, &self.options.fallback, ctx) + // .and_then(|value| value.ok_or(err)) + // }) + + match result { + Ok(_) => result, + Err(err) => { + if err.is_ignore() { + return Err(err); + } + // enhanced-resolve: try fallback + self.load_alias(cached_path, specifier, &self.options.fallback, ctx).await + .and_then(|value| value.ok_or(err)) + }, + } } // PACKAGE_RESOLVE(packageSpecifier, parentURL) @@ -337,7 +350,7 @@ impl ResolverGeneric { Ok(()) } - fn require_absolute( + async fn require_absolute( &self, cached_path: &CachedPath, specifier: &str, @@ -349,24 +362,24 @@ impl ResolverGeneric { .next() .is_some_and(|c| matches!(c, Component::RootDir | Component::Prefix(_)))); if !self.options.prefer_relative && self.options.prefer_absolute { - if let Ok(path) = self.load_package_self_or_node_modules(cached_path, specifier, ctx) { + if let Ok(path) = self.load_package_self_or_node_modules(cached_path, specifier, ctx).await { return Ok(path); } } - if let Some(path) = self.load_roots(specifier, ctx) { + if let Some(path) = self.load_roots(specifier, ctx).await { return Ok(path); } // 2. If X begins with '/' // a. set Y to be the file system root let path = self.cache.value(Path::new(specifier)); - if let Some(path) = self.load_as_file_or_directory(&path, specifier, ctx)? { + if let Some(path) = self.load_as_file_or_directory(&path, specifier, ctx).await? { return Ok(path); } Err(ResolveError::NotFound(specifier.to_string())) } // 3. If X begins with './' or '/' or '../' - fn require_relative( + async fn require_relative( &self, cached_path: &CachedPath, specifier: &str, @@ -381,14 +394,14 @@ impl ResolverGeneric { let cached_path = self.cache.value(&path); // a. LOAD_AS_FILE(Y + X) // b. LOAD_AS_DIRECTORY(Y + X) - if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx)? { + if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx).await? { return Ok(path); } // c. THROW "not found" Err(ResolveError::NotFound(specifier.to_string())) } - fn require_hash( + async fn require_hash( &self, cached_path: &CachedPath, specifier: &str, @@ -396,13 +409,13 @@ impl ResolverGeneric { ) -> Result { debug_assert_eq!(specifier.chars().next(), Some('#')); // a. LOAD_PACKAGE_IMPORTS(X, dirname(Y)) - if let Some(path) = self.load_package_imports(cached_path, specifier, ctx)? { + if let Some(path) = self.load_package_imports(cached_path, specifier, ctx).await? { return Ok(path); } - self.load_package_self_or_node_modules(cached_path, specifier, ctx) + self.load_package_self_or_node_modules(cached_path, specifier, ctx).await } - fn require_bare( + async fn require_bare( &self, cached_path: &CachedPath, specifier: &str, @@ -414,11 +427,11 @@ impl ResolverGeneric { .next() .is_some_and(|c| matches!(c, Component::Normal(_)))); if self.options.prefer_relative { - if let Ok(path) = self.require_relative(cached_path, specifier, ctx) { + if let Ok(path) = self.require_relative(cached_path, specifier, ctx).await { return Ok(path); } } - self.load_package_self_or_node_modules(cached_path, specifier, ctx) + self.load_package_self_or_node_modules(cached_path, specifier, ctx).await } /// enhanced-resolve: ParsePlugin. @@ -429,7 +442,7 @@ impl ResolverGeneric { /// When a # is resolved as path it will be escaped in the result. Here: `.../some\0#thing.js`. /// /// - fn load_parse<'s>( + async fn load_parse<'s>( &self, cached_path: &CachedPath, specifier: &'s str, @@ -443,7 +456,7 @@ impl ResolverGeneric { let specifier = parsed.path(); let fragment = ctx.fragment.take().unwrap(); let path = format!("{specifier}{fragment}"); - if let Ok(path) = self.require_without_parse(cached_path, &path, ctx) { + if let Ok(path) = self.require_without_parse(cached_path, &path, ctx).await { return Ok((parsed, Some(path))); } ctx.fragment.replace(fragment); @@ -451,7 +464,7 @@ impl ResolverGeneric { Ok((parsed, None)) } - fn load_package_self_or_node_modules( + async fn load_package_self_or_node_modules( &self, cached_path: &CachedPath, specifier: &str, @@ -462,11 +475,11 @@ impl ResolverGeneric { ctx.with_fully_specified(false); } // 5. LOAD_PACKAGE_SELF(X, dirname(Y)) - if let Some(path) = self.load_package_self(cached_path, specifier, ctx)? { + if let Some(path) = self.load_package_self(cached_path, specifier, ctx).await? { return Ok(path); } // 6. LOAD_NODE_MODULES(X, dirname(Y)) - if let Some(path) = self.load_node_modules(cached_path, specifier, ctx)? { + if let Some(path) = self.load_node_modules(cached_path, specifier, ctx).await? { return Ok(path); } // 7. THROW "not found" @@ -474,7 +487,7 @@ impl ResolverGeneric { } /// LOAD_PACKAGE_IMPORTS(X, DIR) - fn load_package_imports( + async fn load_package_imports( &self, cached_path: &CachedPath, specifier: &str, @@ -483,47 +496,47 @@ impl ResolverGeneric { // 1. Find the closest package scope SCOPE to DIR. // 2. If no scope was found, return. let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx)? + cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? else { return Ok(None); }; // 3. If the SCOPE/package.json "imports" is null or undefined, return. // 4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE), ["node", "require"]) defined in the ESM resolver. - if let Some(path) = self.package_imports_resolve(specifier, &package_json, ctx)? { + if let Some(path) = self.package_imports_resolve(specifier, &package_json, ctx).await? { // 5. RESOLVE_ESM_MATCH(MATCH). - return self.resolve_esm_match(specifier, &path, ctx); + return self.resolve_esm_match(specifier, &path, ctx).await; } Ok(None) } - fn load_as_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { + async fn load_as_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { // enhanced-resolve feature: extension_alias - if let Some(path) = self.load_extension_alias(cached_path, ctx)? { + if let Some(path) = self.load_extension_alias(cached_path, ctx).await? { return Ok(Some(path)); } if self.options.enforce_extension.is_disabled() { // 1. If X is a file, load X as its file extension format. STOP - if let Some(path) = self.load_alias_or_file(cached_path, ctx)? { + if let Some(path) = self.load_alias_or_file(cached_path, ctx).await? { return Ok(Some(path)); } } // 2. If X.js is a file, load X.js as JavaScript text. STOP // 3. If X.json is a file, parse X.json to a JavaScript Object. STOP // 4. If X.node is a file, load X.node as binary addon. STOP - if let Some(path) = self.load_extensions(cached_path, &self.options.extensions, ctx)? { + if let Some(path) = self.load_extensions(cached_path, &self.options.extensions, ctx).await? { return Ok(Some(path)); } Ok(None) } - fn load_as_directory(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { + async fn load_as_directory(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { // TODO: Only package.json is supported, so warn about having other values // Checking for empty files is needed for omitting checks on package.json // 1. If X/package.json is a file, if !self.options.description_files.is_empty() { // a. Parse X/package.json, and look for "main" field. if let Some(package_json) = - cached_path.package_json(&self.cache.fs, &self.options, ctx)? + cached_path.package_json(&self.cache.fs, &self.options, ctx).await? { // b. If "main" is a falsy value, GOTO 2. for main_field in package_json.main_fields(&self.options.main_fields) { @@ -531,11 +544,11 @@ impl ResolverGeneric { let main_field_path = cached_path.path().normalize_with(main_field); // d. LOAD_AS_FILE(M) let cached_path = self.cache.value(&main_field_path); - if let Ok(Some(path)) = self.load_as_file(&cached_path, ctx) { + if let Ok(Some(path)) = self.load_as_file(&cached_path, ctx).await { return Ok(Some(path)); } // e. LOAD_INDEX(M) - if let Some(path) = self.load_index(&cached_path, ctx)? { + if let Some(path) = self.load_index(&cached_path, ctx).await? { return Ok(Some(path)); } } @@ -544,32 +557,32 @@ impl ResolverGeneric { } } // 2. LOAD_INDEX(X) - self.load_index(cached_path, ctx) + self.load_index(cached_path, ctx).await } - fn load_as_file_or_directory( + async fn load_as_file_or_directory( &self, cached_path: &CachedPath, specifier: &str, ctx: &mut Ctx, ) -> ResolveResult { if self.options.resolve_to_context { - return Ok(cached_path.is_dir(&self.cache.fs, ctx).then(|| cached_path.clone())); + return Ok(cached_path.is_dir(&self.cache.fs, ctx).await.then(|| cached_path.clone())); } if !specifier.ends_with('/') { - if let Some(path) = self.load_as_file(cached_path, ctx)? { + if let Some(path) = self.load_as_file(cached_path, ctx).await? { return Ok(Some(path)); } } - if cached_path.is_dir(&self.cache.fs, ctx) { - if let Some(path) = self.load_as_directory(cached_path, ctx)? { + if cached_path.is_dir(&self.cache.fs, ctx).await { + if let Some(path) = self.load_as_directory(cached_path, ctx).await? { return Ok(Some(path)); } } Ok(None) } - fn load_extensions( + async fn load_extensions( &self, path: &CachedPath, extensions: &[String], @@ -584,16 +597,16 @@ impl ResolverGeneric { path_with_extension.reserve_exact(extension.len()); path_with_extension.push(extension); let cached_path = self.cache.value(Path::new(&path_with_extension)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx)? { + if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { return Ok(Some(path)); } } Ok(None) } - fn load_realpath(&self, cached_path: &CachedPath) -> Result { + async fn load_realpath(&self, cached_path: &CachedPath) -> Result { if self.options.symlinks { - cached_path.realpath(&self.cache.fs).map_err(ResolveError::from) + cached_path.realpath(&self.cache.fs).await.map_err(ResolveError::from) } else { Ok(cached_path.to_path_buf()) } @@ -628,32 +641,32 @@ impl ResolverGeneric { Ok(()) } - fn load_index(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { + async fn load_index(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { for main_file in &self.options.main_files { let main_path = cached_path.path().normalize_with(main_file); let cached_path = self.cache.value(&main_path); if self.options.enforce_extension.is_disabled() { - if let Some(path) = self.load_alias_or_file(&cached_path, ctx)? { + if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { return Ok(Some(path)); } } // 1. If X/index.js is a file, load X/index.js as JavaScript text. STOP // 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP // 3. If X/index.node is a file, load X/index.node as binary addon. STOP - if let Some(path) = self.load_extensions(&cached_path, &self.options.extensions, ctx)? { + if let Some(path) = self.load_extensions(&cached_path, &self.options.extensions, ctx).await? { return Ok(Some(path)); } } Ok(None) } - fn load_alias_or_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { + async fn load_alias_or_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { if !self.options.alias_fields.is_empty() { if let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx)? + cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? { if let Some(path) = - self.load_browser_field(cached_path, None, &package_json, ctx)? + self.load_browser_field(cached_path, None, &package_json, ctx).await? { return Ok(Some(path)); } @@ -662,17 +675,17 @@ impl ResolverGeneric { // enhanced-resolve: try file as alias let alias_specifier = cached_path.path().to_string_lossy(); if let Some(path) = - self.load_alias(cached_path, &alias_specifier, &self.options.alias, ctx)? + self.load_alias(cached_path, &alias_specifier, &self.options.alias, ctx).await? { return Ok(Some(path)); } - if cached_path.is_file(&self.cache.fs, ctx) { + if cached_path.is_file(&self.cache.fs, ctx).await { return Ok(Some(cached_path.clone())); } Ok(None) } - fn load_node_modules( + async fn load_node_modules( &self, cached_path: &CachedPath, specifier: &str, @@ -691,11 +704,11 @@ impl ResolverGeneric { for module_name in &self.options.modules { for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { // Skip if /path/to/node_modules does not exist - if !cached_path.is_dir(&self.cache.fs, ctx) { + if !cached_path.is_dir(&self.cache.fs, ctx).await { continue; } - let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx) + let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx).await else { continue; }; @@ -707,10 +720,10 @@ impl ResolverGeneric { let package_path = cached_path.path().normalize_with(package_name); let cached_path = self.cache.value(&package_path); // Try foo/node_modules/package_name - if cached_path.is_dir(&self.cache.fs, ctx) { + if cached_path.is_dir(&self.cache.fs, ctx).await { // a. LOAD_PACKAGE_EXPORTS(X, DIR) if let Some(path) = - self.load_package_exports(specifier, subpath, &cached_path, ctx)? + self.load_package_exports(specifier, subpath, &cached_path, ctx).await? { return Ok(Some(path)); } @@ -723,7 +736,7 @@ impl ResolverGeneric { // i.e. `foo/node_modules/@scope` is not a directory for `foo/node_modules/@scope/package` if package_name.starts_with('@') { if let Some(path) = cached_path.parent() { - if !path.is_dir(&self.cache.fs, ctx) { + if !path.is_dir(&self.cache.fs, ctx).await { continue; } } @@ -736,7 +749,7 @@ impl ResolverGeneric { // c. LOAD_AS_DIRECTORY(DIR/X) let node_module_file = cached_path.path().normalize_with(specifier); let cached_path = self.cache.value(&node_module_file); - if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx)? { + if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx).await? { return Ok(Some(path)); } } @@ -783,24 +796,24 @@ impl ResolverGeneric { } } - fn get_module_directory( + async fn get_module_directory( &self, cached_path: &CachedPath, module_name: &str, ctx: &mut Ctx, ) -> Option { if module_name == "node_modules" { - cached_path.cached_node_modules(&self.cache, ctx) + cached_path.cached_node_modules(&self.cache, ctx).await } else if cached_path.path().components().next_back() == Some(Component::Normal(OsStr::new(module_name))) { Some(cached_path.clone()) } else { - cached_path.module_directory(module_name, &self.cache, ctx) + cached_path.module_directory(module_name, &self.cache, ctx).await } } - fn load_package_exports( + async fn load_package_exports( &self, specifier: &str, subpath: &str, @@ -809,7 +822,7 @@ impl ResolverGeneric { ) -> ResolveResult { // 2. If X does not match this pattern or DIR/NAME/package.json is not a file, // return. - let Some(package_json) = cached_path.package_json(&self.cache.fs, &self.options, ctx)? + let Some(package_json) = cached_path.package_json(&self.cache.fs, &self.options, ctx).await? else { return Ok(None); }; @@ -824,15 +837,15 @@ impl ResolverGeneric { &format!(".{subpath}"), exports, ctx, - )? { + ).await? { // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &path, ctx); + return self.resolve_esm_match(specifier, &path, ctx).await; }; } Ok(None) } - fn load_package_self( + async fn load_package_self( &self, cached_path: &CachedPath, specifier: &str, @@ -841,7 +854,7 @@ impl ResolverGeneric { // 1. Find the closest package scope SCOPE to DIR. // 2. If no scope was found, return. let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx)? + cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? else { return Ok(None); }; @@ -860,18 +873,18 @@ impl ResolverGeneric { // because `package_exports_resolve` matches subpath without the leading dot. for exports in package_json.exports_fields(&self.options.exports_fields) { if let Some(cached_path) = - self.package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx)? + self.package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx).await? { // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &cached_path, ctx); + return self.resolve_esm_match(specifier, &cached_path, ctx).await; } } } - self.load_browser_field(cached_path, Some(specifier), &package_json, ctx) + self.load_browser_field(cached_path, Some(specifier), &package_json, ctx).await } /// RESOLVE_ESM_MATCH(MATCH) - fn resolve_esm_match( + async fn resolve_esm_match( &self, specifier: &str, cached_path: &CachedPath, @@ -881,7 +894,7 @@ impl ResolverGeneric { // 2. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension format. STOP // // Non-compliant ESM can result in a directory, so directory is tried as well. - if let Some(path) = self.load_as_file_or_directory(cached_path, "", ctx)? { + if let Some(path) = self.load_as_file_or_directory(cached_path, "", ctx).await? { return Ok(Some(path)); } // 3. THROW "not found" @@ -889,7 +902,7 @@ impl ResolverGeneric { } /// enhanced-resolve: AliasFieldPlugin for [ResolveOptions::alias_fields] - fn load_browser_field( + async fn load_browser_field( &self, cached_path: &CachedPath, module_specifier: Option<&str>, @@ -912,7 +925,7 @@ impl ResolverGeneric { if ctx.resolving_alias.as_ref().is_some_and(|s| s == new_specifier) { // Complete when resolving to self `{"./a.js": "./a.js"}` if new_specifier.strip_prefix("./").filter(|s| path.ends_with(Path::new(s))).is_some() { - return if cached_path.is_file(&self.cache.fs, ctx) { + return if cached_path.is_file(&self.cache.fs, ctx).await { Ok(Some(cached_path.clone())) } else { Err(ResolveError::NotFound(new_specifier.to_string())) @@ -923,11 +936,11 @@ impl ResolverGeneric { ctx.with_resolving_alias(new_specifier.to_string()); ctx.with_fully_specified(false); let cached_path = self.cache.value(package_json.directory()); - self.require(&cached_path, new_specifier, ctx).map(Some) + self.require(&cached_path, new_specifier, ctx).await.map(Some) } /// enhanced-resolve: AliasPlugin for [ResolveOptions::alias] and [ResolveOptions::fallback]. - fn load_alias( + async fn load_alias( &self, cached_path: &CachedPath, specifier: &str, @@ -961,7 +974,7 @@ impl ResolverGeneric { specifier, ctx, &mut should_stop, - )? { + ).await? { return Ok(Some(path)); } } @@ -981,7 +994,7 @@ impl ResolverGeneric { Ok(None) } - fn load_alias_value( + async fn load_alias_value( &self, cached_path: &CachedPath, alias_key: &str, @@ -1001,7 +1014,7 @@ impl ResolverGeneric { let alias_path = Path::new(alias_value).normalize(); // Must not append anything to alias_value if it is a file. let alias_value_cached_path = self.cache.value(&alias_path); - if alias_value_cached_path.is_file(&self.cache.fs, ctx) { + if alias_value_cached_path.is_file(&self.cache.fs, ctx).await { return Ok(None); } @@ -1017,7 +1030,7 @@ impl ResolverGeneric { *should_stop = true; ctx.with_fully_specified(false); - return match self.require(cached_path, new_specifier.as_ref(), ctx) { + return match self.require(cached_path, new_specifier.as_ref(), ctx).await { Err(ResolveError::NotFound(_) | ResolveError::MatchedAliasNotFound(_, _)) => { Ok(None) } @@ -1036,7 +1049,7 @@ impl ResolverGeneric { /// # Errors /// /// * [ResolveError::ExtensionAlias]: When all of the aliased extensions are not found - fn load_extension_alias(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { + async fn load_extension_alias(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { if self.options.extension_alias.is_empty() { return Ok(None); } @@ -1061,13 +1074,13 @@ impl ResolverGeneric { path_with_extension.reserve_exact(extension.len()); path_with_extension.push(extension); let cached_path = self.cache.value(Path::new(&path_with_extension)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx)? { + if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { ctx.with_fully_specified(false); return Ok(Some(path)); } } // Bail if path is module directory such as `ipaddr.js` - if !cached_path.is_file(&self.cache.fs, ctx) { + if !cached_path.is_file(&self.cache.fs, ctx).await { ctx.with_fully_specified(false); return Ok(None); } @@ -1089,14 +1102,14 @@ impl ResolverGeneric { /// defaults to context configuration option. /// /// On non-Windows systems these requests are resolved as an absolute path first. - fn load_roots(&self, specifier: &str, ctx: &mut Ctx) -> Option { + async fn load_roots(&self, specifier: &str, ctx: &mut Ctx) -> Option { if self.options.roots.is_empty() { return None; } if let Some(specifier) = specifier.strip_prefix(SLASH_START) { for root in &self.options.roots { let cached_path = self.cache.value(root); - if let Ok(path) = self.require_relative(&cached_path, specifier, ctx) { + if let Ok(path) = self.require_relative(&cached_path, specifier, ctx).await { return Some(path); } } @@ -1104,7 +1117,7 @@ impl ResolverGeneric { None } - fn load_tsconfig_paths( + async fn load_tsconfig_paths( &self, cached_path: &CachedPath, specifier: &str, @@ -1117,24 +1130,24 @@ impl ResolverGeneric { /* root */ true, &tsconfig_options.config_file, &tsconfig_options.references, - )?; + ).await?; let paths = tsconfig.resolve(cached_path.path(), specifier); for path in paths { let cached_path = self.cache.value(&path); - if let Ok(path) = self.require_relative(&cached_path, ".", ctx) { + if let Ok(path) = self.require_relative(&cached_path, ".", ctx).await { return Ok(Some(path)); } } Ok(None) } - fn load_tsconfig( + async fn load_tsconfig( &self, root: bool, path: &Path, references: &TsconfigReferences, ) -> Result, ResolveError> { - self.cache.tsconfig(root, path, |tsconfig| { + self.cache.tsconfig(root, path, |mut tsconfig| async move { let directory = self.cache.value(tsconfig.directory()); tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); @@ -1142,19 +1155,18 @@ impl ResolverGeneric { if let Some(extends) = &tsconfig.extends { let extended_tsconfig_paths = match extends { ExtendsField::Single(s) => { - vec![self.get_extended_tsconfig_path(&directory, tsconfig, s)?] + vec![self.get_extended_tsconfig_path(&directory, &tsconfig, s).await?] } - ExtendsField::Multiple(specifiers) => specifiers + ExtendsField::Multiple(specifiers) => try_join_all(specifiers .iter() - .map(|s| self.get_extended_tsconfig_path(&directory, tsconfig, s)) - .collect::, ResolveError>>()?, + .map(|s| self.get_extended_tsconfig_path(&directory, &tsconfig, s))).await?, }; for extended_tsconfig_path in extended_tsconfig_paths { let extended_tsconfig = self.load_tsconfig( /* root */ false, &extended_tsconfig_path, &TsconfigReferences::Disabled, - )?; + ).await?; tsconfig.extend_tsconfig(&extended_tsconfig); } } @@ -1179,23 +1191,24 @@ impl ResolverGeneric { let tsconfig = self.cache.tsconfig( /* root */ true, &reference_tsconfig_path, - |reference_tsconfig| { + |reference_tsconfig| async { if reference_tsconfig.path == tsconfig.path { return Err(ResolveError::TsconfigSelfReference( reference_tsconfig.path.clone(), )); } - Ok(()) + Ok(reference_tsconfig) }, - )?; + ).await?; reference.tsconfig.replace(tsconfig); } } - Ok(()) - }) + + Ok(tsconfig) + }).await } - fn get_extended_tsconfig_path( + async fn get_extended_tsconfig_path( &self, directory: &CachedPath, tsconfig: &TsConfig, @@ -1213,6 +1226,7 @@ impl ResolverGeneric { ..ResolveOptions::default() }) .load_package_self_or_node_modules(directory, specifier, &mut Ctx::default()) + .await .map(|p| p.to_path_buf()) .map_err(|err| match err { ResolveError::NotFound(_) => { @@ -1224,7 +1238,7 @@ impl ResolverGeneric { } /// PACKAGE_RESOLVE(packageSpecifier, parentURL) - fn package_resolve( + async fn package_resolve( &self, cached_path: &CachedPath, specifier: &str, @@ -1240,7 +1254,7 @@ impl ResolverGeneric { for module_name in &self.options.modules { for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { // 1. Let packageURL be the URL resolution of "node_modules/" concatenated with packageSpecifier, relative to parentURL. - let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx) + let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx).await else { continue; }; @@ -1249,10 +1263,10 @@ impl ResolverGeneric { let cached_path = self.cache.value(&package_path); // 3. If the folder at packageURL does not exist, then // 1. Continue the next loop iteration. - if cached_path.is_dir(&self.cache.fs, ctx) { + if cached_path.is_dir(&self.cache.fs, ctx).await { // 4. Let pjson be the result of READ_PACKAGE_JSON(packageURL). if let Some(package_json) = - cached_path.package_json(&self.cache.fs, &self.options, ctx)? + cached_path.package_json(&self.cache.fs, &self.options, ctx).await? { // 5. If pjson is not null and pjson.exports is not null or undefined, then // 1. Return the result of PACKAGE_EXPORTS_RESOLVE(packageURL, packageSubpath, pjson.exports, defaultConditions). @@ -1262,7 +1276,7 @@ impl ResolverGeneric { &format!(".{subpath}"), exports, ctx, - )? { + ).await? { return Ok(Some(path)); } } @@ -1273,7 +1287,7 @@ impl ResolverGeneric { // 1. Return the URL resolution of main in packageURL. let path = cached_path.path().normalize_with(main_field); let cached_path = self.cache.value(&path); - if cached_path.is_file(&self.cache.fs, ctx) { + if cached_path.is_file(&self.cache.fs, ctx).await { return Ok(Some(cached_path)); } } @@ -1281,7 +1295,7 @@ impl ResolverGeneric { } let subpath = format!(".{subpath}"); ctx.with_fully_specified(false); - return self.require(&cached_path, &subpath, ctx).map(Some); + return self.require(&cached_path, &subpath, ctx).await.map(Some); } } } @@ -1290,7 +1304,7 @@ impl ResolverGeneric { } /// PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions) - fn package_exports_resolve( + async fn package_exports_resolve( &self, package_url: &Path, subpath: &str, @@ -1361,7 +1375,7 @@ impl ResolverGeneric { /* is_imports */ false, conditions, ctx, - )?; + ).await?; // 2. If resolved is not null or undefined, return resolved. if let Some(path) = resolved { return Ok(Some(path)); @@ -1381,7 +1395,7 @@ impl ResolverGeneric { /* is_imports */ false, conditions, ctx, - )? { + ).await? { // 3. If resolved is not null or undefined, return resolved. return Ok(Some(path)); } @@ -1394,7 +1408,7 @@ impl ResolverGeneric { } /// PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions) - fn package_imports_resolve( + async fn package_imports_resolve( &self, specifier: &str, package_json: &PackageJson, @@ -1430,7 +1444,7 @@ impl ResolverGeneric { /* is_imports */ true, &self.options.condition_names, ctx, - )? { + ).await? { // 2. If resolved is not null or undefined, return resolved. return Ok(Some(path)); } @@ -1448,7 +1462,7 @@ impl ResolverGeneric { } /// PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL, isImports, conditions) - fn package_imports_exports_resolve( + async fn package_imports_exports_resolve( &self, match_key: &str, match_obj: &JSONMap, @@ -1475,7 +1489,7 @@ impl ResolverGeneric { is_imports, conditions, ctx, - ); + ).await; } } @@ -1526,7 +1540,7 @@ impl ResolverGeneric { is_imports, conditions, ctx, - ); + ).await; } // 4. Return null. Ok(None) @@ -1534,7 +1548,7 @@ impl ResolverGeneric { /// PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions) #[allow(clippy::too_many_arguments)] - fn package_target_resolve( + async fn package_target_resolve( &self, package_url: &Path, target_key: &str, @@ -1590,7 +1604,7 @@ impl ResolverGeneric { normalize_string_target(target_key, target, pattern_match, package_url)?; let package_url = self.cache.value(package_url); // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). - return self.package_resolve(&package_url, &target, ctx); + return self.package_resolve(&package_url, &target, ctx).await; } // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. @@ -1629,7 +1643,7 @@ impl ResolverGeneric { is_imports, conditions, ctx, - ); + ).await; // 3. If resolved is equal to undefined, continue the loop. if let Some(path) = resolved? { // 4. Return resolved. @@ -1661,7 +1675,7 @@ impl ResolverGeneric { is_imports, conditions, ctx, - ); + ).await; if resolved.is_err() && i == targets.len() { return resolved; diff --git a/src/path.rs b/src/path.rs index f66fdd76..38b980cd 100644 --- a/src/path.rs +++ b/src/path.rs @@ -101,8 +101,8 @@ impl PathUtil for Path { } // https://github.com/webpack/enhanced-resolve/blob/main/test/path.test.js -#[test] -fn is_invalid_exports_target() { +#[tokio::test] +async fn is_invalid_exports_target() { let test_cases = [ "../a.js", "../", @@ -123,8 +123,8 @@ fn is_invalid_exports_target() { assert!(!Path::new("/").is_invalid_exports_target()); } -#[test] -fn normalize() { +#[tokio::test] +async fn normalize() { assert_eq!(Path::new("/foo/.././foo/").normalize(), Path::new("/foo")); assert_eq!(Path::new("C://").normalize(), Path::new("C://")); assert_eq!(Path::new("C:").normalize(), Path::new("C:")); diff --git a/src/resolution.rs b/src/resolution.rs index a3aaa2e7..e0f7dc89 100644 --- a/src/resolution.rs +++ b/src/resolution.rs @@ -76,8 +76,8 @@ impl Resolution { } } -#[test] -fn test() { +#[tokio::test] +async fn test() { let resolution = Resolution { path: PathBuf::from("foo"), query: Some("?query".to_string()), diff --git a/src/tests/alias.rs b/src/tests/alias.rs index 2fa8f903..e3b53b0d 100644 --- a/src/tests/alias.rs +++ b/src/tests/alias.rs @@ -5,9 +5,9 @@ use std::path::Path; use crate::{AliasValue, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver}; -#[test] +#[tokio::test] #[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -fn alias() { +async fn alias() { use super::memory_fs::MemoryFS; use crate::ResolverGeneric; use std::path::{Path, PathBuf}; @@ -106,7 +106,7 @@ fn alias() { ]; for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(f, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(PathBuf::from(expected)), "{comment} {request}"); } @@ -116,14 +116,14 @@ fn alias() { ]; for (comment, request, expected) in ignore { - let resolution = resolver.resolve(f, request); + let resolution = resolver.resolve(f, request).await; assert_eq!(resolution, Err(expected), "{comment} {request}"); } } // Not part of enhanced-resolve -#[test] -fn infinite_recursion() { +#[tokio::test] +async fn infinite_recursion() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { alias: vec![ @@ -132,7 +132,7 @@ fn infinite_recursion() { ], ..ResolveOptions::default() }); - let resolution = resolver.resolve(f, "./a"); + let resolution = resolver.resolve(f, "./a").await; assert_eq!(resolution, Err(ResolveError::Recursion)); } @@ -150,20 +150,20 @@ fn check_slash(path: &Path) { } } -#[test] -fn absolute_path() { +#[tokio::test] +async fn absolute_path() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { alias: vec![(f.join("foo").to_str().unwrap().to_string(), vec![AliasValue::Ignore])], modules: vec![f.clone().to_str().unwrap().to_string()], ..ResolveOptions::default() }); - let resolution = resolver.resolve(&f, "foo/index"); + let resolution = resolver.resolve(&f, "foo/index").await; assert_eq!(resolution, Err(ResolveError::Ignored(f.join("foo")))); } -#[test] -fn system_path() { +#[tokio::test] +async fn system_path() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { alias: vec![("@app".into(), vec![AliasValue::from(f.join("alias").to_string_lossy())])], @@ -173,14 +173,14 @@ fn system_path() { let specifiers = ["@app/files/a", "@app/files/a.js"]; for specifier in specifiers { - let path = resolver.resolve(&f, specifier).map(Resolution::into_path_buf).unwrap(); + let path = resolver.resolve(&f, specifier).await.map(Resolution::into_path_buf).unwrap(); assert_eq!(path, f.join("alias/files/a.js")); check_slash(&path); } } -#[test] -fn alias_is_full_path() { +#[tokio::test] +async fn alias_is_full_path() { let f = super::fixture(); let dir = f.join("foo"); let dir_str = dir.to_string_lossy().to_string(); @@ -203,7 +203,7 @@ fn alias_is_full_path() { for specifier in specifiers { let resolution = resolver.resolve_with_context(&f, &specifier, &mut ctx); - assert_eq!(resolution.map(|r| r.full_path()), Ok(dir.join("index.js"))); + assert_eq!(resolution.await.map(|r| r.full_path()), Ok(dir.join("index.js"))); } for path in ctx.file_dependencies { @@ -221,8 +221,8 @@ fn alias_is_full_path() { } // For the `should_stop` variable in `load_alias` -#[test] -fn all_alias_values_are_not_found() { +#[tokio::test] +async fn all_alias_values_are_not_found() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { alias: vec![( @@ -231,15 +231,15 @@ fn all_alias_values_are_not_found() { )], ..ResolveOptions::default() }); - let resolution = resolver.resolve(&f, "m1/a.js"); + let resolution = resolver.resolve(&f, "m1/a.js").await; assert_eq!( resolution, Err(ResolveError::MatchedAliasNotFound("m1/a.js".to_string(), "m1".to_string(),)) ); } -#[test] -fn alias_fragment() { +#[tokio::test] +async fn alias_fragment() { let f = super::fixture(); let data = [ @@ -264,13 +264,13 @@ fn alias_fragment() { alias: vec![("foo".to_string(), vec![AliasValue::Path(request.to_string())])], ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "foo").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, "foo").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); } } -#[test] -fn alias_try_fragment_as_path() { +#[tokio::test] +async fn alias_try_fragment_as_path() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { alias: vec![( @@ -279,6 +279,6 @@ fn alias_try_fragment_as_path() { )], ..ResolveOptions::default() }); - let resolution = resolver.resolve(&f, "#/a").map(|r| r.full_path()); + let resolution = resolver.resolve(&f, "#/a").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(f.join("#").join("a.js"))); } diff --git a/src/tests/browser_field.rs b/src/tests/browser_field.rs index 171ee099..f7459452 100644 --- a/src/tests/browser_field.rs +++ b/src/tests/browser_field.rs @@ -2,8 +2,8 @@ use crate::{AliasValue, ResolveError, ResolveOptions, Resolver}; -#[test] -fn ignore() { +#[tokio::test] +async fn ignore() { let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { @@ -25,33 +25,33 @@ fn ignore() { ]; for (path, request, expected) in data { - let resolution = resolver.resolve(&path, request); + let resolution = resolver.resolve(&path, request).await; let expected = ResolveError::Ignored(expected); assert_eq!(resolution, Err(expected), "{path:?} {request}"); } } -#[test] -fn shared_resolvers() { +#[tokio::test] +async fn shared_resolvers() { let f = super::fixture().join("browser-module"); let resolver1 = Resolver::new(ResolveOptions { alias_fields: vec![vec!["innerBrowser1".into(), "field".into(), "browser".into()]], ..ResolveOptions::default() }); - let resolved_path = resolver1.resolve(&f, "./lib/main1.js").map(|r| r.full_path()); + let resolved_path = resolver1.resolve(&f, "./lib/main1.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("lib/main.js"))); let resolver2 = resolver1.clone_with_options(ResolveOptions { alias_fields: vec![vec!["innerBrowser2".into(), "browser".into()]], ..ResolveOptions::default() }); - let resolved_path = resolver2.resolve(&f, "./lib/main2.js").map(|r| r.full_path()); + let resolved_path = resolver2.resolve(&f, "./lib/main2.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("./lib/replaced.js"))); } -#[test] -fn replace_file() { +#[tokio::test] +async fn replace_file() { let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { @@ -86,13 +86,13 @@ fn replace_file() { ]; for (comment, path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn recurse_fail() { +#[tokio::test] +async fn recurse_fail() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { @@ -108,13 +108,13 @@ fn recurse_fail() { ]; for (comment, path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Err(expected), "{comment} {path:?} {request}"); } } -#[test] -fn broken() { +#[tokio::test] +async fn broken() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { @@ -130,13 +130,13 @@ fn broken() { ]; for (path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, expected, "{path:?} {request}"); } } -#[test] -fn crypto_js() { +#[tokio::test] +async fn crypto_js() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { @@ -148,13 +148,13 @@ fn crypto_js() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(f.join("crypto-js"), "crypto").map(|r| r.full_path()); + let resolved_path = resolver.resolve(f.join("crypto-js"), "crypto").await.map(|r| r.full_path()); assert_eq!(resolved_path, Err(ResolveError::Ignored(f.join("crypto-js")))); } // https://github.com/webpack/webpack/blob/87660921808566ef3b8796f8df61bd79fc026108/test/cases/resolving/browser-field/index.js#L40-L43 -#[test] -fn recursive() { +#[tokio::test] +async fn recursive() { let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { @@ -170,13 +170,13 @@ fn recursive() { ]; for (comment, path, request) in data { - let resolved_path = resolver.resolve(&path, request); + let resolved_path = resolver.resolve(&path, request).await; assert_eq!(resolved_path, Err(ResolveError::Recursion), "{comment} {path:?} {request}"); } } -#[test] -fn with_query() { +#[tokio::test] +async fn with_query() { let f = super::fixture().join("browser-module"); let resolver = Resolver::new(ResolveOptions { @@ -184,6 +184,6 @@ fn with_query() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "./foo").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, "./foo").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("lib").join("browser.js?query"))); } diff --git a/src/tests/builtins.rs b/src/tests/builtins.rs index 5d6d14d9..7fe24c38 100644 --- a/src/tests/builtins.rs +++ b/src/tests/builtins.rs @@ -2,16 +2,16 @@ use std::path::Path; use crate::{ResolveError, ResolveOptions, Resolver}; -#[test] -fn builtins_off() { +#[tokio::test] +async fn builtins_off() { let f = Path::new("/"); let resolver = Resolver::default(); - let resolved_path = resolver.resolve(f, "zlib").map(|r| r.full_path()); + let resolved_path = resolver.resolve(f, "zlib").await.map(|r| r.full_path()); assert_eq!(resolved_path, Err(ResolveError::NotFound("zlib".into()))); } -#[test] -fn builtins() { +#[tokio::test] +async fn builtins() { let f = Path::new("/"); let resolver = Resolver::new(ResolveOptions::default().with_builtin_modules(true)); @@ -87,25 +87,25 @@ fn builtins() { for request in pass { let prefixed_request = format!("node:{request}"); for request in [prefixed_request.clone(), request.to_string()] { - let resolved_path = resolver.resolve(f, &request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(f, &request).await.map(|r| r.full_path()); let err = ResolveError::Builtin(prefixed_request.clone()); assert_eq!(resolved_path, Err(err), "{request}"); } } } -#[test] -fn fail() { +#[tokio::test] +async fn fail() { let f = Path::new("/"); let resolver = Resolver::new(ResolveOptions::default().with_builtin_modules(true)); let request = "xxx"; - let resolved_path = resolver.resolve(f, request); + let resolved_path = resolver.resolve(f, request).await; let err = ResolveError::NotFound(request.to_string()); assert_eq!(resolved_path, Err(err), "{request}"); } -#[test] -fn imports() { +#[tokio::test] +async fn imports() { let f = super::fixture().join("builtins"); let resolver = Resolver::new(ResolveOptions { builtin_modules: true, @@ -114,7 +114,7 @@ fn imports() { }); for request in ["#fs", "#http"] { - let resolved_path = resolver.resolve(f.clone(), request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(f.clone(), request).await.map(|r| r.full_path()); let err = ResolveError::Builtin(format!("node:{}", request.trim_start_matches('#'))); assert_eq!(resolved_path, Err(err)); } diff --git a/src/tests/dependencies.rs b/src/tests/dependencies.rs index bcc2355b..b92fad12 100644 --- a/src/tests/dependencies.rs +++ b/src/tests/dependencies.rs @@ -18,8 +18,8 @@ mod windows { ]) } - #[test] - fn test() { + #[tokio::test] + async fn test() { let file_system = file_system(); let resolver = ResolverGeneric::::new_with_file_system( @@ -97,7 +97,7 @@ mod windows { let mut ctx = ResolveContext::default(); let path = PathBuf::from(context); let resolved = - resolver.resolve_with_context(path, request, &mut ctx).map(|r| r.full_path()); + resolver.resolve_with_context(path, request, &mut ctx).await.map(|r| r.full_path()); assert_eq!(resolved, Ok(PathBuf::from(result))); let file_dependencies = FxHashSet::from_iter(file_dependencies.iter().map(PathBuf::from)); diff --git a/src/tests/exports_field.rs b/src/tests/exports_field.rs index 8f3cb4d8..7d23de5f 100644 --- a/src/tests/exports_field.rs +++ b/src/tests/exports_field.rs @@ -6,8 +6,8 @@ use crate::{Ctx, PathUtil, ResolveError, ResolveOptions, Resolver}; use serde_json::json; use std::path::Path; -#[test] -fn test_simple() { +#[tokio::test] +async fn test_simple() { let f = super::fixture().join("exports-field"); let f2 = super::fixture().join("exports-field2"); let f4 = super::fixture().join("exports-field-error"); @@ -49,7 +49,7 @@ fn test_simple() { // * should log the correct info for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } @@ -76,14 +76,14 @@ fn test_simple() { ]; for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request); + let resolution = resolver.resolve(&path, request).await; assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); } } // resolve using exports field, not a browser field #1 -#[test] -fn exports_not_browser_field1() { +#[tokio::test] +async fn exports_not_browser_field1() { let f = super::fixture().join("exports-field"); let resolver = Resolver::new(ResolveOptions { @@ -93,13 +93,13 @@ fn exports_not_browser_field1() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "exports-field/dist/main.js").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, "exports-field/dist/main.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("node_modules/exports-field/lib/lib2/main.js"))); } // resolve using exports field and a browser alias field #2 -#[test] -fn exports_not_browser_field2() { +#[tokio::test] +async fn exports_not_browser_field2() { let f2 = super::fixture().join("exports-field2"); let resolver = Resolver::new(ResolveOptions { @@ -109,13 +109,13 @@ fn exports_not_browser_field2() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f2, "exports-field/dist/main.js").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f2, "exports-field/dist/main.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f2.join("node_modules/exports-field/lib/browser.js"))); } // should resolve extension without fullySpecified -#[test] -fn extension_without_fully_specified() { +#[tokio::test] +async fn extension_without_fully_specified() { let f2 = super::fixture().join("exports-field2"); let commonjs_resolver = Resolver::new(ResolveOptions { @@ -125,12 +125,12 @@ fn extension_without_fully_specified() { }); let resolved_path = - commonjs_resolver.resolve(&f2, "exports-field/dist/main").map(|r| r.full_path()); + commonjs_resolver.resolve(&f2, "exports-field/dist/main").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f2.join("node_modules/exports-field/lib/lib2/main.js"))); } -#[test] -fn field_name_path() { +#[tokio::test] +async fn field_name_path() { let f2 = super::fixture().join("exports-field2"); let f3 = super::fixture().join("exports-field3"); @@ -148,7 +148,7 @@ fn field_name_path() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f3, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f3, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f3.join("node_modules/exports-field/main.js"))); } @@ -159,7 +159,7 @@ fn field_name_path() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f2, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f2, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f2.join("node_modules/exports-field/index.js"))); // field name path #5 @@ -169,7 +169,7 @@ fn field_name_path() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f3, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f3, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f3.join("node_modules/exports-field/index"))); // non-compliant export targeting a directory @@ -178,12 +178,12 @@ fn field_name_path() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f3, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f3, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f3.join("node_modules/exports-field/src/index.js"))); } -#[test] -fn shared_resolvers() { +#[tokio::test] +async fn shared_resolvers() { let f3 = super::fixture().join("exports-field3"); let resolver1 = Resolver::new(ResolveOptions { @@ -191,7 +191,7 @@ fn shared_resolvers() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver1.resolve(&f3, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver1.resolve(&f3, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f3.join("node_modules/exports-field/main.js"))); let resolver2 = resolver1.clone_with_options(ResolveOptions { @@ -199,12 +199,12 @@ fn shared_resolvers() { extensions: vec![".js".into()], ..ResolveOptions::default() }); - let resolved_path = resolver2.resolve(&f3, "exports-field").map(|r| r.full_path()); + let resolved_path = resolver2.resolve(&f3, "exports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f3.join("node_modules/exports-field/index"))); } -#[test] -fn extension_alias_1_2() { +#[tokio::test] +async fn extension_alias_1_2() { let f = super::fixture().join("exports-field-and-extension-alias"); let resolver = Resolver::new(ResolveOptions { @@ -222,13 +222,13 @@ fn extension_alias_1_2() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn extension_alias_3() { +#[tokio::test] +async fn extension_alias_3() { let f = super::fixture().join("exports-field-and-extension-alias"); let resolver = Resolver::new(ResolveOptions { @@ -248,13 +248,13 @@ fn extension_alias_3() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn extension_alias_throw_error() { +#[tokio::test] +async fn extension_alias_throw_error() { let f = super::fixture().join("exports-field-and-extension-alias"); let resolver = Resolver::new(ResolveOptions { @@ -275,7 +275,7 @@ fn extension_alias_throw_error() { ]; for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request); + let resolution = resolver.resolve(&path, request).await; assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); } } @@ -307,8 +307,8 @@ fn exports_field(value: serde_json::Value) -> serde_json::Value { value } -#[test] -fn test_cases() { +#[tokio::test] +async fn test_cases() { let test_cases = [ TestCase { name: "sample #1", @@ -2525,6 +2525,7 @@ fn test_cases() { &case.exports_field, &mut Ctx::default(), ) + .await .map(|p| p.map(|p| p.to_path_buf())); if let Some(expect) = case.expect { if expect.is_empty() { diff --git a/src/tests/extension_alias.rs b/src/tests/extension_alias.rs index cf4fd362..926a8df5 100644 --- a/src/tests/extension_alias.rs +++ b/src/tests/extension_alias.rs @@ -2,8 +2,8 @@ use crate::{ResolveError, ResolveOptions, Resolver}; -#[test] -fn extension_alias() { +#[tokio::test] +async fn extension_alias() { let f = super::fixture().join("extension-alias"); let resolver = Resolver::new(ResolveOptions { @@ -25,19 +25,19 @@ fn extension_alias() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } // should not allow to fallback to the original extension or add extensions - let resolution = resolver.resolve(&f, "./index.mjs").unwrap_err(); + let resolution = resolver.resolve(&f, "./index.mjs").await.unwrap_err(); let expected = ResolveError::ExtensionAlias("index.mjs".into(), "index.mts".into(), f); assert_eq!(resolution, expected); } // should not apply extension alias to extensions or mainFiles field -#[test] -fn not_apply_to_extension_nor_main_files() { +#[tokio::test] +async fn not_apply_to_extension_nor_main_files() { let f = super::fixture().join("extension-alias"); let resolver = Resolver::new(ResolveOptions { @@ -54,7 +54,7 @@ fn not_apply_to_extension_nor_main_files() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); let expected = f.join(expected); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } diff --git a/src/tests/extensions.rs b/src/tests/extensions.rs index 1ebd86f4..c316a18c 100644 --- a/src/tests/extensions.rs +++ b/src/tests/extensions.rs @@ -3,8 +3,8 @@ use crate::{EnforceExtension, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver}; use rustc_hash::FxHashSet; -#[test] -fn extensions() { +#[tokio::test] +async fn extensions() { let f = super::fixture().join("extensions"); let resolver = Resolver::new(ResolveOptions { @@ -23,7 +23,7 @@ fn extensions() { ]; for (comment, request, expected_path) in pass { - let resolved_path = resolver.resolve(&f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); let expected = f.join(expected_path); assert_eq!(resolved_path, Ok(expected), "{comment} {request} {expected_path}"); } @@ -34,15 +34,15 @@ fn extensions() { ]; for (comment, request, expected_error) in fail { - let resolution = resolver.resolve(&f, request); + let resolution = resolver.resolve(&f, request).await; let error = ResolveError::NotFound(expected_error); assert_eq!(resolution, Err(error), "{comment} {request} {resolution:?}"); } } // should default enforceExtension to true when extensions includes an empty string -#[test] -fn default_enforce_extension() { +#[tokio::test] +async fn default_enforce_extension() { let f = super::fixture().join("extensions"); let mut ctx = ResolveContext::default(); @@ -50,7 +50,8 @@ fn default_enforce_extension() { extensions: vec![".ts".into(), String::new(), ".js".into()], ..ResolveOptions::default() }) - .resolve_with_context(&f, "./foo", &mut ctx); + .resolve_with_context(&f, "./foo", &mut ctx) + .await; assert_eq!(resolved.map(Resolution::into_path_buf), Ok(f.join("foo.ts"))); assert_eq!( @@ -61,8 +62,8 @@ fn default_enforce_extension() { } // should respect enforceExtension when extensions includes an empty string -#[test] -fn respect_enforce_extension() { +#[tokio::test] +async fn respect_enforce_extension() { let f = super::fixture().join("extensions"); let mut ctx = ResolveContext::default(); @@ -71,7 +72,7 @@ fn respect_enforce_extension() { extensions: vec![".ts".into(), String::new(), ".js".into()], ..ResolveOptions::default() }) - .resolve_with_context(&f, "./foo", &mut ctx); + .resolve_with_context(&f, "./foo", &mut ctx).await; assert_eq!(resolved.map(Resolution::into_path_buf), Ok(f.join("foo.ts"))); assert_eq!( @@ -81,8 +82,8 @@ fn respect_enforce_extension() { assert_eq!(ctx.missing_dependencies, FxHashSet::from_iter([f.join("foo")])); } -#[test] -fn multi_dot_extension() { +#[tokio::test] +async fn multi_dot_extension() { let f = super::fixture().join("extensions"); let resolver = Resolver::new(ResolveOptions { @@ -98,7 +99,7 @@ fn multi_dot_extension() { ]; for (comment, request, expected_path) in pass { - let resolved_path = resolver.resolve(&f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); let expected = f.join(expected_path); assert_eq!(resolved_path, Ok(expected), "{comment} {request} {expected_path}"); } @@ -109,7 +110,7 @@ fn multi_dot_extension() { ]; for (comment, request, expected_error) in fail { - let resolution = resolver.resolve(&f, request); + let resolution = resolver.resolve(&f, request).await; let error = ResolveError::NotFound(expected_error); assert_eq!(resolution, Err(error), "{comment} {request} {resolution:?}"); } diff --git a/src/tests/fallback.rs b/src/tests/fallback.rs index 3da2d767..fce04888 100644 --- a/src/tests/fallback.rs +++ b/src/tests/fallback.rs @@ -1,8 +1,8 @@ //! https://github.com/webpack/enhanced-resolve/blob/main/test/fallback.test.js -#[test] +#[tokio::test] #[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -fn fallback() { +async fn fallback() { use super::memory_fs::MemoryFS; use crate::{AliasValue, ResolveError, ResolveOptions, ResolverGeneric}; use std::path::{Path, PathBuf}; @@ -83,7 +83,7 @@ fn fallback() { ]; for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(f, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(PathBuf::from(expected)), "{comment} {request}"); } @@ -94,7 +94,7 @@ fn fallback() { ]; for (comment, request, expected) in ignore { - let resolution = resolver.resolve(f, request); + let resolution = resolver.resolve(f, request).await; assert_eq!(resolution, Err(expected), "{comment} {request}"); } } diff --git a/src/tests/full_specified.rs b/src/tests/full_specified.rs index a70c0191..3838bd5c 100644 --- a/src/tests/full_specified.rs +++ b/src/tests/full_specified.rs @@ -25,8 +25,8 @@ mod windows { ]) } - #[test] - fn test() { + #[tokio::test] + async fn test() { let file_system = file_system(); let resolver = ResolverGeneric::::new_with_file_system( @@ -53,7 +53,7 @@ mod windows { ]; for (comment, request) in failing_resolves { - let resolution = resolver.resolve("/a", request); + let resolution = resolver.resolve("/a", request).await; assert!(resolution.is_err(), "{comment} {request}"); } @@ -70,14 +70,14 @@ mod windows { ]; for (comment, request, expected) in successful_resolves { - let resolution = resolver.resolve("/a", request).map(|r| r.full_path()); + let resolution = resolver.resolve("/a", request).await.map(|r| r.full_path()); assert_eq!(resolution, Ok(PathBuf::from(expected)), "{comment} {request}"); } } - #[test] + #[tokio::test] #[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. - fn resolve_to_context() { + async fn resolve_to_context() { let file_system = file_system(); let resolver = ResolverGeneric::::new_with_file_system( @@ -106,7 +106,7 @@ mod windows { ]; for (comment, request, expected) in successful_resolves { - let resolution = resolver.resolve("/a", request).map(|r| r.full_path()); + let resolution = resolver.resolve("/a", request).await.map(|r| r.full_path()); assert_eq!(resolution, Ok(PathBuf::from(expected)), "{comment} {request}"); } } diff --git a/src/tests/imports_field.rs b/src/tests/imports_field.rs index c928627a..6cacd203 100644 --- a/src/tests/imports_field.rs +++ b/src/tests/imports_field.rs @@ -7,8 +7,8 @@ use serde_json::json; use crate::{Ctx, JSONMap, PathUtil, ResolveError, ResolveOptions, Resolver}; use std::path::Path; -#[test] -fn test_simple() { +#[tokio::test] +async fn test_simple() { let f = super::fixture().join("imports-field"); let f2 = super::fixture().join("imports-exports-wildcard/node_modules/m/"); @@ -30,7 +30,7 @@ fn test_simple() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } @@ -45,13 +45,13 @@ fn test_simple() { ]; for (comment, path, request, error) in fail { - let resolution = resolver.resolve(&path, request); + let resolution = resolver.resolve(&path, request).await; assert_eq!(resolution, Err(error), "{comment} {path:?} {request}"); } } -#[test] -fn shared_resolvers() { +#[tokio::test] +async fn shared_resolvers() { let f = super::fixture().join("imports-field"); // field name #1 @@ -63,7 +63,7 @@ fn shared_resolvers() { ..ResolveOptions::default() }); - let resolved_path = resolver1.resolve(&f, "#imports-field").map(|r| r.full_path()); + let resolved_path = resolver1.resolve(&f, "#imports-field").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("b.js"))); // field name #2 @@ -72,7 +72,7 @@ fn shared_resolvers() { ..ResolveOptions::default() }); - let resolved_path = resolver2.resolve(&f, "#b").map(|r| r.full_path()); + let resolved_path = resolver2.resolve(&f, "#b").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("a.js"))); } @@ -105,8 +105,8 @@ fn imports_field(value: serde_json::Value) -> JSONMap { serde_json::from_str(&s).unwrap() } -#[test] -fn test_cases() { +#[tokio::test] +async fn test_cases() { let test_cases = [ TestCase { name: "sample #1", @@ -1304,6 +1304,7 @@ fn test_cases() { &case.condition_names.iter().map(ToString::to_string).collect::>(), &mut Ctx::default(), ) + .await .map(|p| p.map(|p| p.to_path_buf())); if let Some(expect) = case.expect { if expect.is_empty() { diff --git a/src/tests/incorrect_description_file.rs b/src/tests/incorrect_description_file.rs index e2caecbb..d1100acb 100644 --- a/src/tests/incorrect_description_file.rs +++ b/src/tests/incorrect_description_file.rs @@ -5,11 +5,11 @@ use rustc_hash::FxHashSet; use crate::{JSONError, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver}; // should not resolve main in incorrect description file #1 -#[test] -fn incorrect_description_file_1() { +#[tokio::test] +async fn incorrect_description_file_1() { let f = super::fixture().join("incorrect-package"); let mut ctx = ResolveContext::default(); - let resolution = Resolver::default().resolve_with_context(f.join("pack1"), ".", &mut ctx); + let resolution = Resolver::default().resolve_with_context(f.join("pack1"), ".", &mut ctx).await; let error = ResolveError::JSON(JSONError { path: f.join("pack1/package.json"), message: String::from("EOF while parsing a value at line 3 column 0"), @@ -25,10 +25,10 @@ fn incorrect_description_file_1() { } // should not resolve main in incorrect description file #2 -#[test] -fn incorrect_description_file_2() { +#[tokio::test] +async fn incorrect_description_file_2() { let f = super::fixture().join("incorrect-package"); - let resolution = Resolver::default().resolve(f.join("pack2"), "."); + let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; let error = ResolveError::JSON(JSONError { path: f.join("pack2/package.json"), message: String::from("EOF while parsing a value at line 1 column 0"), @@ -39,27 +39,27 @@ fn incorrect_description_file_2() { } // should not resolve main in incorrect description file #3 -#[test] -fn incorrect_description_file_3() { +#[tokio::test] +async fn incorrect_description_file_3() { let f = super::fixture().join("incorrect-package"); - let resolution = Resolver::default().resolve(f.join("pack2"), "."); + let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; assert!(resolution.is_err()); } // `enhanced_resolve` does not have this test case -#[test] -fn no_description_file() { +#[tokio::test] +async fn no_description_file() { let f = super::fixture_root().join("enhanced_resolve"); // has description file let resolver = Resolver::default(); assert_eq!( - resolver.resolve(&f, ".").map(Resolution::into_path_buf), + resolver.resolve(&f, ".").await.map(Resolution::into_path_buf), Ok(f.join("lib/index.js")) ); // without description file let resolver = Resolver::new(ResolveOptions { description_files: vec![], ..ResolveOptions::default() }); - assert_eq!(resolver.resolve(&f, "."), Err(ResolveError::NotFound(".".into()))); + assert_eq!(resolver.resolve(&f, ".").await, Err(ResolveError::NotFound(".".into()))); } diff --git a/src/tests/main_field.rs b/src/tests/main_field.rs index 4afed89e..e8f73908 100644 --- a/src/tests/main_field.rs +++ b/src/tests/main_field.rs @@ -2,8 +2,8 @@ use crate::{ResolveOptions, Resolver}; -#[test] -fn test() { +#[tokio::test] +async fn test() { let f = super::fixture().join("restrictions"); let resolver1 = Resolver::new(ResolveOptions { @@ -11,7 +11,7 @@ fn test() { ..ResolveOptions::default() }); - let resolution = resolver1.resolve(&f, "pck2").map(|r| r.full_path()); + let resolution = resolver1.resolve(&f, "pck2").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(f.join("node_modules/pck2/index.css"))); let resolver2 = resolver1.clone_with_options(ResolveOptions { @@ -19,12 +19,12 @@ fn test() { ..ResolveOptions::default() }); - let resolution = resolver2.resolve(&f, "pck2").map(|r| r.full_path()); + let resolution = resolver2.resolve(&f, "pck2").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(f.join("node_modules/pck2/module.js"))); } -#[test] -fn test_fallback() { +#[tokio::test] +async fn test_fallback() { let f = super::fixture_root().join("invalid"); let resolver1 = Resolver::new(ResolveOptions { @@ -33,6 +33,6 @@ fn test_fallback() { ..ResolveOptions::default() }); - let resolution = resolver1.resolve(&f, "main_field_fallback").map(|r| r.full_path()); + let resolution = resolver1.resolve(&f, "main_field_fallback").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(f.join("node_modules/main_field_fallback/exist.js"))); } diff --git a/src/tests/memory_fs.rs b/src/tests/memory_fs.rs index e4116609..052af902 100644 --- a/src/tests/memory_fs.rs +++ b/src/tests/memory_fs.rs @@ -42,7 +42,7 @@ impl MemoryFS { } impl FileSystem for MemoryFS { - fn read_to_string(&self, path: &Path) -> io::Result { + async fn read_to_string(&self, path: &Path) -> io::Result { use vfs::FileSystem; let mut file = self .fs @@ -53,7 +53,7 @@ impl FileSystem for MemoryFS { Ok(buffer) } - fn metadata(&self, path: &Path) -> io::Result { + async fn metadata(&self, path: &Path) -> io::Result { use vfs::FileSystem; let metadata = self .fs @@ -64,11 +64,11 @@ impl FileSystem for MemoryFS { Ok(FileMetadata::new(is_file, is_dir, false)) } - fn symlink_metadata(&self, path: &Path) -> io::Result { - self.metadata(path) + async fn symlink_metadata(&self, path: &Path) -> io::Result { + self.metadata(path).await } - fn canonicalize(&self, _path: &Path) -> io::Result { + async fn canonicalize(&self, _path: &Path) -> io::Result { Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) } } diff --git a/src/tests/missing.rs b/src/tests/missing.rs index 4bf611ef..f0e40c4f 100644 --- a/src/tests/missing.rs +++ b/src/tests/missing.rs @@ -4,8 +4,8 @@ use normalize_path::NormalizePath; use crate::{AliasValue, ResolveContext, ResolveOptions, Resolver}; -#[test] -fn test() { +#[tokio::test] +async fn test() { let f = super::fixture(); let data = [ @@ -52,7 +52,7 @@ fn test() { for (specifier, missing_dependencies) in data { let mut ctx = ResolveContext::default(); - let _ = resolver.resolve_with_context(&f, specifier, &mut ctx); + let _ = resolver.resolve_with_context(&f, specifier, &mut ctx).await; for path in ctx.file_dependencies { assert_eq!(path, path.normalize(), "{path:?}"); @@ -69,8 +69,8 @@ fn test() { } } -#[test] -fn alias_and_extensions() { +#[tokio::test] +async fn alias_and_extensions() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { diff --git a/src/tests/mod.rs b/src/tests/mod.rs index e347dd1f..6fefe803 100644 --- a/src/tests/mod.rs +++ b/src/tests/mod.rs @@ -34,8 +34,8 @@ pub fn fixture() -> PathBuf { fixture_root().join("enhanced_resolve").join("test").join("fixtures") } -#[test] -fn threaded_environment() { +#[tokio::test] +async fn threaded_environment() { let cwd = env::current_dir().unwrap(); let resolver = Arc::new(Resolver::default()); for _ in 0..2 { diff --git a/src/tests/pnp.rs b/src/tests/pnp.rs index 1562a009..e4748b7d 100644 --- a/src/tests/pnp.rs +++ b/src/tests/pnp.rs @@ -5,8 +5,8 @@ use crate::{ResolveOptions, Resolver}; -#[test] -fn pnp1() { +#[tokio::test] +async fn pnp1() { let fixture = super::fixture_root().join("pnp"); let resolver = Resolver::new(ResolveOptions { @@ -16,7 +16,7 @@ fn pnp1() { }); assert_eq!( - resolver.resolve(&fixture, "is-even").map(|r| r.full_path()), + resolver.resolve(&fixture, "is-even").await.map(|r| r.full_path()), Ok(fixture.join( ".yarn/cache/is-even-npm-1.0.0-9f726520dc-2728cc2f39.zip/node_modules/is-even/index.js" )) @@ -37,7 +37,7 @@ fn pnp1() { ); assert_eq!( - resolver.resolve(&fixture, "is-odd").map(|r| r.full_path()), + resolver.resolve(&fixture, "is-odd").await.map(|r| r.full_path()), Ok(fixture.join( ".yarn/cache/is-odd-npm-3.0.1-93c3c3f41b-89ee2e353c.zip/node_modules/is-odd/index.js" )), diff --git a/src/tests/resolve.rs b/src/tests/resolve.rs index f2dbb88e..b7e2ce61 100644 --- a/src/tests/resolve.rs +++ b/src/tests/resolve.rs @@ -2,8 +2,8 @@ use crate::{ResolveError, ResolveOptions, Resolver}; -#[test] -fn resolve() { +#[tokio::test] +async fn resolve() { let f = super::fixture(); let resolver = Resolver::default(); @@ -53,13 +53,13 @@ fn resolve() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn issue238_resolve() { +#[tokio::test] +async fn issue238_resolve() { let f = super::fixture().join("issue-238"); let resolver = Resolver::new(ResolveOptions { extensions: vec![".js".into(), ".jsx".into(), ".ts".into(), ".tsx".into()], @@ -67,12 +67,12 @@ fn issue238_resolve() { ..ResolveOptions::default() }); let resolved_path = - resolver.resolve(f.join("src/common"), "config/myObjectFile").map(|r| r.full_path()); + resolver.resolve(f.join("src/common"), "config/myObjectFile").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("src/common/config/myObjectFile.js")),); } -#[test] -fn prefer_relative() { +#[tokio::test] +async fn prefer_relative() { let f = super::fixture(); let resolver = @@ -85,13 +85,13 @@ fn prefer_relative() { ]; for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); } } -#[test] -fn resolve_to_context() { +#[tokio::test] +async fn resolve_to_context() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { resolve_to_context: true, ..ResolveOptions::default() }); @@ -105,15 +105,15 @@ fn resolve_to_context() { ]; for (comment, path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn resolve_hash_as_module() { +#[tokio::test] +async fn resolve_hash_as_module() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions::default()); - let resolution = resolver.resolve(f, "#a"); + let resolution = resolver.resolve(f, "#a").await; assert_eq!(resolution, Err(ResolveError::NotFound("#a".into()))); } diff --git a/src/tests/restrictions.rs b/src/tests/restrictions.rs index 5ba56596..066e649e 100644 --- a/src/tests/restrictions.rs +++ b/src/tests/restrictions.rs @@ -9,8 +9,8 @@ use crate::{ResolveError, ResolveOptions, Resolver, Restriction}; // * should try to find alternative #3 // should respect string restriction -#[test] -fn restriction1() { +#[tokio::test] +async fn restriction1() { let fixture = super::fixture(); let f = fixture.join("restrictions"); @@ -20,6 +20,6 @@ fn restriction1() { ..ResolveOptions::default() }); - let resolution = resolver.resolve(&f, "pck2"); + let resolution = resolver.resolve(&f, "pck2").await; assert_eq!(resolution, Err(ResolveError::Restriction(fixture.join("c.js"), f))); } diff --git a/src/tests/roots.rs b/src/tests/roots.rs index b50e2a07..8f7da685 100644 --- a/src/tests/roots.rs +++ b/src/tests/roots.rs @@ -8,8 +8,8 @@ fn dirname() -> PathBuf { super::fixture_root().join("enhanced_resolve").join("test") } -#[test] -fn roots() { +#[tokio::test] +async fn roots() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { @@ -29,7 +29,7 @@ fn roots() { ]; for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); } @@ -39,26 +39,26 @@ fn roots() { ]; for (comment, request, expected) in fail { - let resolution = resolver.resolve(&f, request); + let resolution = resolver.resolve(&f, request).await; assert_eq!(resolution, Err(expected), "{comment} {request}"); } } -#[test] -fn resolve_to_context() { +#[tokio::test] +async fn resolve_to_context() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { roots: vec![dirname(), f.clone()], resolve_to_context: true, ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "/fixtures/lib").map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, "/fixtures/lib").await.map(|r| r.full_path()); let expected = f.join("lib"); assert_eq!(resolved_path, Ok(expected)); } -#[test] -fn prefer_absolute() { +#[tokio::test] +async fn prefer_absolute() { let f = super::fixture(); let resolver = Resolver::new(ResolveOptions { extensions: vec![".js".into()], @@ -74,17 +74,17 @@ fn prefer_absolute() { ]; for (comment, request, expected) in pass { - let resolved_path = resolver.resolve(&f, &request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, &request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {request}"); } } -#[test] -fn roots_fall_through() { +#[tokio::test] +async fn roots_fall_through() { let f = super::fixture(); let absolute_path = f.join("roots_fall_through/index.js"); let specifier = absolute_path.to_string_lossy(); - let resolution = Resolver::new(ResolveOptions::default().with_root(&f)).resolve(&f, &specifier); + let resolution = Resolver::new(ResolveOptions::default().with_root(&f)).resolve(&f, &specifier).await; assert_eq!( resolution.map(super::super::resolution::Resolution::into_path_buf), Ok(absolute_path) diff --git a/src/tests/scoped_packages.rs b/src/tests/scoped_packages.rs index 8258f00f..f35a5fe5 100644 --- a/src/tests/scoped_packages.rs +++ b/src/tests/scoped_packages.rs @@ -2,8 +2,8 @@ use crate::{ResolveOptions, Resolver}; -#[test] -fn scoped_packages() { +#[tokio::test] +async fn scoped_packages() { let f = super::fixture().join("scoped"); let resolver = Resolver::new(ResolveOptions { @@ -19,7 +19,7 @@ fn scoped_packages() { ]; for (comment, path, request, expected) in pass { - let resolved_path = resolver.resolve(&f, request).map(|r| r.full_path()); + let resolved_path = resolver.resolve(&f, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } diff --git a/src/tests/simple.rs b/src/tests/simple.rs index 08e1238a..f17af8a7 100644 --- a/src/tests/simple.rs +++ b/src/tests/simple.rs @@ -4,8 +4,8 @@ use std::env; use crate::Resolver; -#[test] -fn simple() { +#[tokio::test] +async fn simple() { // mimic `enhanced-resolve/test/simple.test.js` let dirname = env::current_dir().unwrap().join("fixtures"); let f = dirname.join("enhanced_resolve/test"); @@ -19,14 +19,14 @@ fn simple() { ]; for (comment, path, request) in data { - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); let expected = dirname.join("enhanced_resolve/lib/index.js"); assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); } } -#[test] -fn dashed_name() { +#[tokio::test] +async fn dashed_name() { let f = super::fixture(); let resolver = Resolver::default(); @@ -41,7 +41,7 @@ fn dashed_name() { ]; for (path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(expected), "{path:?} {request}"); } } @@ -52,8 +52,8 @@ mod windows { use crate::ResolveOptions; - #[test] - fn no_package() { + #[tokio::test] + async fn no_package() { use crate::ResolverGeneric; use std::path::Path; let f = Path::new("/"); @@ -62,7 +62,7 @@ mod windows { file_system, ResolveOptions::default(), ); - let resolved_path = resolver.resolve(f, "package"); + let resolved_path = resolver.resolve(f, "package").await; assert!(resolved_path.is_err()); } } diff --git a/src/tests/symlink.rs b/src/tests/symlink.rs index 7589b560..bc8e9fa1 100644 --- a/src/tests/symlink.rs +++ b/src/tests/symlink.rs @@ -61,8 +61,8 @@ fn cleanup_symlinks(temp_path: &Path) { _ = fs::remove_dir_all(temp_path); } -#[test] -fn test() -> io::Result<()> { +#[tokio::test] +async fn test() -> io::Result<()> { let root = super::fixture_root().join("enhanced_resolve"); let dirname = root.join("test"); let temp_path = dirname.join("temp"); @@ -109,11 +109,11 @@ fn test() -> io::Result<()> { ]; for (comment, path, request) in pass { - let filename = resolver_with_symlinks.resolve(&path, request).map(|r| r.full_path()); + let filename = resolver_with_symlinks.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(filename, Ok(root.join("lib/index.js")), "{comment:?}"); let resolved_path = - resolver_without_symlinks.resolve(&path, request).map(|r| r.full_path()); + resolver_without_symlinks.resolve(&path, request).await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(path.join(request))); } diff --git a/src/tests/tsconfig_paths.rs b/src/tests/tsconfig_paths.rs index b85bf6be..b5dab9b6 100644 --- a/src/tests/tsconfig_paths.rs +++ b/src/tests/tsconfig_paths.rs @@ -10,8 +10,8 @@ use crate::{ }; // -#[test] -fn tsconfig() { +#[tokio::test] +async fn tsconfig() { let f = super::fixture_root().join("tsconfig"); #[rustfmt::skip] @@ -37,7 +37,7 @@ fn tsconfig() { ..ResolveOptions::default() }); let path = subdir.map_or(dir.clone(), |subdir| dir.join(subdir)); - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(expected), "{request} {path:?}"); } @@ -54,13 +54,13 @@ fn tsconfig() { ..ResolveOptions::default() }); for (path, request, expected) in data { - let resolution = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolution = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolution, expected, "{path:?} {request}"); } } -#[test] -fn tsconfig_fallthrough() { +#[tokio::test] +async fn tsconfig_fallthrough() { let f = super::fixture_root().join("tsconfig"); let resolver = Resolver::new(ResolveOptions { @@ -71,12 +71,12 @@ fn tsconfig_fallthrough() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "/"); + let resolved_path = resolver.resolve(&f, "/").await; assert_eq!(resolved_path, Err(ResolveError::NotFound("/".into()))); } -#[test] -fn json_with_comments() { +#[tokio::test] +async fn json_with_comments() { let f = super::fixture_root().join("tsconfig/cases/trailing-comma"); let resolver = Resolver::new(ResolveOptions { @@ -87,12 +87,12 @@ fn json_with_comments() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "foo").map(|f| f.full_path()); + let resolved_path = resolver.resolve(&f, "foo").await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(f.join("bar.js"))); } -#[test] -fn broken() { +#[tokio::test] +async fn broken() { let f = super::fixture_root().join("tsconfig"); let resolver = Resolver::new(ResolveOptions { @@ -103,7 +103,7 @@ fn broken() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "/"); + let resolved_path = resolver.resolve(&f, "/").await; let error = ResolveError::JSON(JSONError { path: f.join("tsconfig_broken.json"), message: String::from("EOF while parsing an object at line 2 column 0"), @@ -114,8 +114,8 @@ fn broken() { } // -#[test] -fn test_paths() { +#[tokio::test] +async fn test_paths() { let path = Path::new("/foo/tsconfig.json"); let mut tsconfig_json = serde_json::json!({ "compilerOptions": { @@ -151,8 +151,8 @@ fn test_paths() { } // -#[test] -fn test_base_url() { +#[tokio::test] +async fn test_base_url() { let path = Path::new("/foo/tsconfig.json"); let mut tsconfig_json = serde_json::json!({ "compilerOptions": { @@ -176,8 +176,8 @@ fn test_base_url() { } // -#[test] -fn test_paths_and_base_url() { +#[tokio::test] +async fn test_paths_and_base_url() { let path = Path::new("/foo/tsconfig.json"); let mut tsconfig_json = serde_json::json!({ "compilerOptions": { @@ -211,8 +211,8 @@ fn test_paths_and_base_url() { // Template variable ${configDir} for substitution of config files directory path // https://github.com/microsoft/TypeScript/pull/58042 -#[test] -fn test_template_variable() { +#[tokio::test] +async fn test_template_variable() { let f = super::fixture_root().join("tsconfig"); let f2 = f.join("cases").join("paths_template_variable"); @@ -231,7 +231,7 @@ fn test_template_variable() { }), ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&dir, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&dir, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(expected), "{request} {tsconfig} {dir:?}"); } } @@ -316,8 +316,8 @@ mod windows_test { // Path matching tests from tsconfig-paths // * // * - #[test] - fn match_path() { + #[tokio::test] + async fn match_path() { let pass = [ OneTest { name: "should locate path that matches with star and exists", @@ -489,7 +489,7 @@ OneTest { for test in pass { let resolved_path = - test.resolver(&root).resolve(&root, test.requested_module).map(|f| f.full_path()); + test.resolver(&root).resolve(&root, test.requested_module).await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(PathBuf::from(test.expected_path)), "{}", test.name); } @@ -518,7 +518,7 @@ OneTest { for test in fail { let resolved_path = - test.resolver(&root).resolve(&root, test.requested_module).map(|f| f.full_path()); + test.resolver(&root).resolve(&root, test.requested_module).await.map(|f| f.full_path()); assert_eq!( resolved_path, Err(ResolveError::NotFound(test.requested_module.into())), diff --git a/src/tests/tsconfig_project_references.rs b/src/tests/tsconfig_project_references.rs index 0d019d27..ff59cc91 100644 --- a/src/tests/tsconfig_project_references.rs +++ b/src/tests/tsconfig_project_references.rs @@ -2,8 +2,8 @@ use crate::{ResolveError, ResolveOptions, Resolver, TsconfigOptions, TsconfigReferences}; -#[test] -fn auto() { +#[tokio::test] +async fn auto() { let f = super::fixture_root().join("tsconfig/cases/project_references"); let resolver = Resolver::new(ResolveOptions { @@ -33,13 +33,13 @@ fn auto() { ]; for (path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, Ok(expected), "{request} {path:?}"); } } -#[test] -fn disabled() { +#[tokio::test] +async fn disabled() { let f = super::fixture_root().join("tsconfig/cases/project_references"); let resolver = Resolver::new(ResolveOptions { @@ -64,13 +64,13 @@ fn disabled() { ]; for (path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, expected, "{request} {path:?}"); } } -#[test] -fn manual() { +#[tokio::test] +async fn manual() { let f = super::fixture_root().join("tsconfig/cases/project_references"); let resolver = Resolver::new(ResolveOptions { @@ -95,13 +95,13 @@ fn manual() { ]; for (path, request, expected) in pass { - let resolved_path = resolver.resolve(&path, request).map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); assert_eq!(resolved_path, expected, "{request} {path:?}"); } } -#[test] -fn self_reference() { +#[tokio::test] +async fn self_reference() { let f = super::fixture_root().join("tsconfig/cases/project_references"); #[rustfmt::skip] @@ -122,7 +122,7 @@ fn self_reference() { ..ResolveOptions::default() }); let path = f.join("app"); - let resolved_path = resolver.resolve(&path, "@/index.ts").map(|f| f.full_path()); + let resolved_path = resolver.resolve(&path, "@/index.ts").await.map(|f| f.full_path()); assert_eq!( resolved_path, Err(ResolveError::TsconfigSelfReference(f.join("app/tsconfig.json"))), diff --git a/tests/integration_test.rs b/tests/integration_test.rs index 0309d447..af3656a1 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -8,33 +8,33 @@ fn dir() -> PathBuf { env::current_dir().unwrap() } -fn resolve(specifier: &str) -> Resolution { +async fn resolve(specifier: &str) -> Resolution { let path = dir(); - Resolver::new(ResolveOptions::default()).resolve(path, specifier).unwrap() + Resolver::new(ResolveOptions::default()).resolve(path, specifier).await.unwrap() } -#[test] -fn clone() { - let resolution = resolve("./tests/package.json"); +#[tokio::test] +async fn clone() { + let resolution = resolve("./tests/package.json").await; assert_eq!(resolution.clone(), resolution); } -#[test] -fn debug() { - let resolution = resolve("./tests/package.json"); +#[tokio::test] +async fn debug() { + let resolution = resolve("./tests/package.json").await; let s = format!("{resolution:?}"); assert!(!s.is_empty()); } -#[test] -fn eq() { - let resolution = resolve("./tests/package.json"); +#[tokio::test] +async fn eq() { + let resolution = resolve("./tests/package.json").await; assert_eq!(resolution, resolution); } -#[test] -fn package_json() { - let resolution = resolve("./tests/package.json"); +#[tokio::test] +async fn package_json() { + let resolution = resolve("./tests/package.json").await; let package_json = resolution.package_json().unwrap(); assert_eq!(package_json.name.as_ref().unwrap(), "name"); assert_eq!(package_json.r#type.as_ref().unwrap().as_str(), "module".into()); @@ -42,9 +42,9 @@ fn package_json() { } #[cfg(feature = "package_json_raw_json_api")] -#[test] -fn package_json_raw_json_api() { - let resolution = resolve("./tests/package.json"); +#[tokio::test] +async fn package_json_raw_json_api() { + let resolution = resolve("./tests/package.json").await; assert!(resolution .package_json() .unwrap() @@ -53,40 +53,40 @@ fn package_json_raw_json_api() { .is_some_and(|name| name == "name")); } -#[test] -fn clear_cache() { +#[tokio::test] +async fn clear_cache() { let resolver = Resolver::new(ResolveOptions::default()); resolver.clear_cache(); // exists } -#[test] -fn options() { +#[tokio::test] +async fn options() { let resolver = Resolver::new(ResolveOptions::default()); let options = resolver.options(); assert!(!format!("{options:?}").is_empty()); } -#[test] -fn debug_resolver() { +#[tokio::test] +async fn debug_resolver() { let resolver = Resolver::new(ResolveOptions::default()); assert!(!format!("{resolver:?}").is_empty()); } -#[test] -fn dependencies() { +#[tokio::test] +async fn dependencies() { let path = dir(); let mut ctx = ResolveContext::default(); let _ = Resolver::new(ResolveOptions::default()).resolve_with_context( path, "./tests/package.json", &mut ctx, - ); + ).await; assert!(!ctx.file_dependencies.is_empty()); assert!(ctx.missing_dependencies.is_empty()); } -#[test] -fn options_api() { +#[tokio::test] +async fn options_api() { _ = ResolveOptions::default() .with_builtin_modules(true) .with_condition_names(&[]) diff --git a/tests/resolve_test.rs b/tests/resolve_test.rs index 19772b60..84a37b92 100644 --- a/tests/resolve_test.rs +++ b/tests/resolve_test.rs @@ -6,19 +6,19 @@ fn dir() -> PathBuf { env::current_dir().unwrap() } -#[test] -fn chinese() { +#[tokio::test] +async fn chinese() { let dir = dir(); let specifier = "./fixtures/misc/中文/中文.js"; - let resolution = Resolver::new(ResolveOptions::default()).resolve(&dir, specifier); + let resolution = Resolver::new(ResolveOptions::default()).resolve(&dir, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(dir.join("fixtures/misc/中文/中文.js")) ); } -#[test] -fn styled_components() { +#[tokio::test] +async fn styled_components() { let dir = dir(); let path = dir.join("fixtures/pnpm"); let module_path = dir.join("node_modules/.pnpm/styled-components@6.1.1_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/styled-components"); @@ -27,7 +27,7 @@ fn styled_components() { // cjs let options = ResolveOptions { alias_fields: vec![vec!["browser".into()]], ..ResolveOptions::default() }; - let resolution = Resolver::new(options).resolve(&path, specifier); + let resolution = Resolver::new(options).resolve(&path, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(module_path.join("dist/styled-components.browser.cjs.js")) @@ -39,15 +39,15 @@ fn styled_components() { main_fields: vec!["module".into()], ..ResolveOptions::default() }; - let resolution = Resolver::new(options).resolve(&path, specifier); + let resolution = Resolver::new(options).resolve(&path, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(module_path.join("dist/styled-components.browser.esm.js")) ); } -#[test] -fn axios() { +#[tokio::test] +async fn axios() { let dir = dir(); let path = dir.join("fixtures/pnpm"); let module_path = dir.join("node_modules/.pnpm/axios@1.6.2/node_modules/axios"); @@ -55,7 +55,7 @@ fn axios() { // default let options = ResolveOptions::default(); - let resolution = Resolver::new(options).resolve(&path, specifier); + let resolution = Resolver::new(options).resolve(&path, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(module_path.join("index.js")) @@ -66,7 +66,7 @@ fn axios() { condition_names: vec!["browser".into(), "require".into()], ..ResolveOptions::default() }; - let resolution = Resolver::new(options).resolve(&path, specifier); + let resolution = Resolver::new(options).resolve(&path, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(module_path.join("dist/browser/axios.cjs")) @@ -77,15 +77,15 @@ fn axios() { condition_names: vec!["node".into(), "require".into()], ..ResolveOptions::default() }; - let resolution = Resolver::new(options).resolve(&path, specifier); + let resolution = Resolver::new(options).resolve(&path, specifier).await; assert_eq!( resolution.map(rspack_resolver::Resolution::into_path_buf), Ok(module_path.join("dist/node/axios.cjs")) ); } -#[test] -fn postcss() { +#[tokio::test] +async fn postcss() { let dir = dir(); let path = dir.join("fixtures/pnpm"); let module_path = path.join("node_modules/postcss"); @@ -95,16 +95,16 @@ fn postcss() { }); // should ignore "path" - let resolution = resolver.resolve(&module_path, "path"); + let resolution = resolver.resolve(&module_path, "path").await; assert_eq!(resolution, Err(ResolveError::Ignored(module_path.clone()))); // should ignore "./lib/terminal-highlight" - let resolution = resolver.resolve(&module_path, "./lib/terminal-highlight"); + let resolution = resolver.resolve(&module_path, "./lib/terminal-highlight").await; assert_eq!(resolution, Err(ResolveError::Ignored(module_path.join("lib/terminal-highlight")))); } -#[test] -fn ipaddr_js() { +#[tokio::test] +async fn ipaddr_js() { let dir = dir(); let path = dir.join("fixtures/pnpm"); let module_path = @@ -126,13 +126,13 @@ fn ipaddr_js() { ]; for resolver in resolvers { - let resolution = resolver.resolve(&path, "ipaddr.js").map(|r| r.full_path()); + let resolution = resolver.resolve(&path, "ipaddr.js").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(module_path.clone())); } } -#[test] -fn decimal_js() { +#[tokio::test] +async fn decimal_js() { let dir = dir(); let path = dir.join("fixtures/pnpm"); let module_path = @@ -153,13 +153,13 @@ fn decimal_js() { ]; for resolver in resolvers { - let resolution = resolver.resolve(&path, "decimal.js").map(|r| r.full_path()); + let resolution = resolver.resolve(&path, "decimal.js").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(module_path.clone())); } } -#[test] -fn decimal_js_from_mathjs() { +#[tokio::test] +async fn decimal_js_from_mathjs() { let dir = dir(); let path = dir.join("node_modules/.pnpm/mathjs@13.2.0/node_modules/mathjs/lib/esm"); let module_path = @@ -180,7 +180,7 @@ fn decimal_js_from_mathjs() { ]; for resolver in resolvers { - let resolution = resolver.resolve(&path, "decimal.js").map(|r| r.full_path()); + let resolution = resolver.resolve(&path, "decimal.js").await.map(|r| r.full_path()); assert_eq!(resolution, Ok(module_path.clone())); } } From 369e758fc6b89fd0e0ec2bb87522df5b4ae9d173 Mon Sep 17 00:00:00 2001 From: nilptr Date: Sun, 15 Dec 2024 22:31:23 +0800 Subject: [PATCH 07/38] fix: async recursion --- src/cache.rs | 57 +-- src/context.rs | 2 +- src/file_system.rs | 151 ++++---- src/lib.rs | 788 ++++++++++++++++++++++------------------- src/tests/memory_fs.rs | 50 +-- 5 files changed, 573 insertions(+), 475 deletions(-) diff --git a/src/cache.rs b/src/cache.rs index 49ccdf63..b83d7fd1 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -1,7 +1,15 @@ +use futures::future::BoxFuture; use tokio::sync::OnceCell as OnceLock; use std::{ - borrow::{Borrow, Cow}, convert::AsRef, future::Future, hash::{BuildHasherDefault, Hash, Hasher}, io, ops::Deref, path::{Path, PathBuf}, sync::Arc + borrow::{Borrow, Cow}, + convert::AsRef, + future::Future, + hash::{BuildHasherDefault, Hash, Hasher}, + io, + ops::Deref, + path::{Path, PathBuf}, + sync::Arc, }; use dashmap::{DashMap, DashSet}; @@ -56,7 +64,7 @@ impl Cache { ) -> Result, ResolveError> where F: FnOnce(TsConfig) -> Fut, - Fut: Future> + Fut: Future>, { if let Some(tsconfig_ref) = self.tsconfigs.get(path) { return Ok(Arc::clone(tsconfig_ref.value())); @@ -188,23 +196,30 @@ impl CachedPathImpl { ) } - pub async fn realpath(&self, fs: &Fs) -> io::Result { - self.canonicalized - .get_or_try_init(|| async move { - if fs.symlink_metadata(&self.path).await.is_ok_and(|m| m.is_symlink) { - return fs.canonicalize(&self.path).await.map(Some); - } - if let Some(parent) = self.parent() { - let parent_path = parent.realpath(fs).await?; - return Ok(Some( - parent_path.normalize_with(self.path.strip_prefix(&parent.path).unwrap()), - )); - }; - Ok(None) - }) - .await - .cloned() - .map(|r| r.unwrap_or_else(|| self.path.clone().to_path_buf())) + pub fn realpath<'a, Fs: FileSystem + Send + Sync>( + &'a self, + fs: &'a Fs, + ) -> BoxFuture<'a, io::Result> { + let fut = async move { + self.canonicalized + .get_or_try_init(|| async move { + if fs.symlink_metadata(&self.path).await.is_ok_and(|m| m.is_symlink) { + return fs.canonicalize(&self.path).await.map(Some); + } + if let Some(parent) = self.parent() { + let parent_path = parent.realpath(fs).await?; + return Ok(Some( + parent_path + .normalize_with(self.path.strip_prefix(&parent.path).unwrap()), + )); + }; + Ok(None) + }) + .await + .cloned() + .map(|r| r.unwrap_or_else(|| self.path.clone().to_path_buf())) + }; + Box::pin(fut) } pub async fn module_directory( @@ -233,7 +248,7 @@ impl CachedPathImpl { /// # Errors /// /// * [ResolveError::JSON] - pub async fn find_package_json( + pub async fn find_package_json( &self, fs: &Fs, options: &ResolveOptions, @@ -263,7 +278,7 @@ impl CachedPathImpl { /// # Errors /// /// * [ResolveError::JSON] - pub async fn package_json( + pub async fn package_json( &self, fs: &Fs, options: &ResolveOptions, diff --git a/src/context.rs b/src/context.rs index 9349de30..2685ae5f 100644 --- a/src/context.rs +++ b/src/context.rs @@ -81,7 +81,7 @@ impl ResolveContext { pub fn test_for_infinite_recursion(&mut self) -> Result<(), ResolveError> { self.depth += 1; // 64 should be more than enough for detecting infinite recursion. - if self.depth > 64 { + if self.depth > 32 { return Err(ResolveError::Recursion); } Ok(()) diff --git a/src/file_system.rs b/src/file_system.rs index 293e6f33..036482f6 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -1,4 +1,5 @@ use cfg_if::cfg_if; +use futures::future::BoxFuture; use std::{ fs, io, path::{Path, PathBuf}, @@ -19,7 +20,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - async fn read_to_string(&self, path: &Path) -> io::Result; + fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; /// See [std::fs::metadata] /// @@ -30,7 +31,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - async fn metadata(&self, path: &Path) -> io::Result; + fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; /// See [std::fs::symlink_metadata] /// @@ -42,7 +43,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - async fn symlink_metadata(&self, path: &Path) -> io::Result; + fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; /// See [std::fs::canonicalize] /// @@ -54,7 +55,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - async fn canonicalize(&self, path: &Path) -> io::Result; + fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; } /// Metadata information about a file @@ -120,92 +121,102 @@ impl Default for FileSystemOs { // } impl FileSystem for FileSystemOs { - async fn read_to_string(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { - VPath::Zip(info) => { - self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path) + fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + let fut = async move { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { + match VPath::from(path)? { + VPath::Zip(info) => { + self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path) + } + VPath::Virtual(info) => tokio::fs::read_to_string(&info.physical_base_path()).await, + VPath::Native(path) => tokio::fs::read_to_string(&path).await, } - VPath::Virtual(info) => tokio::fs::read_to_string(&info.physical_base_path()).await, - VPath::Native(path) => tokio::fs::read_to_string(&path).await, + } else { + tokio::fs::read_to_string(path).await } - } else { - tokio::fs::read_to_string(path).await } - } + }; + Box::pin(fut) } - async fn metadata(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { - VPath::Zip(info) => self - .pnp_lru - .file_type(info.physical_base_path(), info.zip_path) - .map(FileMetadata::from), - VPath::Virtual(info) => { - tokio::fs::metadata(info.physical_base_path()).await.map(FileMetadata::from) + fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + let fut = async move { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { + match VPath::from(path)? { + VPath::Zip(info) => self + .pnp_lru + .file_type(info.physical_base_path(), info.zip_path) + .map(FileMetadata::from), + VPath::Virtual(info) => { + tokio::fs::metadata(info.physical_base_path()).await.map(FileMetadata::from) + } + VPath::Native(path) => tokio::fs::metadata(path).await.map(FileMetadata::from), } - VPath::Native(path) => tokio::fs::metadata(path).await.map(FileMetadata::from), + } else { + tokio::fs::metadata(path).await.map(FileMetadata::from) } - } else { - tokio::fs::metadata(path).await.map(FileMetadata::from) } - } + }; + Box::pin(fut) } - async fn symlink_metadata(&self, path: &Path) -> io::Result { - tokio::fs::symlink_metadata(path).await.map(FileMetadata::from) + fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + let fut = async move { tokio::fs::symlink_metadata(path).await.map(FileMetadata::from) }; + Box::pin(fut) } - async fn canonicalize(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { - VPath::Zip(info) => { - dunce::canonicalize(info.physical_base_path().join(info.zip_path)) + fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + let fut = async move { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { + match VPath::from(path)? { + VPath::Zip(info) => { + dunce::canonicalize(info.physical_base_path().join(info.zip_path)) + } + VPath::Virtual(info) => dunce::canonicalize(info.physical_base_path()), + VPath::Native(path) => dunce::canonicalize(path), } - VPath::Virtual(info) => dunce::canonicalize(info.physical_base_path()), - VPath::Native(path) => dunce::canonicalize(path), - } - } else if #[cfg(not(target_os = "wasi"))]{ - dunce::canonicalize(path) - } else { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - loop { - let link = tokio::fs::read_link(&path_buf).await?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); - } - Component::Normal(seg) => { - #[cfg(target_family = "wasm")] - // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 - { - path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); + } else if #[cfg(not(target_os = "wasi"))]{ + dunce::canonicalize(path) + } else { + use std::path::Component; + let mut path_buf = path.to_path_buf(); + loop { + let link = tokio::fs::read_link(&path_buf).await?; + path_buf.pop(); + for component in link.components() { + match component { + Component::ParentDir => { + path_buf.pop(); } - #[cfg(not(target_family = "wasm"))] - { - path_buf.push(seg); + Component::Normal(seg) => { + #[cfg(target_family = "wasm")] + // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 + { + path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); + } + #[cfg(not(target_family = "wasm"))] + { + path_buf.push(seg); + } } + Component::RootDir => { + path_buf = PathBuf::from("/"); + } + Component::CurDir | Component::Prefix(_) => {} } - Component::RootDir => { - path_buf = PathBuf::from("/"); - } - Component::CurDir | Component::Prefix(_) => {} + } + if !tokio::fs::symlink_metadata(&path_buf).await?.is_symlink() { + break; } } - if !tokio::fs::symlink_metadata(&path_buf).await?.is_symlink() { - break; - } + Ok(path_buf) } - Ok(path_buf) } - } + }; + Box::pin(fut) } } diff --git a/src/lib.rs b/src/lib.rs index 88d9edb2..f372f980 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -71,7 +71,7 @@ use std::{ sync::Arc, }; -use futures::future::try_join_all; +use futures::future::{try_join_all, BoxFuture}; use rustc_hash::FxHashSet; use serde_json::Value as JSONValue; @@ -136,7 +136,7 @@ impl ResolverGeneric { } } -impl ResolverGeneric { +impl ResolverGeneric { pub fn new_with_file_system(file_system: Fs, options: ResolveOptions) -> Self { Self { cache: Arc::new(Cache::new(file_system)), options: options.sanitize() } } @@ -233,7 +233,8 @@ impl ResolverGeneric { let path = self.load_realpath(&cached_path).await?; // enhanced-resolve: restrictions self.check_restrictions(&path)?; - let package_json = cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await?; + let package_json = + cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await?; if let Some(package_json) = &package_json { // path must be inside the package. debug_assert!(path.starts_with(package_json.directory())); @@ -252,21 +253,25 @@ impl ResolverGeneric { /// Y: path /// /// - async fn require( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - ctx.test_for_infinite_recursion()?; - - // enhanced-resolve: parse - let (parsed, try_fragment_as_path) = self.load_parse(cached_path, specifier, ctx).await?; - if let Some(path) = try_fragment_as_path { - return Ok(path); - } + fn require<'a>( + &'a self, + cached_path: &'a CachedPath, + specifier: &'a str, + ctx: &'a mut Ctx, + ) -> BoxFuture<'a, Result> { + let fut = async move { + ctx.test_for_infinite_recursion()?; + + // enhanced-resolve: parse + let (parsed, try_fragment_as_path) = + self.load_parse(cached_path, specifier, ctx).await?; + if let Some(path) = try_fragment_as_path { + return Ok(path); + } - self.require_without_parse(cached_path, parsed.path(), ctx).await + self.require_without_parse(cached_path, parsed.path(), ctx).await + }; + Box::pin(fut) } async fn require_without_parse( @@ -276,12 +281,16 @@ impl ResolverGeneric { ctx: &mut Ctx, ) -> Result { // tsconfig-paths - if let Some(path) = self.load_tsconfig_paths(cached_path, specifier, &mut Ctx::default()).await? { + if let Some(path) = + self.load_tsconfig_paths(cached_path, specifier, &mut Ctx::default()).await? + { return Ok(path); } // enhanced-resolve: try alias - if let Some(path) = self.load_alias(cached_path, specifier, &self.options.alias, ctx).await? { + if let Some(path) = + self.load_alias(cached_path, specifier, &self.options.alias, ctx).await? + { return Ok(path); } @@ -327,9 +336,10 @@ impl ResolverGeneric { return Err(err); } // enhanced-resolve: try fallback - self.load_alias(cached_path, specifier, &self.options.fallback, ctx).await + self.load_alias(cached_path, specifier, &self.options.fallback, ctx) + .await .and_then(|value| value.ok_or(err)) - }, + } } } @@ -362,7 +372,9 @@ impl ResolverGeneric { .next() .is_some_and(|c| matches!(c, Component::RootDir | Component::Prefix(_)))); if !self.options.prefer_relative && self.options.prefer_absolute { - if let Ok(path) = self.load_package_self_or_node_modules(cached_path, specifier, ctx).await { + if let Ok(path) = + self.load_package_self_or_node_modules(cached_path, specifier, ctx).await + { return Ok(path); } } @@ -523,7 +535,8 @@ impl ResolverGeneric { // 2. If X.js is a file, load X.js as JavaScript text. STOP // 3. If X.json is a file, parse X.json to a JavaScript Object. STOP // 4. If X.node is a file, load X.node as binary addon. STOP - if let Some(path) = self.load_extensions(cached_path, &self.options.extensions, ctx).await? { + if let Some(path) = self.load_extensions(cached_path, &self.options.extensions, ctx).await? + { return Ok(Some(path)); } Ok(None) @@ -653,7 +666,9 @@ impl ResolverGeneric { // 1. If X/index.js is a file, load X/index.js as JavaScript text. STOP // 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP // 3. If X/index.node is a file, load X/index.node as binary addon. STOP - if let Some(path) = self.load_extensions(&cached_path, &self.options.extensions, ctx).await? { + if let Some(path) = + self.load_extensions(&cached_path, &self.options.extensions, ctx).await? + { return Ok(Some(path)); } } @@ -708,7 +723,8 @@ impl ResolverGeneric { continue; } - let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx).await + let Some(cached_path) = + self.get_module_directory(cached_path, module_name, ctx).await else { continue; }; @@ -749,7 +765,9 @@ impl ResolverGeneric { // c. LOAD_AS_DIRECTORY(DIR/X) let node_module_file = cached_path.path().normalize_with(specifier); let cached_path = self.cache.value(&node_module_file); - if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx).await? { + if let Some(path) = + self.load_as_file_or_directory(&cached_path, specifier, ctx).await? + { return Ok(Some(path)); } } @@ -822,7 +840,8 @@ impl ResolverGeneric { ) -> ResolveResult { // 2. If X does not match this pattern or DIR/NAME/package.json is not a file, // return. - let Some(package_json) = cached_path.package_json(&self.cache.fs, &self.options, ctx).await? + let Some(package_json) = + cached_path.package_json(&self.cache.fs, &self.options, ctx).await? else { return Ok(None); }; @@ -832,12 +851,10 @@ impl ResolverGeneric { // `package.json` "exports", ["node", "require"]) defined in the ESM resolver. // Note: The subpath is not prepended with a dot on purpose for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self.package_exports_resolve( - cached_path.path(), - &format!(".{subpath}"), - exports, - ctx, - ).await? { + if let Some(path) = self + .package_exports_resolve(cached_path.path(), &format!(".{subpath}"), exports, ctx) + .await? + { // 6. RESOLVE_ESM_MATCH(MATCH) return self.resolve_esm_match(specifier, &path, ctx).await; }; @@ -872,8 +889,9 @@ impl ResolverGeneric { // Note: The subpath is not prepended with a dot on purpose // because `package_exports_resolve` matches subpath without the leading dot. for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(cached_path) = - self.package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx).await? + if let Some(cached_path) = self + .package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx) + .await? { // 6. RESOLVE_ESM_MATCH(MATCH) return self.resolve_esm_match(specifier, &cached_path, ctx).await; @@ -967,14 +985,17 @@ impl ResolverGeneric { for r in specifiers { match r { AliasValue::Path(alias_value) => { - if let Some(path) = self.load_alias_value( - cached_path, - alias_key, - alias_value, - specifier, - ctx, - &mut should_stop, - ).await? { + if let Some(path) = self + .load_alias_value( + cached_path, + alias_key, + alias_value, + specifier, + ctx, + &mut should_stop, + ) + .await? + { return Ok(Some(path)); } } @@ -1126,11 +1147,13 @@ impl ResolverGeneric { let Some(tsconfig_options) = &self.options.tsconfig else { return Ok(None); }; - let tsconfig = self.load_tsconfig( - /* root */ true, - &tsconfig_options.config_file, - &tsconfig_options.references, - ).await?; + let tsconfig = self + .load_tsconfig( + /* root */ true, + &tsconfig_options.config_file, + &tsconfig_options.references, + ) + .await?; let paths = tsconfig.resolve(cached_path.path(), specifier); for path in paths { let cached_path = self.cache.value(&path); @@ -1141,71 +1164,85 @@ impl ResolverGeneric { Ok(None) } - async fn load_tsconfig( - &self, + fn load_tsconfig<'a>( + &'a self, root: bool, - path: &Path, - references: &TsconfigReferences, - ) -> Result, ResolveError> { - self.cache.tsconfig(root, path, |mut tsconfig| async move { - let directory = self.cache.value(tsconfig.directory()); - tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); - - // Extend tsconfig - if let Some(extends) = &tsconfig.extends { - let extended_tsconfig_paths = match extends { - ExtendsField::Single(s) => { - vec![self.get_extended_tsconfig_path(&directory, &tsconfig, s).await?] + path: &'a Path, + references: &'a TsconfigReferences, + ) -> BoxFuture<'a, Result, ResolveError>> { + let fut = async move { + self.cache + .tsconfig(root, path, |mut tsconfig| async move { + let directory = self.cache.value(tsconfig.directory()); + tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); + + // Extend tsconfig + if let Some(extends) = &tsconfig.extends { + let extended_tsconfig_paths = match extends { + ExtendsField::Single(s) => { + vec![self.get_extended_tsconfig_path(&directory, &tsconfig, s).await?] + } + ExtendsField::Multiple(specifiers) => { + try_join_all( + specifiers.iter().map(|s| { + self.get_extended_tsconfig_path(&directory, &tsconfig, s) + }), + ) + .await? + } + }; + for extended_tsconfig_path in extended_tsconfig_paths { + let extended_tsconfig = self + .load_tsconfig( + /* root */ false, + &extended_tsconfig_path, + &TsconfigReferences::Disabled, + ) + .await?; + tsconfig.extend_tsconfig(&extended_tsconfig); } - ExtendsField::Multiple(specifiers) => try_join_all(specifiers - .iter() - .map(|s| self.get_extended_tsconfig_path(&directory, &tsconfig, s))).await?, - }; - for extended_tsconfig_path in extended_tsconfig_paths { - let extended_tsconfig = self.load_tsconfig( - /* root */ false, - &extended_tsconfig_path, - &TsconfigReferences::Disabled, - ).await?; - tsconfig.extend_tsconfig(&extended_tsconfig); } - } - // Load project references - match references { - TsconfigReferences::Disabled => { - tsconfig.references.drain(..); - } - TsconfigReferences::Auto => {} - TsconfigReferences::Paths(paths) => { - tsconfig.references = paths - .iter() - .map(|path| ProjectReference { path: path.clone(), tsconfig: None }) - .collect(); + // Load project references + match references { + TsconfigReferences::Disabled => { + tsconfig.references.drain(..); + } + TsconfigReferences::Auto => {} + TsconfigReferences::Paths(paths) => { + tsconfig.references = paths + .iter() + .map(|path| ProjectReference { path: path.clone(), tsconfig: None }) + .collect(); + } } - } - if !tsconfig.references.is_empty() { - let directory = tsconfig.directory().to_path_buf(); - for reference in &mut tsconfig.references { - let reference_tsconfig_path = directory.normalize_with(&reference.path); - let tsconfig = self.cache.tsconfig( - /* root */ true, - &reference_tsconfig_path, - |reference_tsconfig| async { - if reference_tsconfig.path == tsconfig.path { - return Err(ResolveError::TsconfigSelfReference( - reference_tsconfig.path.clone(), - )); - } - Ok(reference_tsconfig) - }, - ).await?; - reference.tsconfig.replace(tsconfig); + if !tsconfig.references.is_empty() { + let directory = tsconfig.directory().to_path_buf(); + for reference in &mut tsconfig.references { + let reference_tsconfig_path = directory.normalize_with(&reference.path); + let tsconfig = self + .cache + .tsconfig( + /* root */ true, + &reference_tsconfig_path, + |reference_tsconfig| async { + if reference_tsconfig.path == tsconfig.path { + return Err(ResolveError::TsconfigSelfReference( + reference_tsconfig.path.clone(), + )); + } + Ok(reference_tsconfig) + }, + ) + .await?; + reference.tsconfig.replace(tsconfig); + } } - } - Ok(tsconfig) - }).await + Ok(tsconfig) + }).await + }; + Box::pin(fut) } async fn get_extended_tsconfig_path( @@ -1254,7 +1291,8 @@ impl ResolverGeneric { for module_name in &self.options.modules { for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { // 1. Let packageURL be the URL resolution of "node_modules/" concatenated with packageSpecifier, relative to parentURL. - let Some(cached_path) = self.get_module_directory(cached_path, module_name, ctx).await + let Some(cached_path) = + self.get_module_directory(cached_path, module_name, ctx).await else { continue; }; @@ -1271,12 +1309,15 @@ impl ResolverGeneric { // 5. If pjson is not null and pjson.exports is not null or undefined, then // 1. Return the result of PACKAGE_EXPORTS_RESOLVE(packageURL, packageSubpath, pjson.exports, defaultConditions). for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self.package_exports_resolve( - cached_path.path(), - &format!(".{subpath}"), - exports, - ctx, - ).await? { + if let Some(path) = self + .package_exports_resolve( + cached_path.path(), + &format!(".{subpath}"), + exports, + ctx, + ) + .await? + { return Ok(Some(path)); } } @@ -1304,107 +1345,118 @@ impl ResolverGeneric { } /// PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions) - async fn package_exports_resolve( - &self, - package_url: &Path, - subpath: &str, - exports: &JSONValue, - ctx: &mut Ctx, - ) -> ResolveResult { - let conditions = &self.options.condition_names; - // 1. If exports is an Object with both a key starting with "." and a key not starting with ".", throw an Invalid Package Configuration error. - if let JSONValue::Object(map) = exports { - let mut has_dot = false; - let mut without_dot = false; - for key in map.keys() { - let starts_with_dot_or_hash = key.starts_with(['.', '#']); - has_dot = has_dot || starts_with_dot_or_hash; - without_dot = without_dot || !starts_with_dot_or_hash; - if has_dot && without_dot { - return Err(ResolveError::InvalidPackageConfig( + fn package_exports_resolve<'a>( + &'a self, + package_url: &'a Path, + subpath: &'a str, + exports: &'a JSONValue, + ctx: &'a mut Ctx, + ) -> BoxFuture<'a, ResolveResult> { + let fut = async move { + let conditions = &self.options.condition_names; + // 1. If exports is an Object with both a key starting with "." and a key not starting with ".", throw an Invalid Package Configuration error. + if let JSONValue::Object(map) = exports { + let mut has_dot = false; + let mut without_dot = false; + for key in map.keys() { + let starts_with_dot_or_hash = key.starts_with(['.', '#']); + has_dot = has_dot || starts_with_dot_or_hash; + without_dot = without_dot || !starts_with_dot_or_hash; + if has_dot && without_dot { + return Err(ResolveError::InvalidPackageConfig( + package_url.join("package.json"), + )); + } + } + } + // 2. If subpath is equal to ".", then + // Note: subpath is not prepended with a dot when passed in. + if subpath == "." { + // enhanced-resolve appends query and fragment when resolving exports field + // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/lib/ExportsFieldPlugin.js#L57-L62 + // This is only need when querying the main export, otherwise ctx is passed through. + if ctx.query.is_some() || ctx.fragment.is_some() { + let query = ctx.query.clone().unwrap_or_default(); + let fragment = ctx.fragment.clone().unwrap_or_default(); + return Err(ResolveError::PackagePathNotExported( + format!("./{}{query}{fragment}", subpath.trim_start_matches('.')), package_url.join("package.json"), )); } - } - } - // 2. If subpath is equal to ".", then - // Note: subpath is not prepended with a dot when passed in. - if subpath == "." { - // enhanced-resolve appends query and fragment when resolving exports field - // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/lib/ExportsFieldPlugin.js#L57-L62 - // This is only need when querying the main export, otherwise ctx is passed through. - if ctx.query.is_some() || ctx.fragment.is_some() { - let query = ctx.query.clone().unwrap_or_default(); - let fragment = ctx.fragment.clone().unwrap_or_default(); - return Err(ResolveError::PackagePathNotExported( - format!("./{}{query}{fragment}", subpath.trim_start_matches('.')), - package_url.join("package.json"), - )); - } - // 1. Let mainExport be undefined. - let main_export = match exports { - // 2. If exports is a String or Array, or an Object containing no keys starting with ".", then - JSONValue::String(_) | JSONValue::Array(_) => { - // 1. Set mainExport to exports. - Some(exports) + // 1. Let mainExport be undefined. + let main_export = match exports { + // 2. If exports is a String or Array, or an Object containing no keys starting with ".", then + JSONValue::String(_) | JSONValue::Array(_) => { + // 1. Set mainExport to exports. + Some(exports) + } + // 3. Otherwise if exports is an Object containing a "." property, then + JSONValue::Object(map) => { + // 1. Set mainExport to exports["."]. + map.get(".").map_or_else( + || { + if map + .keys() + .any(|key| key.starts_with("./") || key.starts_with('#')) + { + None + } else { + Some(exports) + } + }, + Some, + ) + } + _ => None, + }; + // 4. If mainExport is not undefined, then + if let Some(main_export) = main_export { + // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, mainExport, null, false, conditions). + let resolved = self + .package_target_resolve( + package_url, + ".", + main_export, + None, + /* is_imports */ false, + conditions, + ctx, + ) + .await?; + // 2. If resolved is not null or undefined, return resolved. + if let Some(path) = resolved { + return Ok(Some(path)); + } } - // 3. Otherwise if exports is an Object containing a "." property, then - JSONValue::Object(map) => { - // 1. Set mainExport to exports["."]. - map.get(".").map_or_else( - || { - if map.keys().any(|key| key.starts_with("./") || key.starts_with('#')) { - None - } else { - Some(exports) - } - }, - Some, + } + // 3. Otherwise, if exports is an Object and all keys of exports start with ".", then + if let JSONValue::Object(exports) = exports { + // 1. Let matchKey be the string "./" concatenated with subpath. + // Note: `package_imports_exports_resolve` does not require the leading dot. + let match_key = &subpath; + // 2. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( matchKey, exports, packageURL, false, conditions). + if let Some(path) = self + .package_imports_exports_resolve( + match_key, + exports, + package_url, + /* is_imports */ false, + conditions, + ctx, ) - } - _ => None, - }; - // 4. If mainExport is not undefined, then - if let Some(main_export) = main_export { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, mainExport, null, false, conditions). - let resolved = self.package_target_resolve( - package_url, - ".", - main_export, - None, - /* is_imports */ false, - conditions, - ctx, - ).await?; - // 2. If resolved is not null or undefined, return resolved. - if let Some(path) = resolved { + .await? + { + // 3. If resolved is not null or undefined, return resolved. return Ok(Some(path)); } } - } - // 3. Otherwise, if exports is an Object and all keys of exports start with ".", then - if let JSONValue::Object(exports) = exports { - // 1. Let matchKey be the string "./" concatenated with subpath. - // Note: `package_imports_exports_resolve` does not require the leading dot. - let match_key = &subpath; - // 2. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( matchKey, exports, packageURL, false, conditions). - if let Some(path) = self.package_imports_exports_resolve( - match_key, - exports, - package_url, - /* is_imports */ false, - conditions, - ctx, - ).await? { - // 3. If resolved is not null or undefined, return resolved. - return Ok(Some(path)); - } - } - // 4. Throw a Package Path Not Exported error. - Err(ResolveError::PackagePathNotExported( - subpath.to_string(), - package_url.join("package.json"), - )) + // 4. Throw a Package Path Not Exported error. + Err(ResolveError::PackagePathNotExported( + subpath.to_string(), + package_url.join("package.json"), + )) + }; + Box::pin(fut) } /// PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions) @@ -1437,14 +1489,17 @@ impl ResolverGeneric { )); } } - if let Some(path) = self.package_imports_exports_resolve( - specifier, - imports, - package_json.directory(), - /* is_imports */ true, - &self.options.condition_names, - ctx, - ).await? { + if let Some(path) = self + .package_imports_exports_resolve( + specifier, + imports, + package_json.directory(), + /* is_imports */ true, + &self.options.condition_names, + ctx, + ) + .await? + { // 2. If resolved is not null or undefined, return resolved. return Ok(Some(path)); } @@ -1481,15 +1536,17 @@ impl ResolverGeneric { // 1. Let target be the value of matchObj[matchKey]. if let Some(target) = match_obj.get(match_key) { // 2. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, null, isImports, conditions). - return self.package_target_resolve( - package_url, - match_key, - target, - None, - is_imports, - conditions, - ctx, - ).await; + return self + .package_target_resolve( + package_url, + match_key, + target, + None, + is_imports, + conditions, + ctx, + ) + .await; } } @@ -1532,15 +1589,17 @@ impl ResolverGeneric { } if let Some(best_target) = best_target { // 3. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions). - return self.package_target_resolve( - package_url, - best_key, - best_target, - Some(best_match), - is_imports, - conditions, - ctx, - ).await; + return self + .package_target_resolve( + package_url, + best_key, + best_target, + Some(best_match), + is_imports, + conditions, + ctx, + ) + .await; } // 4. Return null. Ok(None) @@ -1548,153 +1607,160 @@ impl ResolverGeneric { /// PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions) #[allow(clippy::too_many_arguments)] - async fn package_target_resolve( - &self, - package_url: &Path, - target_key: &str, - target: &JSONValue, - pattern_match: Option<&str>, + fn package_target_resolve<'a>( + &'a self, + package_url: &'a Path, + target_key: &'a str, + target: &'a JSONValue, + pattern_match: Option<&'a str>, is_imports: bool, - conditions: &[String], - ctx: &mut Ctx, - ) -> ResolveResult { - fn normalize_string_target<'a>( - target_key: &'a str, - target: &'a str, - pattern_match: Option<&'a str>, - package_url: &Path, - ) -> Result, ResolveError> { - let target = if let Some(pattern_match) = pattern_match { - if !target_key.contains('*') && !target.contains('*') { - // enhanced-resolve behaviour - // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. - if target_key.ends_with('/') && target.ends_with('/') { - Cow::Owned(format!("{target}{pattern_match}")) + conditions: &'a[String], + ctx: &'a mut Ctx, + ) -> BoxFuture<'a, ResolveResult> { + let fut = async move { + fn normalize_string_target<'a>( + target_key: &'a str, + target: &'a str, + pattern_match: Option<&'a str>, + package_url: &Path, + ) -> Result, ResolveError> { + let target = if let Some(pattern_match) = pattern_match { + if !target_key.contains('*') && !target.contains('*') { + // enhanced-resolve behaviour + // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. + if target_key.ends_with('/') && target.ends_with('/') { + Cow::Owned(format!("{target}{pattern_match}")) + } else { + return Err(ResolveError::InvalidPackageConfigDirectory( + package_url.join("package.json"), + )); + } } else { - return Err(ResolveError::InvalidPackageConfigDirectory( - package_url.join("package.json"), - )); + Cow::Owned(target.replace('*', pattern_match)) } } else { - Cow::Owned(target.replace('*', pattern_match)) - } - } else { - Cow::Borrowed(target) - }; - Ok(target) - } - - match target { - // 1. If target is a String, then - JSONValue::String(target) => { - // 1. If target does not start with "./", then - if !target.starts_with("./") { - // 1. If isImports is false, or if target starts with "../" or "/", or if target is a valid URL, then - if !is_imports || target.starts_with("../") || target.starts_with('/') { - // 1. Throw an Invalid Package Target error. + Cow::Borrowed(target) + }; + Ok(target) + } + + match target { + // 1. If target is a String, then + JSONValue::String(target) => { + // 1. If target does not start with "./", then + if !target.starts_with("./") { + // 1. If isImports is false, or if target starts with "../" or "/", or if target is a valid URL, then + if !is_imports || target.starts_with("../") || target.starts_with('/') { + // 1. Throw an Invalid Package Target error. + return Err(ResolveError::InvalidPackageTarget( + target.to_string(), + target_key.to_string(), + package_url.join("package.json"), + )); + } + // 2. If patternMatch is a String, then + // 1. Return PACKAGE_RESOLVE(target with every instance of "*" replaced by patternMatch, packageURL + "/"). + let target = + normalize_string_target(target_key, target, pattern_match, package_url)?; + let package_url = self.cache.value(package_url); + // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). + return self.package_resolve(&package_url, &target, ctx).await; + } + + // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. + // 3. Let resolvedTarget be the URL resolution of the concatenation of packageURL and target. + // 4. Assert: resolvedTarget is contained in packageURL. + // 5. If patternMatch is null, then + let target = + normalize_string_target(target_key, target, pattern_match, package_url)?; + if Path::new(target.as_ref()).is_invalid_exports_target() { return Err(ResolveError::InvalidPackageTarget( target.to_string(), target_key.to_string(), package_url.join("package.json"), )); } - // 2. If patternMatch is a String, then - // 1. Return PACKAGE_RESOLVE(target with every instance of "*" replaced by patternMatch, packageURL + "/"). - let target = - normalize_string_target(target_key, target, pattern_match, package_url)?; - let package_url = self.cache.value(package_url); - // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). - return self.package_resolve(&package_url, &target, ctx).await; - } - - // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. - // 3. Let resolvedTarget be the URL resolution of the concatenation of packageURL and target. - // 4. Assert: resolvedTarget is contained in packageURL. - // 5. If patternMatch is null, then - let target = - normalize_string_target(target_key, target, pattern_match, package_url)?; - if Path::new(target.as_ref()).is_invalid_exports_target() { - return Err(ResolveError::InvalidPackageTarget( - target.to_string(), - target_key.to_string(), - package_url.join("package.json"), - )); + let resolved_target = package_url.normalize_with(target.as_ref()); + // 6. If patternMatch split on "/" or "\" contains any "", ".", "..", or "node_modules" segments, case insensitive and including percent encoded variants, throw an Invalid Module Specifier error. + // 7. Return the URL resolution of resolvedTarget with every instance of "*" replaced with patternMatch. + let value = self.cache.value(&resolved_target); + return Ok(Some(value)); } - let resolved_target = package_url.normalize_with(target.as_ref()); - // 6. If patternMatch split on "/" or "\" contains any "", ".", "..", or "node_modules" segments, case insensitive and including percent encoded variants, throw an Invalid Module Specifier error. - // 7. Return the URL resolution of resolvedTarget with every instance of "*" replaced with patternMatch. - let value = self.cache.value(&resolved_target); - return Ok(Some(value)); - } - // 2. Otherwise, if target is a non-null Object, then - JSONValue::Object(target) => { - // 1. If exports contains any index property keys, as defined in ECMA-262 6.1.7 Array Index, throw an Invalid Package Configuration error. - // 2. For each property p of target, in object insertion order as, - for (key, target_value) in target { - // 1. If p equals "default" or conditions contains an entry for p, then - if key == "default" || conditions.contains(key) { - // 1. Let targetValue be the value of the p property in target. - // 2. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions). - let resolved = self.package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ).await; - // 3. If resolved is equal to undefined, continue the loop. - if let Some(path) = resolved? { - // 4. Return resolved. - return Ok(Some(path)); + // 2. Otherwise, if target is a non-null Object, then + JSONValue::Object(target) => { + // 1. If exports contains any index property keys, as defined in ECMA-262 6.1.7 Array Index, throw an Invalid Package Configuration error. + // 2. For each property p of target, in object insertion order as, + for (key, target_value) in target { + // 1. If p equals "default" or conditions contains an entry for p, then + if key == "default" || conditions.contains(key) { + // 1. Let targetValue be the value of the p property in target. + // 2. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions). + let resolved = self + .package_target_resolve( + package_url, + target_key, + target_value, + pattern_match, + is_imports, + conditions, + ctx, + ) + .await; + // 3. If resolved is equal to undefined, continue the loop. + if let Some(path) = resolved? { + // 4. Return resolved. + return Ok(Some(path)); + } } } + // 3. Return undefined. + return Ok(None); } - // 3. Return undefined. - return Ok(None); - } - // 3. Otherwise, if target is an Array, then - JSONValue::Array(targets) => { - // 1. If _target.length is zero, return null. - if targets.is_empty() { - // Note: return PackagePathNotExported has the same effect as return because there are no matches. - return Err(ResolveError::PackagePathNotExported( - pattern_match.unwrap_or(".").to_string(), - package_url.join("package.json"), - )); - } - // 2. For each item targetValue in target, do - for (i, target_value) in targets.iter().enumerate() { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions), continuing the loop on any Invalid Package Target error. - let resolved = self.package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ).await; - - if resolved.is_err() && i == targets.len() { - return resolved; + // 3. Otherwise, if target is an Array, then + JSONValue::Array(targets) => { + // 1. If _target.length is zero, return null. + if targets.is_empty() { + // Note: return PackagePathNotExported has the same effect as return because there are no matches. + return Err(ResolveError::PackagePathNotExported( + pattern_match.unwrap_or(".").to_string(), + package_url.join("package.json"), + )); } - - // 2. If resolved is undefined, continue the loop. - if let Ok(Some(path)) = resolved { - // 3. Return resolved. - return Ok(Some(path)); + // 2. For each item targetValue in target, do + for (i, target_value) in targets.iter().enumerate() { + // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions), continuing the loop on any Invalid Package Target error. + let resolved = self + .package_target_resolve( + package_url, + target_key, + target_value, + pattern_match, + is_imports, + conditions, + ctx, + ) + .await; + + if resolved.is_err() && i == targets.len() { + return resolved; + } + + // 2. If resolved is undefined, continue the loop. + if let Ok(Some(path)) = resolved { + // 3. Return resolved. + return Ok(Some(path)); + } } + // 3. Return or throw the last fallback resolution null return or error. + // Note: see `resolved.is_err() && i == targets.len()` } - // 3. Return or throw the last fallback resolution null return or error. - // Note: see `resolved.is_err() && i == targets.len()` + _ => {} } - _ => {} - } - // 4. Otherwise, if target is null, return null. - Ok(None) - // 5. Otherwise throw an Invalid Package Target error. + // 4. Otherwise, if target is null, return null. + Ok(None) + // 5. Otherwise throw an Invalid Package Target error. + }; + Box::pin(fut) } // Returns (module, subpath) diff --git a/src/tests/memory_fs.rs b/src/tests/memory_fs.rs index 052af902..dad13b0c 100644 --- a/src/tests/memory_fs.rs +++ b/src/tests/memory_fs.rs @@ -3,6 +3,8 @@ use std::{ path::{Path, PathBuf}, }; +use futures::future::BoxFuture; + use crate::{FileMetadata, FileSystem}; #[derive(Default)] @@ -42,33 +44,37 @@ impl MemoryFS { } impl FileSystem for MemoryFS { - async fn read_to_string(&self, path: &Path) -> io::Result { - use vfs::FileSystem; - let mut file = self - .fs - .open_file(path.to_string_lossy().as_ref()) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let mut buffer = String::new(); - file.read_to_string(&mut buffer).unwrap(); - Ok(buffer) + fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + Box::pin(async move { + use vfs::FileSystem; + let mut file = self + .fs + .open_file(path.to_string_lossy().as_ref()) + .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; + let mut buffer = String::new(); + file.read_to_string(&mut buffer).unwrap(); + Ok(buffer) + }) } - async fn metadata(&self, path: &Path) -> io::Result { - use vfs::FileSystem; - let metadata = self - .fs - .metadata(path.to_string_lossy().as_ref()) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let is_file = metadata.file_type == vfs::VfsFileType::File; - let is_dir = metadata.file_type == vfs::VfsFileType::Directory; - Ok(FileMetadata::new(is_file, is_dir, false)) + fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { + Box::pin(async move { + use vfs::FileSystem; + let metadata = self + .fs + .metadata(path.to_string_lossy().as_ref()) + .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; + let is_file = metadata.file_type == vfs::VfsFileType::File; + let is_dir = metadata.file_type == vfs::VfsFileType::Directory; + Ok(FileMetadata::new(is_file, is_dir, false)) + }) } - async fn symlink_metadata(&self, path: &Path) -> io::Result { - self.metadata(path).await + fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture> { + Box::pin(async move { self.metadata(path).await }) } - async fn canonicalize(&self, _path: &Path) -> io::Result { - Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) + fn canonicalize(&self, _path: &Path) -> BoxFuture> { + Box::pin(async move { Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) }) } } From 2d01d2cdb53aa2276e9e96dba171bd03bd17ae6f Mon Sep 17 00:00:00 2001 From: nilptr Date: Sun, 15 Dec 2024 22:35:58 +0800 Subject: [PATCH 08/38] chore: remove validation code in benches --- benches/resolver.rs | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index a5f5f097..d8c231c5 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -148,22 +148,10 @@ fn create_async_resolve_task( fn bench_resolver(c: &mut Criterion) { let data = data(); - // check validity - // for (path, request) in &data { - // assert!(oxc_resolver().resolve(path, request).is_ok(), "{path:?} {request}"); - // } - let symlink_test_dir = create_symlinks().expect("Create symlink fixtures failed"); let symlinks_range = 0u32..10000; - // for i in symlinks_range.clone() { - // assert!( - // oxc_resolver().resolve(&symlink_test_dir, &format!("./file{i}")).is_ok(), - // "file{i}.js" - // ); - // } - let mut group = c.benchmark_group("resolver"); group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { @@ -195,9 +183,7 @@ fn bench_resolver(c: &mut Criterion) { BenchmarkId::from_parameter("resolve-from-symlinks"), &symlinks_range, |b, data| { - let runner = runtime::Builder::new_current_thread() - .build() - .expect("failed to create tokio runtime"); + let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); b.to_async(runner).iter(|| async { let oxc_resolver = oxc_resolver(); for i in data.clone() { From 243eadadab06241c4fb67fd6619e84fe86ffa7e0 Mon Sep 17 00:00:00 2001 From: nilptr Date: Tue, 17 Dec 2024 23:31:16 +0800 Subject: [PATCH 09/38] fix: use std::fs instead of tokio::fs --- src/file_system.rs | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/file_system.rs b/src/file_system.rs index 036482f6..f242ae9c 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -106,19 +106,19 @@ impl Default for FileSystemOs { } } -// fn read_to_string(path: &Path) -> io::Result { -// // `simdutf8` is faster than `std::str::from_utf8` which `fs::read_to_string` uses internally -// let bytes = std::fs::read(path)?; -// if simdutf8::basic::from_utf8(&bytes).is_err() { -// // Same error as `fs::read_to_string` produces (`io::Error::INVALID_UTF8`) -// return Err(io::Error::new( -// io::ErrorKind::InvalidData, -// "stream did not contain valid UTF-8", -// )); -// } -// // SAFETY: `simdutf8` has ensured it's a valid UTF-8 string -// Ok(unsafe { String::from_utf8_unchecked(bytes) }) -// } +fn read_to_string(path: &Path) -> io::Result { + // `simdutf8` is faster than `std::str::from_utf8` which `fs::read_to_string` uses internally + let bytes = std::fs::read(path)?; + if simdutf8::basic::from_utf8(&bytes).is_err() { + // Same error as `fs::read_to_string` produces (`io::Error::INVALID_UTF8`) + return Err(io::Error::new( + io::ErrorKind::InvalidData, + "stream did not contain valid UTF-8", + )); + } + // SAFETY: `simdutf8` has ensured it's a valid UTF-8 string + Ok(unsafe { String::from_utf8_unchecked(bytes) }) +} impl FileSystem for FileSystemOs { fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { @@ -129,11 +129,11 @@ impl FileSystem for FileSystemOs { VPath::Zip(info) => { self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path) } - VPath::Virtual(info) => tokio::fs::read_to_string(&info.physical_base_path()).await, - VPath::Native(path) => tokio::fs::read_to_string(&path).await, + VPath::Virtual(info) => read_to_string(&info.physical_base_path()), + VPath::Native(path) => read_to_string(&path), } } else { - tokio::fs::read_to_string(path).await + read_to_string(path) } } }; @@ -150,12 +150,12 @@ impl FileSystem for FileSystemOs { .file_type(info.physical_base_path(), info.zip_path) .map(FileMetadata::from), VPath::Virtual(info) => { - tokio::fs::metadata(info.physical_base_path()).await.map(FileMetadata::from) + fs::metadata(info.physical_base_path()).map(FileMetadata::from) } - VPath::Native(path) => tokio::fs::metadata(path).await.map(FileMetadata::from), + VPath::Native(path) => fs::metadata(path).map(FileMetadata::from), } } else { - tokio::fs::metadata(path).await.map(FileMetadata::from) + fs::metadata(path).map(FileMetadata::from) } } }; @@ -163,7 +163,7 @@ impl FileSystem for FileSystemOs { } fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { tokio::fs::symlink_metadata(path).await.map(FileMetadata::from) }; + let fut = async move { fs::symlink_metadata(path).map(FileMetadata::from) }; Box::pin(fut) } @@ -184,7 +184,7 @@ impl FileSystem for FileSystemOs { use std::path::Component; let mut path_buf = path.to_path_buf(); loop { - let link = tokio::fs::read_link(&path_buf).await?; + let link = fs::read_link(&path_buf)?; path_buf.pop(); for component in link.components() { match component { @@ -208,7 +208,7 @@ impl FileSystem for FileSystemOs { Component::CurDir | Component::Prefix(_) => {} } } - if !tokio::fs::symlink_metadata(&path_buf).await?.is_symlink() { + if !fs::symlink_metadata(&path_buf)?.is_symlink() { break; } } From 17ffbb3525807ebabb3ae0ef0e5bd95e5cd51adf Mon Sep 17 00:00:00 2001 From: nilptr Date: Thu, 19 Dec 2024 12:53:22 +0800 Subject: [PATCH 10/38] chore: cargo fmt --- napi/src/lib.rs | 6 +- src/lib.rs | 144 +++++++++++++++++++----------------- src/tests/browser_field.rs | 3 +- src/tests/exports_field.rs | 6 +- src/tests/extensions.rs | 3 +- src/tests/roots.rs | 3 +- src/tests/tsconfig_paths.rs | 14 +++- tests/integration_test.rs | 8 +- 8 files changed, 101 insertions(+), 86 deletions(-) diff --git a/napi/src/lib.rs b/napi/src/lib.rs index c9264c65..8098d97f 100644 --- a/napi/src/lib.rs +++ b/napi/src/lib.rs @@ -2,13 +2,13 @@ extern crate napi; extern crate napi_derive; extern crate oxc_resolver; +use napi::tokio::runtime; +use napi_derive::napi; +use oxc_resolver::{ResolveOptions, Resolver}; use std::{ path::{Path, PathBuf}, sync::Arc, }; -use napi::tokio::runtime; -use napi_derive::napi; -use oxc_resolver::{ResolveOptions, Resolver}; use self::{ options::{NapiResolveOptions, StrOrStrList}, diff --git a/src/lib.rs b/src/lib.rs index f372f980..958a2bfd 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1172,75 +1172,77 @@ impl ResolverGeneric { ) -> BoxFuture<'a, Result, ResolveError>> { let fut = async move { self.cache - .tsconfig(root, path, |mut tsconfig| async move { - let directory = self.cache.value(tsconfig.directory()); - tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); - - // Extend tsconfig - if let Some(extends) = &tsconfig.extends { - let extended_tsconfig_paths = match extends { - ExtendsField::Single(s) => { - vec![self.get_extended_tsconfig_path(&directory, &tsconfig, s).await?] - } - ExtendsField::Multiple(specifiers) => { - try_join_all( - specifiers.iter().map(|s| { + .tsconfig(root, path, |mut tsconfig| async move { + let directory = self.cache.value(tsconfig.directory()); + tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); + + // Extend tsconfig + if let Some(extends) = &tsconfig.extends { + let extended_tsconfig_paths = match extends { + ExtendsField::Single(s) => { + vec![ self.get_extended_tsconfig_path(&directory, &tsconfig, s) - }), - ) - .await? + .await?, + ] + } + ExtendsField::Multiple(specifiers) => { + try_join_all(specifiers.iter().map(|s| { + self.get_extended_tsconfig_path(&directory, &tsconfig, s) + })) + .await? + } + }; + for extended_tsconfig_path in extended_tsconfig_paths { + let extended_tsconfig = self + .load_tsconfig( + /* root */ false, + &extended_tsconfig_path, + &TsconfigReferences::Disabled, + ) + .await?; + tsconfig.extend_tsconfig(&extended_tsconfig); } - }; - for extended_tsconfig_path in extended_tsconfig_paths { - let extended_tsconfig = self - .load_tsconfig( - /* root */ false, - &extended_tsconfig_path, - &TsconfigReferences::Disabled, - ) - .await?; - tsconfig.extend_tsconfig(&extended_tsconfig); } - } - // Load project references - match references { - TsconfigReferences::Disabled => { - tsconfig.references.drain(..); - } - TsconfigReferences::Auto => {} - TsconfigReferences::Paths(paths) => { - tsconfig.references = paths - .iter() - .map(|path| ProjectReference { path: path.clone(), tsconfig: None }) - .collect(); + // Load project references + match references { + TsconfigReferences::Disabled => { + tsconfig.references.drain(..); + } + TsconfigReferences::Auto => {} + TsconfigReferences::Paths(paths) => { + tsconfig.references = paths + .iter() + .map(|path| ProjectReference { path: path.clone(), tsconfig: None }) + .collect(); + } } - } - if !tsconfig.references.is_empty() { - let directory = tsconfig.directory().to_path_buf(); - for reference in &mut tsconfig.references { - let reference_tsconfig_path = directory.normalize_with(&reference.path); - let tsconfig = self - .cache - .tsconfig( - /* root */ true, - &reference_tsconfig_path, - |reference_tsconfig| async { - if reference_tsconfig.path == tsconfig.path { - return Err(ResolveError::TsconfigSelfReference( - reference_tsconfig.path.clone(), - )); - } - Ok(reference_tsconfig) - }, - ) - .await?; - reference.tsconfig.replace(tsconfig); + if !tsconfig.references.is_empty() { + let directory = tsconfig.directory().to_path_buf(); + for reference in &mut tsconfig.references { + let reference_tsconfig_path = directory.normalize_with(&reference.path); + let tsconfig = self + .cache + .tsconfig( + /* root */ true, + &reference_tsconfig_path, + |reference_tsconfig| async { + if reference_tsconfig.path == tsconfig.path { + return Err(ResolveError::TsconfigSelfReference( + reference_tsconfig.path.clone(), + )); + } + Ok(reference_tsconfig) + }, + ) + .await?; + reference.tsconfig.replace(tsconfig); + } } - } - Ok(tsconfig) - }).await + Ok(tsconfig) + }) + .await }; Box::pin(fut) } @@ -1614,7 +1616,7 @@ impl ResolverGeneric { target: &'a JSONValue, pattern_match: Option<&'a str>, is_imports: bool, - conditions: &'a[String], + conditions: &'a [String], ctx: &'a mut Ctx, ) -> BoxFuture<'a, ResolveResult> { let fut = async move { @@ -1643,7 +1645,7 @@ impl ResolverGeneric { }; Ok(target) } - + match target { // 1. If target is a String, then JSONValue::String(target) => { @@ -1660,13 +1662,17 @@ impl ResolverGeneric { } // 2. If patternMatch is a String, then // 1. Return PACKAGE_RESOLVE(target with every instance of "*" replaced by patternMatch, packageURL + "/"). - let target = - normalize_string_target(target_key, target, pattern_match, package_url)?; + let target = normalize_string_target( + target_key, + target, + pattern_match, + package_url, + )?; let package_url = self.cache.value(package_url); // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). return self.package_resolve(&package_url, &target, ctx).await; } - + // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. // 3. Let resolvedTarget be the URL resolution of the concatenation of packageURL and target. // 4. Assert: resolvedTarget is contained in packageURL. @@ -1740,11 +1746,11 @@ impl ResolverGeneric { ctx, ) .await; - + if resolved.is_err() && i == targets.len() { return resolved; } - + // 2. If resolved is undefined, continue the loop. if let Ok(Some(path)) = resolved { // 3. Return resolved. diff --git a/src/tests/browser_field.rs b/src/tests/browser_field.rs index f7459452..7f547609 100644 --- a/src/tests/browser_field.rs +++ b/src/tests/browser_field.rs @@ -148,7 +148,8 @@ async fn crypto_js() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(f.join("crypto-js"), "crypto").await.map(|r| r.full_path()); + let resolved_path = + resolver.resolve(f.join("crypto-js"), "crypto").await.map(|r| r.full_path()); assert_eq!(resolved_path, Err(ResolveError::Ignored(f.join("crypto-js")))); } diff --git a/src/tests/exports_field.rs b/src/tests/exports_field.rs index 7d23de5f..d5f96a31 100644 --- a/src/tests/exports_field.rs +++ b/src/tests/exports_field.rs @@ -93,7 +93,8 @@ async fn exports_not_browser_field1() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f, "exports-field/dist/main.js").await.map(|r| r.full_path()); + let resolved_path = + resolver.resolve(&f, "exports-field/dist/main.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f.join("node_modules/exports-field/lib/lib2/main.js"))); } @@ -109,7 +110,8 @@ async fn exports_not_browser_field2() { ..ResolveOptions::default() }); - let resolved_path = resolver.resolve(&f2, "exports-field/dist/main.js").await.map(|r| r.full_path()); + let resolved_path = + resolver.resolve(&f2, "exports-field/dist/main.js").await.map(|r| r.full_path()); assert_eq!(resolved_path, Ok(f2.join("node_modules/exports-field/lib/browser.js"))); } diff --git a/src/tests/extensions.rs b/src/tests/extensions.rs index c316a18c..dacf17e8 100644 --- a/src/tests/extensions.rs +++ b/src/tests/extensions.rs @@ -72,7 +72,8 @@ async fn respect_enforce_extension() { extensions: vec![".ts".into(), String::new(), ".js".into()], ..ResolveOptions::default() }) - .resolve_with_context(&f, "./foo", &mut ctx).await; + .resolve_with_context(&f, "./foo", &mut ctx) + .await; assert_eq!(resolved.map(Resolution::into_path_buf), Ok(f.join("foo.ts"))); assert_eq!( diff --git a/src/tests/roots.rs b/src/tests/roots.rs index 8f7da685..bad78cb5 100644 --- a/src/tests/roots.rs +++ b/src/tests/roots.rs @@ -84,7 +84,8 @@ async fn roots_fall_through() { let f = super::fixture(); let absolute_path = f.join("roots_fall_through/index.js"); let specifier = absolute_path.to_string_lossy(); - let resolution = Resolver::new(ResolveOptions::default().with_root(&f)).resolve(&f, &specifier).await; + let resolution = + Resolver::new(ResolveOptions::default().with_root(&f)).resolve(&f, &specifier).await; assert_eq!( resolution.map(super::super::resolution::Resolution::into_path_buf), Ok(absolute_path) diff --git a/src/tests/tsconfig_paths.rs b/src/tests/tsconfig_paths.rs index b5dab9b6..604ed124 100644 --- a/src/tests/tsconfig_paths.rs +++ b/src/tests/tsconfig_paths.rs @@ -488,8 +488,11 @@ OneTest { let root = PathBuf::from("/root"); for test in pass { - let resolved_path = - test.resolver(&root).resolve(&root, test.requested_module).await.map(|f| f.full_path()); + let resolved_path = test + .resolver(&root) + .resolve(&root, test.requested_module) + .await + .map(|f| f.full_path()); assert_eq!(resolved_path, Ok(PathBuf::from(test.expected_path)), "{}", test.name); } @@ -517,8 +520,11 @@ OneTest { ]; for test in fail { - let resolved_path = - test.resolver(&root).resolve(&root, test.requested_module).await.map(|f| f.full_path()); + let resolved_path = test + .resolver(&root) + .resolve(&root, test.requested_module) + .await + .map(|f| f.full_path()); assert_eq!( resolved_path, Err(ResolveError::NotFound(test.requested_module.into())), diff --git a/tests/integration_test.rs b/tests/integration_test.rs index af3656a1..80595317 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -76,11 +76,9 @@ async fn debug_resolver() { async fn dependencies() { let path = dir(); let mut ctx = ResolveContext::default(); - let _ = Resolver::new(ResolveOptions::default()).resolve_with_context( - path, - "./tests/package.json", - &mut ctx, - ).await; + let _ = Resolver::new(ResolveOptions::default()) + .resolve_with_context(path, "./tests/package.json", &mut ctx) + .await; assert!(!ctx.file_dependencies.is_empty()); assert!(ctx.missing_dependencies.is_empty()); } From 0e07e762e007a58e94089da051f43ca2cadebeea Mon Sep 17 00:00:00 2001 From: nilptr Date: Thu, 19 Dec 2024 20:51:08 +0800 Subject: [PATCH 11/38] fix: yarn_pnp feature --- src/lib.rs | 20 +++++++++++--------- src/tests/pnp.rs | 1 + 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 958a2bfd..3145a7f2 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -708,7 +708,7 @@ impl ResolverGeneric { ) -> ResolveResult { #[cfg(feature = "yarn_pnp")] { - if let Some(resolved_path) = self.load_pnp(cached_path, specifier, ctx)? { + if let Some(resolved_path) = self.load_pnp(cached_path, specifier, ctx).await? { return Ok(Some(resolved_path)); } } @@ -776,7 +776,7 @@ impl ResolverGeneric { } #[cfg(feature = "yarn_pnp")] - fn load_pnp( + async fn load_pnp( &self, cached_path: &CachedPath, specifier: &str, @@ -788,17 +788,19 @@ impl ResolverGeneric { match resolution { Ok(pnp::Resolution::Resolved(path, subpath)) => { let cached_path = self.cache.value(&path); - let export_resolution = self.load_package_exports( - specifier, - &subpath.unwrap_or_default(), - &cached_path, - ctx, - )?; + let export_resolution = self + .load_package_exports( + specifier, + &subpath.unwrap_or_default(), + &cached_path, + ctx, + ) + .await?; if export_resolution.is_some() { return Ok(export_resolution); } let file_or_directory_resolution = - self.load_as_file_or_directory(&cached_path, specifier, ctx)?; + self.load_as_file_or_directory(&cached_path, specifier, ctx).await?; if file_or_directory_resolution.is_some() { return Ok(file_or_directory_resolution); } diff --git a/src/tests/pnp.rs b/src/tests/pnp.rs index e4748b7d..4fa3c62b 100644 --- a/src/tests/pnp.rs +++ b/src/tests/pnp.rs @@ -30,6 +30,7 @@ async fn pnp1() { ), "is-odd" ) + .await .map(|r| r.full_path()), Ok(fixture.join( ".yarn/cache/is-odd-npm-0.1.2-9d980a9da8-7dc6c6fd00.zip/node_modules/is-odd/index.js" From a7bdbf0a65835cc21af1ceae94cb437645f57684 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 20 Mar 2025 22:55:20 +0800 Subject: [PATCH 12/38] refactor: use tokio fs directly --- Cargo.lock | 12 ++++ Cargo.toml | 5 +- src/file_system.rs | 156 ++++++++++++++++++----------------------- src/package_json.rs | 10 +-- src/tests/memory_fs.rs | 60 +++++++--------- 5 files changed, 116 insertions(+), 127 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 253325e0..37e8d8a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -64,6 +64,17 @@ dependencies = [ "radix_trie", ] +[[package]] +name = "async-trait" +version = "0.1.88" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e539d3fca749fcee5236ab05e93a52867dd549cc157c8cb7f99595f3cedffdb5" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "autocfg" version = "1.3.0" @@ -939,6 +950,7 @@ dependencies = [ name = "rspack_resolver" version = "0.5.3" dependencies = [ + "async-trait", "cfg-if", "criterion2", "dashmap", diff --git a/Cargo.toml b/Cargo.toml index f595c9e9..2b75147e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,13 +92,14 @@ simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } pnp = { version = "0.9.1", optional = true } document-features = { version = "0.2.8", optional = true } -tokio = { version = "1.42.0", features = ["sync", "rt", "macros"] } +tokio = { version = "1.42.0", features = ["sync", "rt", "fs", "macros"] } futures = "0.3.31" +async-trait = "0.1.88" [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system criterion2 = { version = "1.0.0", default-features = false, features = ["async_tokio"]} -tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } +tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } normalize-path = { version = "0.2.1" } [features] diff --git a/src/file_system.rs b/src/file_system.rs index b9d0961e..38dc88ce 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -1,5 +1,4 @@ use cfg_if::cfg_if; -use futures::future::BoxFuture; use std::{ fs, io, path::{Path, PathBuf}, @@ -9,13 +8,14 @@ use std::{ use pnp::fs::{LruZipCache, VPath, VPathInfo, ZipCache}; /// File System abstraction used for `ResolverGeneric` +#[async_trait::async_trait] pub trait FileSystem { /// See [std::fs::read] /// /// # Errors /// /// See [std::fs::read] - fn read<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>>; + async fn read(&self, path: &Path) -> io::Result>; /// See [std::fs::read_to_string] /// /// # Errors @@ -26,7 +26,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; + async fn read_to_string(&self, path: &Path) -> io::Result; /// See [std::fs::metadata] /// @@ -37,7 +37,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; + async fn metadata(&self, path: &Path) -> io::Result; /// See [std::fs::symlink_metadata] /// @@ -49,7 +49,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; + async fn symlink_metadata(&self, path: &Path) -> io::Result; /// See [std::fs::canonicalize] /// @@ -61,7 +61,7 @@ pub trait FileSystem { /// because object safety requirements, it is especially useful, when /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in /// napi env. - fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; + async fn canonicalize(&self, path: &Path) -> io::Result; } /// Metadata information about a file @@ -122,50 +122,41 @@ impl Default for FileSystemOs { } } +#[async_trait::async_trait] impl FileSystem for FileSystemOs { - fn read<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => self.pnp_lru.read(info.physical_base_path(), info.zip_path), - VPath::Virtual(info) => std::fs::read(info.physical_base_path()), - VPath::Native(path) => std::fs::read(&path), - } + async fn read(&self, path: &Path) -> io::Result> { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { + if self.options.enable_pnp { + return match VPath::from(path)? { + VPath::Zip(info) => self.pnp_lru.read(info.physical_base_path(), info.zip_path), + VPath::Virtual(info) => tokio::fs::read(info.physical_base_path()).await, + VPath::Native(path) => tokio::fs::read(&path).await, } - }} - - fs::read(path) - }; + } + }} - Box::pin(fut) + tokio::fs::read(path).await } - fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { + async fn read_to_string(&self, path: &Path) -> io::Result { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { if self.options.enable_pnp { return match VPath::from(path)? { VPath::Zip(info) => self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path), - VPath::Virtual(info) => std::fs::read_to_string(info.physical_base_path()), - VPath::Native(path) => std::fs::read_to_string(&path), + VPath::Virtual(info) => tokio::fs::read_to_string(info.physical_base_path()).await, + VPath::Native(path) => tokio::fs::read_to_string(&path).await, } } } - } - - fs::read_to_string(path) - }; - - Box::pin(fut) + } + tokio::fs::read_to_string(path).await } - fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { + async fn metadata(&self, path: &Path) -> io::Result { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { if self.options.enable_pnp { return match VPath::from(path)? { VPath::Zip(info) => self @@ -173,29 +164,26 @@ impl FileSystem for FileSystemOs { .file_type(info.physical_base_path(), info.zip_path) .map(FileMetadata::from), VPath::Virtual(info) => { - fs::metadata(info.physical_base_path()).map(FileMetadata::from) + tokio::fs::metadata(info.physical_base_path()) + .await + .map(FileMetadata::from) } - VPath::Native(path) => fs::metadata(path).map(FileMetadata::from), + VPath::Native(path) => tokio::fs::metadata(path).await.map(FileMetadata::from), } } - } } + } - fs::metadata(path).map(FileMetadata::from) - }; - - Box::pin(fut) + tokio::fs::metadata(path).await.map(FileMetadata::from) } - fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { fs::symlink_metadata(path).map(FileMetadata::from) }; - Box::pin(fut) + async fn symlink_metadata(&self, path: &Path) -> io::Result { + tokio::fs::symlink_metadata(path).await.map(FileMetadata::from) } - fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { + async fn canonicalize(&self, path: &Path) -> io::Result { + cfg_if! { + if #[cfg(feature = "yarn_pnp")] { if self.options.enable_pnp { return match VPath::from(path)? { VPath::Zip(info) => { @@ -206,52 +194,48 @@ impl FileSystem for FileSystemOs { } } } - } + } - cfg_if! { + cfg_if! { if #[cfg(not(target_os = "wasi"))]{ - dunce::canonicalize(path) - } else { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - loop { - let link = fs::read_link(&path_buf)?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); - } - Component::Normal(seg) => { - #[cfg(target_family = "wasm")] - // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 - { - path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); - } - #[cfg(not(target_family = "wasm"))] - { - path_buf.push(seg); - } + dunce::canonicalize(path) + } else { + use std::path::Component; + let mut path_buf = path.to_path_buf(); + loop { + let link = fs::read_link(&path_buf)?; + path_buf.pop(); + for component in link.components() { + match component { + Component::ParentDir => { + path_buf.pop(); + } + Component::Normal(seg) => { + #[cfg(target_family = "wasm")] + // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 + { + path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); } - Component::RootDir => { - path_buf = PathBuf::from("/"); + #[cfg(not(target_family = "wasm"))] + { + path_buf.push(seg); } - Component::CurDir | Component::Prefix(_) => {} } + Component::RootDir => { + path_buf = PathBuf::from("/"); + } + Component::CurDir | Component::Prefix(_) => {} } - if !fs::symlink_metadata(&path_buf)?.is_symlink() { - break; - } } - Ok(path_buf) + if !fs::symlink_metadata(&path_buf)?.is_symlink() { + break; + } + } + Ok(path_buf) } } - }; - - Box::pin(fut) } } - #[tokio::test] async fn metadata() { let meta = FileMetadata { is_file: true, is_dir: true, is_symlink: true }; diff --git a/src/package_json.rs b/src/package_json.rs index 7e05d202..0ba12a1b 100644 --- a/src/package_json.rs +++ b/src/package_json.rs @@ -126,7 +126,7 @@ impl PackageJson { pub(crate) fn main_fields<'a>( &'a self, main_fields: &'a [String], - ) -> impl Iterator + '_ { + ) -> impl Iterator + 'a { main_fields .iter() .filter_map(|main_field| self.raw_json.get(main_field)) @@ -139,7 +139,7 @@ impl PackageJson { pub(crate) fn exports_fields<'a>( &'a self, exports_fields: &'a [Vec], - ) -> impl Iterator + '_ { + ) -> impl Iterator + 'a { exports_fields.iter().filter_map(|object_path| { self.raw_json .as_object() @@ -153,7 +153,7 @@ impl PackageJson { pub(crate) fn imports_fields<'a>( &'a self, imports_fields: &'a [Vec], - ) -> impl Iterator + '_ { + ) -> impl Iterator + 'a { imports_fields.iter().filter_map(|object_path| { self.raw_json .as_object() @@ -169,7 +169,7 @@ impl PackageJson { fn browser_fields<'a>( &'a self, alias_fields: &'a [Vec], - ) -> impl Iterator + '_ { + ) -> impl Iterator + 'a { alias_fields.iter().filter_map(|object_path| { self.raw_json .as_object() @@ -190,7 +190,7 @@ impl PackageJson { path: &Path, request: Option<&str>, alias_fields: &'a [Vec], - ) -> Result, ResolveError> { + ) -> Result, ResolveError> { for object in self.browser_fields(alias_fields) { if let Some(request) = request { if let Some(value) = object.get(request) { diff --git a/src/tests/memory_fs.rs b/src/tests/memory_fs.rs index 18e84219..8868f453 100644 --- a/src/tests/memory_fs.rs +++ b/src/tests/memory_fs.rs @@ -3,8 +3,6 @@ use std::{ path::{Path, PathBuf}, }; -use futures::future::BoxFuture; - use crate::{FileMetadata, FileSystem}; #[derive(Default)] @@ -42,45 +40,39 @@ impl MemoryFS { file.write_all(content.as_bytes()).unwrap(); } } - +#[async_trait::async_trait] impl FileSystem for MemoryFS { - fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - Box::pin(async move { - use vfs::FileSystem; - let mut file = self - .fs - .open_file(path.to_string_lossy().as_ref()) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let mut buffer = String::new(); - file.read_to_string(&mut buffer).unwrap(); - Ok(buffer) - }) + async fn read_to_string(&self, path: &Path) -> io::Result { + use vfs::FileSystem; + let mut file = self + .fs + .open_file(path.to_string_lossy().as_ref()) + .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; + let mut buffer = String::new(); + file.read_to_string(&mut buffer).unwrap(); + Ok(buffer) } - fn read<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>> { - Box::pin(async move { - let buf = self.read_to_string(path).await?; - Ok(buf.into_bytes()) - }) + async fn read(&self, path: &Path) -> io::Result> { + let buf = self.read_to_string(path).await?; + Ok(buf.into_bytes()) } - fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - Box::pin(async move { - use vfs::FileSystem; - let metadata = self - .fs - .metadata(path.to_string_lossy().as_ref()) - .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; - let is_file = metadata.file_type == vfs::VfsFileType::File; - let is_dir = metadata.file_type == vfs::VfsFileType::Directory; - Ok(FileMetadata::new(is_file, is_dir, false)) - }) + async fn metadata(&self, path: &Path) -> io::Result { + use vfs::FileSystem; + let metadata = self + .fs + .metadata(path.to_string_lossy().as_ref()) + .map_err(|err| io::Error::new(io::ErrorKind::NotFound, err))?; + let is_file = metadata.file_type == vfs::VfsFileType::File; + let is_dir = metadata.file_type == vfs::VfsFileType::Directory; + Ok(FileMetadata::new(is_file, is_dir, false)) } - fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture> { - Box::pin(async move { self.metadata(path).await }) + async fn symlink_metadata(&self, path: &Path) -> io::Result { + self.metadata(path).await } - fn canonicalize(&self, _path: &Path) -> BoxFuture> { - Box::pin(async move { Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) }) + async fn canonicalize(&self, _path: &Path) -> io::Result { + Err(io::Error::new(io::ErrorKind::NotFound, "not a symlink")) } } From 568282fb8aa95f6bdf09014d96fbf0305c1cc965 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 20 Mar 2025 23:03:29 +0800 Subject: [PATCH 13/38] test: change benmark test name --- benches/resolver.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index d8c231c5..0e255cfa 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -180,7 +180,7 @@ fn bench_resolver(c: &mut Criterion) { }); group.bench_with_input( - BenchmarkId::from_parameter("resolve-from-symlinks"), + BenchmarkId::from_parameter("resolve from symlinks"), &symlinks_range, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); @@ -200,7 +200,7 @@ fn bench_resolver(c: &mut Criterion) { ); group.bench_with_input( - BenchmarkId::from_parameter("resolve-from-symlinks-multi-thread"), + BenchmarkId::from_parameter("resolve from symlinks multi thread"), &symlinks_range, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); From 0e7c5eca4aa2145ee90a06d84108e0630b9989a1 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 20 Mar 2025 23:14:42 +0800 Subject: [PATCH 14/38] chore: cargo fmt --- src/file_system.rs | 60 +++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/file_system.rs b/src/file_system.rs index 38dc88ce..59c739e0 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -197,43 +197,43 @@ impl FileSystem for FileSystemOs { } cfg_if! { - if #[cfg(not(target_os = "wasi"))]{ - dunce::canonicalize(path) - } else { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - loop { - let link = fs::read_link(&path_buf)?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); - } - Component::Normal(seg) => { - #[cfg(target_family = "wasm")] - // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 - { - path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); - } - #[cfg(not(target_family = "wasm"))] - { - path_buf.push(seg); - } + if #[cfg(not(target_os = "wasi"))]{ + dunce::canonicalize(path) + } else { + use std::path::Component; + let mut path_buf = path.to_path_buf(); + loop { + let link = fs::read_link(&path_buf)?; + path_buf.pop(); + for component in link.components() { + match component { + Component::ParentDir => { + path_buf.pop(); + } + Component::Normal(seg) => { + #[cfg(target_family = "wasm")] + // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 + { + path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); } - Component::RootDir => { - path_buf = PathBuf::from("/"); + #[cfg(not(target_family = "wasm"))] + { + path_buf.push(seg); } - Component::CurDir | Component::Prefix(_) => {} } - } - if !fs::symlink_metadata(&path_buf)?.is_symlink() { - break; + Component::RootDir => { + path_buf = PathBuf::from("/"); + } + Component::CurDir | Component::Prefix(_) => {} } } - Ok(path_buf) + if !fs::symlink_metadata(&path_buf)?.is_symlink() { + break; } } + Ok(path_buf) + } + } } } #[tokio::test] From aa865402e9a2cb95f1cb3c1f90634430bac2bd26 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 20 Mar 2025 23:15:37 +0800 Subject: [PATCH 15/38] chore: remove unused crate --- Cargo.lock | 7 ------- Cargo.toml | 1 - 2 files changed, 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 37e8d8a6..9cfcba62 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -964,7 +964,6 @@ dependencies = [ "rustc-hash", "serde", "serde_json", - "simdutf8", "thiserror", "tokio", "tracing", @@ -1082,12 +1081,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - [[package]] name = "slab" version = "0.4.9" diff --git a/Cargo.toml b/Cargo.toml index 2b75147e..b74edf64 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -87,7 +87,6 @@ thiserror = "1.0.61" json-strip-comments = "1.0.2" indexmap = { version = "2.2.6", features = ["serde"] } cfg-if = "1.0" -simdutf8 = { version = "0.1.4", features = ["aarch64_neon"] } pnp = { version = "0.9.1", optional = true } From 197e6b80822902c0c2a2ca9cfee8f05c612c3b91 Mon Sep 17 00:00:00 2001 From: pshu Date: Fri, 21 Mar 2025 16:15:32 +0800 Subject: [PATCH 16/38] chore: clippy happy --- src/cache.rs | 16 ++++++++-------- src/lib.rs | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/cache.rs b/src/cache.rs index 3c5de1af..c1c6615a 100644 --- a/src/cache.rs +++ b/src/cache.rs @@ -27,7 +27,7 @@ pub struct Cache { tsconfigs: DashMap, BuildHasherDefault>, } -impl Cache { +impl Cache { pub fn new(fs: Fs) -> Self { Self { fs, paths: DashSet::default(), tsconfigs: DashMap::default() } } @@ -63,8 +63,8 @@ impl Cache { callback: F, // callback for modifying tsconfig with `extends` ) -> Result, ResolveError> where - F: FnOnce(TsConfig) -> Fut, - Fut: Future>, + F: FnOnce(TsConfig) -> Fut + Send, + Fut: Send + Future>, { if let Some(tsconfig_ref) = self.tsconfigs.get(path) { return Ok(Arc::clone(tsconfig_ref.value())); @@ -176,11 +176,11 @@ impl CachedPathImpl { self.parent.as_ref() } - async fn meta(&self, fs: &Fs) -> Option { + async fn meta(&self, fs: &Fs) -> Option { *self.meta.get_or_init(|| async { fs.metadata(&self.path).await.ok() }).await } - pub async fn is_file(&self, fs: &Fs, ctx: &mut Ctx) -> bool { + pub async fn is_file(&self, fs: &Fs, ctx: &mut Ctx) -> bool { if let Some(meta) = self.meta(fs).await { ctx.add_file_dependency(self.path()); meta.is_file @@ -190,7 +190,7 @@ impl CachedPathImpl { } } - pub async fn is_dir(&self, fs: &Fs, ctx: &mut Ctx) -> bool { + pub async fn is_dir(&self, fs: &Fs, ctx: &mut Ctx) -> bool { self.meta(fs).await.map_or_else( || { ctx.add_missing_dependency(self.path()); @@ -226,7 +226,7 @@ impl CachedPathImpl { Box::pin(fut) } - pub async fn module_directory( + pub async fn module_directory( &self, module_name: &str, cache: &Cache, @@ -236,7 +236,7 @@ impl CachedPathImpl { cached_path.is_dir(&cache.fs, ctx).await.then_some(cached_path) } - pub async fn cached_node_modules( + pub async fn cached_node_modules( &self, cache: &Cache, ctx: &mut Ctx, diff --git a/src/lib.rs b/src/lib.rs index f6077814..87e5892d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -125,13 +125,13 @@ impl fmt::Debug for ResolverGeneric { } } -impl Default for ResolverGeneric { +impl Default for ResolverGeneric { fn default() -> Self { Self::new(ResolveOptions::default()) } } -impl ResolverGeneric { +impl ResolverGeneric { pub fn new(options: ResolveOptions) -> Self { Self { options: options.sanitize(), @@ -184,7 +184,7 @@ impl ResolverGeneric { /// # Errors /// /// * See [ResolveError] - pub async fn resolve>( + pub async fn resolve>( &self, directory: P, specifier: &str, @@ -198,7 +198,7 @@ impl ResolverGeneric { /// # Errors /// /// * See [ResolveError] - pub async fn resolve_with_context>( + pub async fn resolve_with_context>( &self, directory: P, specifier: &str, From 22c538ca5e356b0d99cd7e64e48443d721bd4562 Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 15:03:38 +0800 Subject: [PATCH 17/38] chore: pass wasm check --- Cargo.toml | 6 +++++- src/file_system.rs | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b74edf64..2236e7ff 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -91,10 +91,14 @@ cfg-if = "1.0" pnp = { version = "0.9.1", optional = true } document-features = { version = "0.2.8", optional = true } -tokio = { version = "1.42.0", features = ["sync", "rt", "fs", "macros"] } futures = "0.3.31" async-trait = "0.1.88" +[target.'cfg(not(target_arch = "wasm32"))'.dependencies] +tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros", "fs"] } +[target.'cfg(target_arch = "wasm32")'.dependencies] +tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros"] } + [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system criterion2 = { version = "1.0.0", default-features = false, features = ["async_tokio"]} diff --git a/src/file_system.rs b/src/file_system.rs index 59c739e0..12903ca0 100644 --- a/src/file_system.rs +++ b/src/file_system.rs @@ -122,6 +122,7 @@ impl Default for FileSystemOs { } } +#[cfg(not(target_arch = "wasm32"))] #[async_trait::async_trait] impl FileSystem for FileSystemOs { async fn read(&self, path: &Path) -> io::Result> { From adcb8d21b7c711abe3f779a9e39b7db0535104fb Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 15:05:55 +0800 Subject: [PATCH 18/38] =?UTF-8?q?chore:=20=F0=9F=94=A5=20remove=20uesless?= =?UTF-8?q?=20files?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/file_system.rs.orig | 315 --- src/lib.rs.orig | 1950 ------------------ src/tests/incorrect_description_file.rs.orig | 78 - src/tests/simple.rs.orig | 84 - src/tests/tsconfig_paths.rs.orig | 558 ----- 5 files changed, 2985 deletions(-) delete mode 100644 src/file_system.rs.orig delete mode 100644 src/lib.rs.orig delete mode 100644 src/tests/incorrect_description_file.rs.orig delete mode 100644 src/tests/simple.rs.orig delete mode 100644 src/tests/tsconfig_paths.rs.orig diff --git a/src/file_system.rs.orig b/src/file_system.rs.orig deleted file mode 100644 index a02ea00b..00000000 --- a/src/file_system.rs.orig +++ /dev/null @@ -1,315 +0,0 @@ -use cfg_if::cfg_if; -use futures::future::BoxFuture; -use std::{ - fs, io, - path::{Path, PathBuf}, -}; - -#[cfg(feature = "yarn_pnp")] -use pnp::fs::{LruZipCache, VPath, VPathInfo, ZipCache}; - -/// File System abstraction used for `ResolverGeneric` -pub trait FileSystem { - /// See [std::fs::read] - /// - /// # Errors - /// - /// See [std::fs::read] - fn read(&self, path: &Path) -> io::Result>; - /// See [std::fs::read_to_string] - /// - /// # Errors - /// - /// * See [std::fs::read_to_string] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; - - /// See [std::fs::metadata] - /// - /// # Errors - /// See [std::fs::metadata] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; - - /// See [std::fs::symlink_metadata] - /// - /// # Errors - /// - /// See [std::fs::symlink_metadata] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; - - /// See [std::fs::canonicalize] - /// - /// # Errors - /// - /// See [std::fs::read_link] - /// ## Warning - /// Use `&Path` instead of a generic `P: AsRef` here, - /// because object safety requirements, it is especially useful, when - /// you want to store multiple `dyn FileSystem` in a `Vec` or use a `ResolverGeneric` in - /// napi env. - fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result>; -} - -/// Metadata information about a file -#[derive(Debug, Clone, Copy)] -pub struct FileMetadata { - pub is_file: bool, - pub is_dir: bool, - pub is_symlink: bool, -} - -impl FileMetadata { - pub fn new(is_file: bool, is_dir: bool, is_symlink: bool) -> Self { - Self { is_file, is_dir, is_symlink } - } -} - -#[cfg(feature = "yarn_pnp")] -impl From for FileMetadata { - fn from(value: pnp::fs::FileType) -> Self { - Self::new(value == pnp::fs::FileType::File, value == pnp::fs::FileType::Directory, false) - } -} - -impl From for FileMetadata { - fn from(metadata: fs::Metadata) -> Self { - Self::new(metadata.is_file(), metadata.is_dir(), metadata.is_symlink()) - } -} - -pub struct FileSystemOptions { - #[cfg(feature = "yarn_pnp")] - pub enable_pnp: bool, -} - -impl Default for FileSystemOptions { - fn default() -> Self { - Self { - #[cfg(feature = "yarn_pnp")] - enable_pnp: true, - } - } -} - -/// Operating System -pub struct FileSystemOs { - options: FileSystemOptions, - #[cfg(feature = "yarn_pnp")] - pnp_lru: LruZipCache>, -} - -impl Default for FileSystemOs { - fn default() -> Self { - Self { - options: FileSystemOptions::default(), - #[cfg(feature = "yarn_pnp")] - pnp_lru: LruZipCache::new(50, pnp::fs::open_zip_via_read_p), - } - } -} - -fn buffer_to_string(bytes: Vec) -> io::Result { - // `simdutf8` is faster than `std::str::from_utf8` which `fs::read_to_string` uses internally - if simdutf8::basic::from_utf8(&bytes).is_err() { - // Same error as `fs::read_to_string` produces (`io::Error::INVALID_UTF8`) - return Err(io::Error::new( - io::ErrorKind::InvalidData, - "stream did not contain valid UTF-8", - )); - } - // SAFETY: `simdutf8` has ensured it's a valid UTF-8 string - Ok(unsafe { String::from_utf8_unchecked(bytes) }) -} - -impl FileSystem for FileSystemOs { -<<<<<<< HEAD - fn read_to_string<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { - VPath::Zip(info) => { - self.pnp_lru.read_to_string(info.physical_base_path(), info.zip_path) - } - VPath::Virtual(info) => read_to_string(&info.physical_base_path()), - VPath::Native(path) => read_to_string(&path), - } - } else { - read_to_string(path) - } - } - }; - Box::pin(fut) - } - - fn metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { -======= - fn read(&self, path: &Path) -> io::Result> { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { - VPath::Zip(info) => self.pnp_lru.read(info.physical_base_path(), info.zip_path), - VPath::Virtual(info) => std::fs::read(info.physical_base_path()), - VPath::Native(path) => std::fs::read(&path), - } - } - }} - - std::fs::read(path) - } - fn read_to_string(&self, path: &Path) -> io::Result { - let buffer = self.read(path)?; - buffer_to_string(buffer) - } - - fn metadata(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { ->>>>>>> origin/main - VPath::Zip(info) => self - .pnp_lru - .file_type(info.physical_base_path(), info.zip_path) - .map(FileMetadata::from), - VPath::Virtual(info) => { - fs::metadata(info.physical_base_path()).map(FileMetadata::from) - } - VPath::Native(path) => fs::metadata(path).map(FileMetadata::from), - } -<<<<<<< HEAD - } else { - fs::metadata(path).map(FileMetadata::from) - } - } - }; - Box::pin(fut) -======= - } - } - } - - fs::metadata(path).map(FileMetadata::from) ->>>>>>> origin/main - } - - fn symlink_metadata<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { fs::symlink_metadata(path).map(FileMetadata::from) }; - Box::pin(fut) - } - -<<<<<<< HEAD - fn canonicalize<'a>(&'a self, path: &'a Path) -> BoxFuture<'a, io::Result> { - let fut = async move { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - match VPath::from(path)? { -======= - fn canonicalize(&self, path: &Path) -> io::Result { - cfg_if! { - if #[cfg(feature = "yarn_pnp")] { - if self.options.enable_pnp { - return match VPath::from(path)? { ->>>>>>> origin/main - VPath::Zip(info) => { - dunce::canonicalize(info.physical_base_path().join(info.zip_path)) - } - VPath::Virtual(info) => dunce::canonicalize(info.physical_base_path()), - VPath::Native(path) => dunce::canonicalize(path), - } -<<<<<<< HEAD - } else if #[cfg(not(target_os = "wasi"))]{ - dunce::canonicalize(path) - } else { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - loop { - let link = fs::read_link(&path_buf)?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); -======= - } - } - } - - cfg_if! { - if #[cfg(not(target_os = "wasi"))]{ - dunce::canonicalize(path) - } else { - use std::path::Component; - let mut path_buf = path.to_path_buf(); - loop { - let link = fs::read_link(&path_buf)?; - path_buf.pop(); - for component in link.components() { - match component { - Component::ParentDir => { - path_buf.pop(); - } - Component::Normal(seg) => { - #[cfg(target_family = "wasm")] - // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 - { - path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); ->>>>>>> origin/main - } - Component::Normal(seg) => { - #[cfg(target_family = "wasm")] - // Need to trim the extra \0 introduces by https://github.com/nodejs/uvwasi/issues/262 - { - path_buf.push(seg.to_string_lossy().trim_end_matches('\0')); - } - #[cfg(not(target_family = "wasm"))] - { - path_buf.push(seg); - } - } - Component::RootDir => { - path_buf = PathBuf::from("/"); - } - Component::CurDir | Component::Prefix(_) => {} - } - } - if !fs::symlink_metadata(&path_buf)?.is_symlink() { - break; - } - } - Ok(path_buf) - } - } - }; - Box::pin(fut) - } -} - -#[tokio::test] -async fn metadata() { - let meta = FileMetadata { is_file: true, is_dir: true, is_symlink: true }; - assert_eq!( - format!("{meta:?}"), - "FileMetadata { is_file: true, is_dir: true, is_symlink: true }" - ); - let _ = meta; -} diff --git a/src/lib.rs.orig b/src/lib.rs.orig deleted file mode 100644 index 92bf44fc..00000000 --- a/src/lib.rs.orig +++ /dev/null @@ -1,1950 +0,0 @@ -//! # Oxc Resolver -//! -//! Node.js [CommonJS][cjs] and [ECMAScript][esm] Module Resolution. -//! -//! Released on [crates.io](https://crates.io/crates/oxc_resolver) and [npm](https://www.npmjs.com/package/oxc-resolver). -//! -//! A module resolution is the process of finding the file referenced by a module specifier in -//! `import "specifier"` or `require("specifier")`. -//! -//! All [configuration options](ResolveOptions) are aligned with webpack's [enhanced-resolve]. -//! -//! ## Terminology -//! -//! ### Specifier -//! -//! For [CommonJS modules][cjs], -//! the specifier is the string passed to the `require` function. e.g. `"id"` in `require("id")`. -//! -//! For [ECMAScript modules][esm], -//! the specifier of an `import` statement is the string after the `from` keyword, -//! e.g. `'specifier'` in `import 'specifier'` or `import { sep } from 'specifier'`. -//! Specifiers are also used in export from statements, and as the argument to an `import()` expression. -//! -//! This is also named "request" in some places. -//! -//! ## References: -//! -//! * Algorithm adapted from Node.js [CommonJS Module Resolution Algorithm] and [ECMAScript Module Resolution Algorithm]. -//! * Tests are ported from [enhanced-resolve]. -//! * Some code is adapted from [parcel-resolver]. -//! * The documentation is copied from [webpack's resolve configuration](https://webpack.js.org/configuration/resolve). -//! -//! [enhanced-resolve]: https://github.com/webpack/enhanced-resolve -//! [CommonJS Module Resolution Algorithm]: https://nodejs.org/api/modules.html#all-together -//! [ECMAScript Module Resolution Algorithm]: https://nodejs.org/api/esm.html#resolution-algorithm-specification -//! [parcel-resolver]: https://github.com/parcel-bundler/parcel/blob/v2/packages/utils/node-resolver-rs -//! [cjs]: https://nodejs.org/api/modules.html -//! [esm]: https://nodejs.org/api/esm.html -//! -//! ## Feature flags -#![cfg_attr(feature = "document-features", doc = document_features::document_features!())] -#![cfg_attr(docsrs, feature(doc_auto_cfg))] -//! -//! ## Example -//! -//! ```rust,ignore -#![doc = include_str!("../examples/resolver.rs")] -//! ``` - -mod builtins; -mod cache; -mod context; -mod error; -mod file_system; -mod options; -mod package_json; -mod path; -mod resolution; -mod specifier; -mod tsconfig; - -#[cfg(test)] -mod tests; - -use dashmap::{mapref::one::Ref, DashMap}; -use rustc_hash::FxHashSet; -use serde_json::Value as JSONValue; -use std::{ - borrow::Cow, - cmp::Ordering, - ffi::OsStr, - fmt, - path::{Component, Path, PathBuf}, - sync::Arc, -}; - -<<<<<<< HEAD -use futures::future::{try_join_all, BoxFuture}; -use rustc_hash::FxHashSet; -use serde_json::Value as JSONValue; - -======= ->>>>>>> origin/main -pub use crate::{ - builtins::NODEJS_BUILTINS, - error::{JSONError, ResolveError, SpecifierError}, - file_system::{FileMetadata, FileSystem, FileSystemOs}, - options::{ - Alias, AliasValue, EnforceExtension, ResolveOptions, Restriction, TsconfigOptions, - TsconfigReferences, - }, - package_json::PackageJson, - resolution::Resolution, -}; -use crate::{ - cache::{Cache, CachedPath}, - context::ResolveContext as Ctx, - package_json::JSONMap, - path::{PathUtil, SLASH_START}, - specifier::Specifier, - tsconfig::ExtendsField, - tsconfig::{ProjectReference, TsConfig}, -}; - -type ResolveResult = Result, ResolveError>; - -/// Context returned from the [Resolver::resolve_with_context] API -#[derive(Debug, Default, Clone)] -pub struct ResolveContext { - /// Files that was found on file system - pub file_dependencies: FxHashSet, - - /// Dependencies that was not found on file system - pub missing_dependencies: FxHashSet, -} - -/// Resolver with the current operating system as the file system -pub type Resolver = ResolverGeneric; - -/// Generic implementation of the resolver, can be configured by the [FileSystem] trait -pub struct ResolverGeneric { - options: ResolveOptions, - cache: Arc>, - #[cfg(feature = "yarn_pnp")] - pnp_cache: Arc>>, -} - -impl fmt::Debug for ResolverGeneric { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.options.fmt(f) - } -} - -impl Default for ResolverGeneric { - fn default() -> Self { - Self::new(ResolveOptions::default()) - } -} - -impl ResolverGeneric { - pub fn new(options: ResolveOptions) -> Self { - Self { - options: options.sanitize(), - cache: Arc::new(Cache::new(Fs::default())), - #[cfg(feature = "yarn_pnp")] - pnp_cache: Arc::new(DashMap::default()), - } - } -} - -impl ResolverGeneric { - pub fn new_with_file_system(file_system: Fs, options: ResolveOptions) -> Self { - Self { - options: options.sanitize(), - cache: Arc::new(Cache::new(file_system)), - #[cfg(feature = "yarn_pnp")] - pnp_cache: Arc::new(DashMap::default()), - } - } - - /// Clone the resolver using the same underlying cache. - #[must_use] - pub fn clone_with_options(&self, options: ResolveOptions) -> Self { - Self { - options: options.sanitize(), - cache: Arc::clone(&self.cache), - #[cfg(feature = "yarn_pnp")] - pnp_cache: Arc::clone(&self.pnp_cache), - } - } - - /// Returns the options. - pub fn options(&self) -> &ResolveOptions { - &self.options - } - - /// Clear the underlying cache. - pub fn clear_cache(&self) { - self.cache.clear(); - } - - /// Resolve `specifier` at an absolute path to a `directory`. - /// - /// A specifier is the string passed to require or import, i.e. `require("specifier")` or `import "specifier"`. - /// - /// `directory` must be an **absolute** path to a directory where the specifier is resolved against. - /// For CommonJS modules, it is the `__dirname` variable that contains the absolute path to the folder containing current module. - /// For ECMAScript modules, it is the value of `import.meta.url`. - /// - /// # Errors - /// - /// * See [ResolveError] - pub async fn resolve>( - &self, - directory: P, - specifier: &str, - ) -> Result { - let mut ctx = Ctx::default(); - self.resolve_tracing(directory.as_ref(), specifier, &mut ctx).await - } - - /// Resolve `specifier` at absolute `path` with [ResolveContext] - /// - /// # Errors - /// - /// * See [ResolveError] - pub async fn resolve_with_context>( - &self, - directory: P, - specifier: &str, - resolve_context: &mut ResolveContext, - ) -> Result { - let mut ctx = Ctx::default(); - ctx.init_file_dependencies(); - let result = self.resolve_tracing(directory.as_ref(), specifier, &mut ctx).await; - if let Some(deps) = &mut ctx.file_dependencies { - resolve_context.file_dependencies.extend(deps.drain(..)); - } - if let Some(deps) = &mut ctx.missing_dependencies { - resolve_context.missing_dependencies.extend(deps.drain(..)); - } - result - } - - /// Wrap `resolve_impl` with `tracing` information - async fn resolve_tracing( - &self, - directory: &Path, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - let span = tracing::debug_span!("resolve", path = ?directory, specifier = specifier); - let _enter = span.enter(); - let r = self.resolve_impl(directory, specifier, ctx).await; - match &r { - Ok(r) => { - tracing::debug!(options = ?self.options, path = ?directory, specifier = specifier, ret = ?r.path); - } - Err(err) => { - tracing::debug!(options = ?self.options, path = ?directory, specifier = specifier, err = ?err); - } - }; - r - } - - async fn resolve_impl( - &self, - path: &Path, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - ctx.with_fully_specified(self.options.fully_specified); - let cached_path = self.cache.value(path); - let cached_path = self.require(&cached_path, specifier, ctx).await?; - let path = self.load_realpath(&cached_path).await?; - // enhanced-resolve: restrictions - self.check_restrictions(&path)?; - let package_json = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await?; - if let Some(package_json) = &package_json { - // path must be inside the package. - debug_assert!(path.starts_with(package_json.directory())); - } - Ok(Resolution { - path, - query: ctx.query.take(), - fragment: ctx.fragment.take(), - package_json, - }) - } - - /// require(X) from module at path Y - /// - /// X: specifier - /// Y: path - /// - /// - fn require<'a>( - &'a self, - cached_path: &'a CachedPath, - specifier: &'a str, - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, Result> { - let fut = async move { - ctx.test_for_infinite_recursion()?; - - // enhanced-resolve: parse - let (parsed, try_fragment_as_path) = - self.load_parse(cached_path, specifier, ctx).await?; - if let Some(path) = try_fragment_as_path { - return Ok(path); - } - - self.require_without_parse(cached_path, parsed.path(), ctx).await - }; - Box::pin(fut) - } - - async fn require_without_parse( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // tsconfig-paths - if let Some(path) = - self.load_tsconfig_paths(cached_path, specifier, &mut Ctx::default()).await? - { - return Ok(path); - } - - // enhanced-resolve: try alias - if let Some(path) = - self.load_alias(cached_path, specifier, &self.options.alias, ctx).await? - { - return Ok(path); - } - - let result = match Path::new(specifier).components().next() { - // 2. If X begins with '/' - Some(Component::RootDir | Component::Prefix(_)) => { - self.require_absolute(cached_path, specifier, ctx).await - } - // 3. If X begins with './' or '/' or '../' - Some(Component::CurDir | Component::ParentDir) => { - self.require_relative(cached_path, specifier, ctx).await - } - // 4. If X begins with '#' - Some(Component::Normal(_)) if specifier.as_bytes()[0] == b'#' => { - self.require_hash(cached_path, specifier, ctx).await - } - _ => { - // 1. If X is a core module, - // a. return the core module - // b. STOP - self.require_core(specifier)?; - - // (ESM) 5. Otherwise, - // Note: specifier is now a bare specifier. - // Set resolved the result of PACKAGE_RESOLVE(specifier, parentURL). - self.require_bare(cached_path, specifier, ctx).await - } - }; - - // result.or_else(|err| { - // if err.is_ignore() { - // return Err(err); - // } - // // enhanced-resolve: try fallback - // self.load_alias(cached_path, specifier, &self.options.fallback, ctx) - // .and_then(|value| value.ok_or(err)) - // }) - - match result { - Ok(_) => result, - Err(err) => { - if err.is_ignore() { - return Err(err); - } - // enhanced-resolve: try fallback - self.load_alias(cached_path, specifier, &self.options.fallback, ctx) - .await - .and_then(|value| value.ok_or(err)) - } - } - } - - // PACKAGE_RESOLVE(packageSpecifier, parentURL) - // 3. If packageSpecifier is a Node.js builtin module name, then - // 1. Return the string "node:" concatenated with packageSpecifier. - fn require_core(&self, specifier: &str) -> Result<(), ResolveError> { - if self.options.builtin_modules { - let starts_with_node = specifier.starts_with("node:"); - if starts_with_node || NODEJS_BUILTINS.binary_search(&specifier).is_ok() { - let mut specifier = specifier.to_string(); - if !starts_with_node { - specifier = format!("node:{specifier}"); - } - return Err(ResolveError::Builtin(specifier)); - } - } - Ok(()) - } - - async fn require_absolute( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure only path prefixes gets called - debug_assert!(Path::new(specifier) - .components() - .next() - .is_some_and(|c| matches!(c, Component::RootDir | Component::Prefix(_)))); - if !self.options.prefer_relative && self.options.prefer_absolute { - if let Ok(path) = - self.load_package_self_or_node_modules(cached_path, specifier, ctx).await - { - return Ok(path); - } - } - if let Some(path) = self.load_roots(specifier, ctx).await { - return Ok(path); - } - // 2. If X begins with '/' - // a. set Y to be the file system root - let path = self.cache.value(Path::new(specifier)); - if let Some(path) = self.load_as_file_or_directory(&path, specifier, ctx).await? { - return Ok(path); - } - Err(ResolveError::NotFound(specifier.to_string())) - } - - // 3. If X begins with './' or '/' or '../' - async fn require_relative( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure only relative or normal paths gets called - debug_assert!(Path::new(specifier).components().next().is_some_and(|c| matches!( - c, - Component::CurDir | Component::ParentDir | Component::Normal(_) - ))); - let path = cached_path.path().normalize_with(specifier); - let cached_path = self.cache.value(&path); - // a. LOAD_AS_FILE(Y + X) - // b. LOAD_AS_DIRECTORY(Y + X) - if let Some(path) = self.load_as_file_or_directory(&cached_path, specifier, ctx).await? { - return Ok(path); - } - // c. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - async fn require_hash( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - debug_assert_eq!(specifier.chars().next(), Some('#')); - // a. LOAD_PACKAGE_IMPORTS(X, dirname(Y)) - if let Some(path) = self.load_package_imports(cached_path, specifier, ctx).await? { - return Ok(path); - } - self.load_package_self_or_node_modules(cached_path, specifier, ctx).await - } - - async fn require_bare( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - // Make sure no other path prefixes gets called - debug_assert!(Path::new(specifier) - .components() - .next() - .is_some_and(|c| matches!(c, Component::Normal(_)))); - if self.options.prefer_relative { - if let Ok(path) = self.require_relative(cached_path, specifier, ctx).await { - return Ok(path); - } - } - self.load_package_self_or_node_modules(cached_path, specifier, ctx).await - } - - /// enhanced-resolve: ParsePlugin. - /// - /// It's allowed to escape # as \0# to avoid parsing it as fragment. - /// enhanced-resolve will try to resolve requests containing `#` as path and as fragment, - /// so it will automatically figure out if `./some#thing` means `.../some.js#thing` or `.../some#thing.js`. - /// When a # is resolved as path it will be escaped in the result. Here: `.../some\0#thing.js`. - /// - /// - async fn load_parse<'s>( - &self, - cached_path: &CachedPath, - specifier: &'s str, - ctx: &mut Ctx, - ) -> Result<(Specifier<'s>, Option), ResolveError> { - let parsed = Specifier::parse(specifier).map_err(ResolveError::Specifier)?; - ctx.with_query_fragment(parsed.query, parsed.fragment); - - // There is an edge-case where a request with # can be a path or a fragment -> try both - if ctx.fragment.is_some() && ctx.query.is_none() { - let specifier = parsed.path(); - let fragment = ctx.fragment.take().unwrap(); - let path = format!("{specifier}{fragment}"); - if let Ok(path) = self.require_without_parse(cached_path, &path, ctx).await { - return Ok((parsed, Some(path))); - } - ctx.fragment.replace(fragment); - } - Ok((parsed, None)) - } - - async fn load_package_self_or_node_modules( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result { - let (_, subpath) = Self::parse_package_specifier(specifier); - if subpath.is_empty() { - ctx.with_fully_specified(false); - } - // 5. LOAD_PACKAGE_SELF(X, dirname(Y)) - if let Some(path) = self.load_package_self(cached_path, specifier, ctx).await? { - return Ok(path); - } - // 6. LOAD_NODE_MODULES(X, dirname(Y)) - if let Some(path) = self.load_node_modules(cached_path, specifier, ctx).await? { - return Ok(path); - } - // 7. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// LOAD_PACKAGE_IMPORTS(X, DIR) - async fn load_package_imports( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. Find the closest package scope SCOPE to DIR. - // 2. If no scope was found, return. - let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? - else { - return Ok(None); - }; - // 3. If the SCOPE/package.json "imports" is null or undefined, return. - // 4. let MATCH = PACKAGE_IMPORTS_RESOLVE(X, pathToFileURL(SCOPE), ["node", "require"]) defined in the ESM resolver. - if let Some(path) = self.package_imports_resolve(specifier, &package_json, ctx).await? { - // 5. RESOLVE_ESM_MATCH(MATCH). - return self.resolve_esm_match(specifier, &path, ctx).await; - } - Ok(None) - } - - async fn load_as_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - // enhanced-resolve feature: extension_alias - if let Some(path) = self.load_extension_alias(cached_path, ctx).await? { - return Ok(Some(path)); - } - if self.options.enforce_extension.is_disabled() { - // 1. If X is a file, load X as its file extension format. STOP - if let Some(path) = self.load_alias_or_file(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - // 2. If X.js is a file, load X.js as JavaScript text. STOP - // 3. If X.json is a file, parse X.json to a JavaScript Object. STOP - // 4. If X.node is a file, load X.node as binary addon. STOP - if let Some(path) = self.load_extensions(cached_path, &self.options.extensions, ctx).await? - { - return Ok(Some(path)); - } - Ok(None) - } - - async fn load_as_directory(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - // TODO: Only package.json is supported, so warn about having other values - // Checking for empty files is needed for omitting checks on package.json - // 1. If X/package.json is a file, - if !self.options.description_files.is_empty() { - // a. Parse X/package.json, and look for "main" field. - if let Some(package_json) = - cached_path.package_json(&self.cache.fs, &self.options, ctx).await? - { - // b. If "main" is a falsy value, GOTO 2. - for main_field in package_json.main_fields(&self.options.main_fields) { - // ref https://github.com/webpack/enhanced-resolve/blob/main/lib/MainFieldPlugin.js#L66-L67 - let main_field = - if main_field.starts_with("./") || main_field.starts_with("../") { - Cow::Borrowed(main_field) - } else { - Cow::Owned(format!("./{main_field}")) - }; - - // c. let M = X + (json main field) - let main_field_path = cached_path.path().normalize_with(main_field.as_ref()); - // d. LOAD_AS_FILE(M) - let cached_path = self.cache.value(&main_field_path); - if let Ok(Some(path)) = self.load_as_file(&cached_path, ctx).await { - return Ok(Some(path)); - } - // e. LOAD_INDEX(M) - if let Some(path) = self.load_index(&cached_path, ctx).await? { - return Ok(Some(path)); - } - } - // f. LOAD_INDEX(X) DEPRECATED - // g. THROW "not found" - } - } - // 2. LOAD_INDEX(X) - self.load_index(cached_path, ctx).await - } - - async fn load_as_file_or_directory( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - if self.options.resolve_to_context { - return Ok(cached_path.is_dir(&self.cache.fs, ctx).await.then(|| cached_path.clone())); - } - if !specifier.ends_with('/') { - if let Some(path) = self.load_as_file(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - if cached_path.is_dir(&self.cache.fs, ctx).await { - if let Some(path) = self.load_as_directory(cached_path, ctx).await? { - return Ok(Some(path)); - } - } - Ok(None) - } - - async fn load_extensions( - &self, - path: &CachedPath, - extensions: &[String], - ctx: &mut Ctx, - ) -> ResolveResult { - if ctx.fully_specified { - return Ok(None); - } - let path = path.path().as_os_str(); - for extension in extensions { - let mut path_with_extension = path.to_os_string(); - path_with_extension.reserve_exact(extension.len()); - path_with_extension.push(extension); - let cached_path = self.cache.value(Path::new(&path_with_extension)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - return Ok(Some(path)); - } - } - Ok(None) - } - - async fn load_realpath(&self, cached_path: &CachedPath) -> Result { - if self.options.symlinks { - cached_path.realpath(&self.cache.fs).await.map_err(ResolveError::from) - } else { - Ok(cached_path.to_path_buf()) - } - } - - fn check_restrictions(&self, path: &Path) -> Result<(), ResolveError> { - // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/lib/RestrictionsPlugin.js#L19-L24 - fn is_inside(path: &Path, parent: &Path) -> bool { - if !path.starts_with(parent) { - return false; - } - if path.as_os_str().len() == parent.as_os_str().len() { - return true; - } - path.strip_prefix(parent).is_ok_and(|p| p == Path::new("./")) - } - for restriction in &self.options.restrictions { - match restriction { - Restriction::Path(restricted_path) => { - if !is_inside(path, restricted_path) { - return Err(ResolveError::Restriction( - path.to_path_buf(), - restricted_path.clone(), - )); - } - } - Restriction::RegExp(_) => { - return Err(ResolveError::Unimplemented("Restriction with regex")) - } - } - } - Ok(()) - } - - async fn load_index(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - for main_file in &self.options.main_files { - let main_path = cached_path.path().normalize_with(main_file); - let cached_path = self.cache.value(&main_path); - if self.options.enforce_extension.is_disabled() { - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - return Ok(Some(path)); - } - } - // 1. If X/index.js is a file, load X/index.js as JavaScript text. STOP - // 2. If X/index.json is a file, parse X/index.json to a JavaScript object. STOP - // 3. If X/index.node is a file, load X/index.node as binary addon. STOP - if let Some(path) = - self.load_extensions(&cached_path, &self.options.extensions, ctx).await? - { - return Ok(Some(path)); - } - } - Ok(None) - } - - async fn load_alias_or_file(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - if !self.options.alias_fields.is_empty() { - if let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? - { - if let Some(path) = - self.load_browser_field(cached_path, None, &package_json, ctx).await? - { - return Ok(Some(path)); - } - } - } - // enhanced-resolve: try file as alias - let alias_specifier = cached_path.path().to_string_lossy(); - if let Some(path) = - self.load_alias(cached_path, &alias_specifier, &self.options.alias, ctx).await? - { - return Ok(Some(path)); - } - if cached_path.is_file(&self.cache.fs, ctx).await { - return Ok(Some(cached_path.clone())); - } - Ok(None) - } - - async fn load_node_modules( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - #[cfg(feature = "yarn_pnp")] - { -<<<<<<< HEAD - if let Some(resolved_path) = self.load_pnp(cached_path, specifier, ctx).await? { - return Ok(Some(resolved_path)); -======= - if self.options.enable_pnp { - if let Some(resolved_path) = self.load_pnp(cached_path, specifier, ctx)? { - return Ok(Some(resolved_path)); - } ->>>>>>> origin/main - } - } - - let (package_name, subpath) = Self::parse_package_specifier(specifier); - // 1. let DIRS = NODE_MODULES_PATHS(START) - // 2. for each DIR in DIRS: - for module_name in &self.options.modules { - for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { - // Skip if /path/to/node_modules does not exist - if !cached_path.is_dir(&self.cache.fs, ctx).await { - continue; - } - - let Some(cached_path) = - self.get_module_directory(cached_path, module_name, ctx).await - else { - continue; - }; - // Optimize node_modules lookup by inspecting whether the package exists - // From LOAD_PACKAGE_EXPORTS(X, DIR) - // 1. Try to interpret X as a combination of NAME and SUBPATH where the name - // may have a @scope/ prefix and the subpath begins with a slash (`/`). - if !package_name.is_empty() { - let package_path = cached_path.path().normalize_with(package_name); - let cached_path = self.cache.value(&package_path); - // Try foo/node_modules/package_name - if cached_path.is_dir(&self.cache.fs, ctx).await { - // a. LOAD_PACKAGE_EXPORTS(X, DIR) - if let Some(path) = - self.load_package_exports(specifier, subpath, &cached_path, ctx).await? - { - return Ok(Some(path)); - } - } else { - // foo/node_modules/package_name is not a directory, so useless to check inside it - if !subpath.is_empty() { - continue; - } - // Skip if the directory lead to the scope package does not exist - // i.e. `foo/node_modules/@scope` is not a directory for `foo/node_modules/@scope/package` - if package_name.starts_with('@') { - if let Some(path) = cached_path.parent() { - if !path.is_dir(&self.cache.fs, ctx).await { - continue; - } - } - } - } - } - - // Try as file or directory for all other cases - // b. LOAD_AS_FILE(DIR/X) - // c. LOAD_AS_DIRECTORY(DIR/X) - let node_module_file = cached_path.path().normalize_with(specifier); - let cached_path = self.cache.value(&node_module_file); - if let Some(path) = - self.load_as_file_or_directory(&cached_path, specifier, ctx).await? - { - return Ok(Some(path)); - } - } - } - Ok(None) - } - - #[cfg(feature = "yarn_pnp")] -<<<<<<< HEAD - async fn load_pnp( -======= - fn find_pnp_manifest( - &self, - cached_path: &CachedPath, - ) -> Ref<'_, CachedPath, Option> { - let entry = self - .pnp_cache - .entry(cached_path.clone()) - .or_insert_with(|| pnp::find_pnp_manifest(cached_path.path()).unwrap()); - - entry.downgrade() - } - - #[cfg(feature = "yarn_pnp")] - fn load_pnp( ->>>>>>> origin/main - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> Result, ResolveError> { -<<<<<<< HEAD - let Some(pnp_manifest) = &self.options.pnp_manifest else { return Ok(None) }; - let resolution = - pnp::resolve_to_unqualified_via_manifest(pnp_manifest, specifier, cached_path.path()); - match resolution { - Ok(pnp::Resolution::Resolved(path, subpath)) => { - let cached_path = self.cache.value(&path); - let export_resolution = self - .load_package_exports( - specifier, - &subpath.unwrap_or_default(), - &cached_path, - ctx, - ) - .await?; - if export_resolution.is_some() { - return Ok(export_resolution); - } - let file_or_directory_resolution = - self.load_as_file_or_directory(&cached_path, specifier, ctx).await?; - if file_or_directory_resolution.is_some() { - return Ok(file_or_directory_resolution); - } - Err(ResolveError::NotFound(specifier.to_string())) - } -======= - let pnp_manifest = self.find_pnp_manifest(cached_path); ->>>>>>> origin/main - - if let Some(pnp_manifest) = pnp_manifest.as_ref() { - // `resolve_to_unqualified` requires a trailing slash - let mut path = cached_path.to_path_buf(); - path.push(""); - - let resolution = - pnp::resolve_to_unqualified_via_manifest(pnp_manifest, specifier, path); - - match resolution { - Ok(pnp::Resolution::Resolved(path, subpath)) => { - let cached_path = self.cache.value(&path); - - let export_resolution = self.load_package_self(&cached_path, specifier, ctx)?; - // can be found in pnp cached folder - if export_resolution.is_some() { - return Ok(export_resolution); - } - - let inner_request = subpath.map_or_else( - || ".".to_string(), - |mut p| { - p.insert_str(0, "./"); - p - }, - ); - let inner_resolver = self.clone_with_options(self.options().clone()); - - // try as file or directory `path` in the pnp folder - let Ok(inner_resolution) = inner_resolver.resolve(&path, &inner_request) else { - return Err(ResolveError::NotFound(specifier.to_string())); - }; - - Ok(Some(self.cache.value(inner_resolution.path()))) - } - - Ok(pnp::Resolution::Skipped) => Ok(None), - Err(_) => Err(ResolveError::NotFound(specifier.to_string())), - } - } else { - Ok(None) - } - } - - async fn get_module_directory( - &self, - cached_path: &CachedPath, - module_name: &str, - ctx: &mut Ctx, - ) -> Option { - if module_name == "node_modules" { - cached_path.cached_node_modules(&self.cache, ctx).await - } else if cached_path.path().components().next_back() - == Some(Component::Normal(OsStr::new(module_name))) - { - Some(cached_path.clone()) - } else { - cached_path.module_directory(module_name, &self.cache, ctx).await - } - } - - async fn load_package_exports( - &self, - specifier: &str, - subpath: &str, - cached_path: &CachedPath, - ctx: &mut Ctx, - ) -> ResolveResult { - // 2. If X does not match this pattern or DIR/NAME/package.json is not a file, - // return. - let Some(package_json) = - cached_path.package_json(&self.cache.fs, &self.options, ctx).await? - else { - return Ok(None); - }; - // 3. Parse DIR/NAME/package.json, and look for "exports" field. - // 4. If "exports" is null or undefined, return. - // 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(DIR/NAME), "." + SUBPATH, - // `package.json` "exports", ["node", "require"]) defined in the ESM resolver. - // Note: The subpath is not prepended with a dot on purpose - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self - .package_exports_resolve(cached_path.path(), &format!(".{subpath}"), exports, ctx) - .await? - { - // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &path, ctx).await; - }; - } - Ok(None) - } - - async fn load_package_self( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. Find the closest package scope SCOPE to DIR. - // 2. If no scope was found, return. - let Some(package_json) = - cached_path.find_package_json(&self.cache.fs, &self.options, ctx).await? - else { - return Ok(None); - }; - // 3. If the SCOPE/package.json "exports" is null or undefined, return. - // 4. If the SCOPE/package.json "name" is not the first segment of X, return. - if let Some(subpath) = package_json - .name - .as_ref() - .and_then(|package_name| Self::strip_package_name(specifier, package_name)) - { - // 5. let MATCH = PACKAGE_EXPORTS_RESOLVE(pathToFileURL(SCOPE), - // "." + X.slice("name".length), `package.json` "exports", ["node", "require"]) - // defined in the ESM resolver. - let package_url = package_json.directory(); - // Note: The subpath is not prepended with a dot on purpose - // because `package_exports_resolve` matches subpath without the leading dot. - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(cached_path) = self - .package_exports_resolve(package_url, &format!(".{subpath}"), exports, ctx) - .await? - { - // 6. RESOLVE_ESM_MATCH(MATCH) - return self.resolve_esm_match(specifier, &cached_path, ctx).await; - } - } - } - self.load_browser_field(cached_path, Some(specifier), &package_json, ctx).await - } - - /// RESOLVE_ESM_MATCH(MATCH) - async fn resolve_esm_match( - &self, - specifier: &str, - cached_path: &CachedPath, - ctx: &mut Ctx, - ) -> ResolveResult { - // 1. let RESOLVED_PATH = fileURLToPath(MATCH) - // 2. If the file at RESOLVED_PATH exists, load RESOLVED_PATH as its extension format. STOP - // - // Non-compliant ESM can result in a directory, so directory is tried as well. - if let Some(path) = self.load_as_file_or_directory(cached_path, "", ctx).await? { - return Ok(Some(path)); - } - // 3. THROW "not found" - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// enhanced-resolve: AliasFieldPlugin for [ResolveOptions::alias_fields] - async fn load_browser_field( - &self, - cached_path: &CachedPath, - module_specifier: Option<&str>, - package_json: &PackageJson, - ctx: &mut Ctx, - ) -> ResolveResult { - let path = cached_path.path(); - let Some(new_specifier) = package_json.resolve_browser_field( - path, - module_specifier, - &self.options.alias_fields, - )? - else { - return Ok(None); - }; - // Abort when resolving recursive module - if module_specifier.is_some_and(|s| s == new_specifier) { - return Ok(None); - } - if ctx.resolving_alias.as_ref().is_some_and(|s| s == new_specifier) { - // Complete when resolving to self `{"./a.js": "./a.js"}` - if new_specifier.strip_prefix("./").filter(|s| path.ends_with(Path::new(s))).is_some() { - return if cached_path.is_file(&self.cache.fs, ctx).await { - Ok(Some(cached_path.clone())) - } else { - Err(ResolveError::NotFound(new_specifier.to_string())) - }; - } - return Err(ResolveError::Recursion); - } - ctx.with_resolving_alias(new_specifier.to_string()); - ctx.with_fully_specified(false); - let cached_path = self.cache.value(package_json.directory()); - self.require(&cached_path, new_specifier, ctx).await.map(Some) - } - - /// enhanced-resolve: AliasPlugin for [ResolveOptions::alias] and [ResolveOptions::fallback]. - async fn load_alias( - &self, - cached_path: &CachedPath, - specifier: &str, - aliases: &Alias, - ctx: &mut Ctx, - ) -> ResolveResult { - for (alias_key_raw, specifiers) in aliases { - let alias_key = if let Some(alias_key) = alias_key_raw.strip_suffix('$') { - if alias_key != specifier { - continue; - } - alias_key - } else { - let strip_package_name = Self::strip_package_name(specifier, alias_key_raw); - if strip_package_name.is_none() { - continue; - } - alias_key_raw - }; - // It should stop resolving when all of the tried alias values - // failed to resolve. - // - let mut should_stop = false; - for r in specifiers { - match r { - AliasValue::Path(alias_value) => { - if let Some(path) = self - .load_alias_value( - cached_path, - alias_key, - alias_value, - specifier, - ctx, - &mut should_stop, - ) - .await? - { - return Ok(Some(path)); - } - } - AliasValue::Ignore => { - let path = cached_path.path().normalize_with(alias_key); - return Err(ResolveError::Ignored(path)); - } - } - } - if should_stop { - return Err(ResolveError::MatchedAliasNotFound( - specifier.to_string(), - alias_key.to_string(), - )); - } - } - Ok(None) - } - - async fn load_alias_value( - &self, - cached_path: &CachedPath, - alias_key: &str, - alias_value: &str, - request: &str, - ctx: &mut Ctx, - should_stop: &mut bool, - ) -> ResolveResult { - if request != alias_value - && !request.strip_prefix(alias_value).is_some_and(|prefix| prefix.starts_with('/')) - { - let tail = &request[alias_key.len()..]; - - let new_specifier = if tail.is_empty() { - Cow::Borrowed(alias_value) - } else { - let alias_path = Path::new(alias_value).normalize(); - // Must not append anything to alias_value if it is a file. - let alias_value_cached_path = self.cache.value(&alias_path); - if alias_value_cached_path.is_file(&self.cache.fs, ctx).await { - return Ok(None); - } - - // Remove the leading slash so the final path is concatenated. - let tail = tail.trim_start_matches(SLASH_START); - if tail.is_empty() { - Cow::Borrowed(alias_value) - } else { - let normalized = alias_path.normalize_with(tail); - Cow::Owned(normalized.to_string_lossy().to_string()) - } - }; - - *should_stop = true; - ctx.with_fully_specified(false); - return match self.require(cached_path, new_specifier.as_ref(), ctx).await { - Err(ResolveError::NotFound(_) | ResolveError::MatchedAliasNotFound(_, _)) => { - Ok(None) - } - Ok(path) => return Ok(Some(path)), - Err(err) => return Err(err), - }; - } - Ok(None) - } - - /// Given an extension alias map `{".js": [".ts", ".js"]}`, - /// load the mapping instead of the provided extension - /// - /// This is an enhanced-resolve feature - /// - /// # Errors - /// - /// * [ResolveError::ExtensionAlias]: When all of the aliased extensions are not found - async fn load_extension_alias(&self, cached_path: &CachedPath, ctx: &mut Ctx) -> ResolveResult { - if self.options.extension_alias.is_empty() { - return Ok(None); - } - let Some(path_extension) = cached_path.path().extension() else { - return Ok(None); - }; - let Some((_, extensions)) = self - .options - .extension_alias - .iter() - .find(|(ext, _)| OsStr::new(ext.trim_start_matches('.')) == path_extension) - else { - return Ok(None); - }; - let path = cached_path.path(); - let Some(filename) = path.file_name() else { return Ok(None) }; - let path_without_extension = path.with_extension(""); - - ctx.with_fully_specified(true); - for extension in extensions { - let mut path_with_extension = path_without_extension.clone().into_os_string(); - path_with_extension.reserve_exact(extension.len()); - path_with_extension.push(extension); - let cached_path = self.cache.value(Path::new(&path_with_extension)); - if let Some(path) = self.load_alias_or_file(&cached_path, ctx).await? { - ctx.with_fully_specified(false); - return Ok(Some(path)); - } - } - // Bail if path is module directory such as `ipaddr.js` - if !cached_path.is_file(&self.cache.fs, ctx).await { - ctx.with_fully_specified(false); - return Ok(None); - } - // Create a meaningful error message. - let dir = path.parent().unwrap().to_path_buf(); - let filename_without_extension = Path::new(filename).with_extension(""); - let filename_without_extension = filename_without_extension.to_string_lossy(); - let files = extensions - .iter() - .map(|ext| format!("{filename_without_extension}{ext}")) - .collect::>() - .join(","); - Err(ResolveError::ExtensionAlias(filename.to_string_lossy().to_string(), files, dir)) - } - - /// enhanced-resolve: RootsPlugin - /// - /// A list of directories where requests of server-relative URLs (starting with '/') are resolved, - /// defaults to context configuration option. - /// - /// On non-Windows systems these requests are resolved as an absolute path first. - async fn load_roots(&self, specifier: &str, ctx: &mut Ctx) -> Option { - if self.options.roots.is_empty() { - return None; - } - if let Some(specifier) = specifier.strip_prefix(SLASH_START) { - for root in &self.options.roots { - let cached_path = self.cache.value(root); - if let Ok(path) = self.require_relative(&cached_path, specifier, ctx).await { - return Some(path); - } - } - } - None - } - - async fn load_tsconfig_paths( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - let Some(tsconfig_options) = &self.options.tsconfig else { - return Ok(None); - }; - let tsconfig = self - .load_tsconfig( - /* root */ true, - &tsconfig_options.config_file, - &tsconfig_options.references, - ) - .await?; - let paths = tsconfig.resolve(cached_path.path(), specifier); - for path in paths { - let cached_path = self.cache.value(&path); - if let Ok(path) = self.require_relative(&cached_path, ".", ctx).await { - return Ok(Some(path)); - } - } - Ok(None) - } - - fn load_tsconfig<'a>( - &'a self, - root: bool, - path: &'a Path, - references: &'a TsconfigReferences, - ) -> BoxFuture<'a, Result, ResolveError>> { - let fut = async move { - self.cache - .tsconfig(root, path, |mut tsconfig| async move { - let directory = self.cache.value(tsconfig.directory()); - tracing::trace!(tsconfig = ?tsconfig, "load_tsconfig"); - - // Extend tsconfig - if let Some(extends) = &tsconfig.extends { - let extended_tsconfig_paths = match extends { - ExtendsField::Single(s) => { - vec![ - self.get_extended_tsconfig_path(&directory, &tsconfig, s) - .await?, - ] - } - ExtendsField::Multiple(specifiers) => { - try_join_all(specifiers.iter().map(|s| { - self.get_extended_tsconfig_path(&directory, &tsconfig, s) - })) - .await? - } - }; - for extended_tsconfig_path in extended_tsconfig_paths { - let extended_tsconfig = self - .load_tsconfig( - /* root */ false, - &extended_tsconfig_path, - &TsconfigReferences::Disabled, - ) - .await?; - tsconfig.extend_tsconfig(&extended_tsconfig); - } - } - - // Load project references - match references { - TsconfigReferences::Disabled => { - tsconfig.references.drain(..); - } - TsconfigReferences::Auto => {} - TsconfigReferences::Paths(paths) => { - tsconfig.references = paths - .iter() - .map(|path| ProjectReference { path: path.clone(), tsconfig: None }) - .collect(); - } - } - if !tsconfig.references.is_empty() { - let directory = tsconfig.directory().to_path_buf(); - for reference in &mut tsconfig.references { - let reference_tsconfig_path = directory.normalize_with(&reference.path); - let tsconfig = self - .cache - .tsconfig( - /* root */ true, - &reference_tsconfig_path, - |reference_tsconfig| async { - if reference_tsconfig.path == tsconfig.path { - return Err(ResolveError::TsconfigSelfReference( - reference_tsconfig.path.clone(), - )); - } - Ok(reference_tsconfig) - }, - ) - .await?; - reference.tsconfig.replace(tsconfig); - } - } - - Ok(tsconfig) - }) - .await - }; - Box::pin(fut) - } - - async fn get_extended_tsconfig_path( - &self, - directory: &CachedPath, - tsconfig: &TsConfig, - specifier: &str, - ) -> Result { - match specifier.as_bytes().first() { - None => Err(ResolveError::Specifier(SpecifierError::Empty(specifier.to_string()))), - Some(b'/') => Ok(PathBuf::from(specifier)), - Some(b'.') => Ok(tsconfig.directory().normalize_with(specifier)), - _ => self - .clone_with_options(ResolveOptions { - description_files: vec![], - extensions: vec![".json".into()], - main_files: vec!["tsconfig.json".into()], - ..ResolveOptions::default() - }) - .load_package_self_or_node_modules(directory, specifier, &mut Ctx::default()) - .await - .map(|p| p.to_path_buf()) - .map_err(|err| match err { - ResolveError::NotFound(_) => { - ResolveError::TsconfigNotFound(PathBuf::from(specifier)) - } - _ => err, - }), - } - } - - /// PACKAGE_RESOLVE(packageSpecifier, parentURL) - async fn package_resolve( - &self, - cached_path: &CachedPath, - specifier: &str, - ctx: &mut Ctx, - ) -> ResolveResult { - let (package_name, subpath) = Self::parse_package_specifier(specifier); - - // 3. If packageSpecifier is a Node.js builtin module name, then - // 1. Return the string "node:" concatenated with packageSpecifier. - self.require_core(package_name)?; - - // 11. While parentURL is not the file system root, - for module_name in &self.options.modules { - for cached_path in std::iter::successors(Some(cached_path), |p| p.parent()) { - // 1. Let packageURL be the URL resolution of "node_modules/" concatenated with packageSpecifier, relative to parentURL. - let Some(cached_path) = - self.get_module_directory(cached_path, module_name, ctx).await - else { - continue; - }; - // 2. Set parentURL to the parent folder URL of parentURL. - let package_path = cached_path.path().normalize_with(package_name); - let cached_path = self.cache.value(&package_path); - // 3. If the folder at packageURL does not exist, then - // 1. Continue the next loop iteration. - if cached_path.is_dir(&self.cache.fs, ctx).await { - // 4. Let pjson be the result of READ_PACKAGE_JSON(packageURL). - if let Some(package_json) = - cached_path.package_json(&self.cache.fs, &self.options, ctx).await? - { - // 5. If pjson is not null and pjson.exports is not null or undefined, then - // 1. Return the result of PACKAGE_EXPORTS_RESOLVE(packageURL, packageSubpath, pjson.exports, defaultConditions). - for exports in package_json.exports_fields(&self.options.exports_fields) { - if let Some(path) = self - .package_exports_resolve( - cached_path.path(), - &format!(".{subpath}"), - exports, - ctx, - ) - .await? - { - return Ok(Some(path)); - } - } - // 6. Otherwise, if packageSubpath is equal to ".", then - if subpath == "." { - // 1. If pjson.main is a string, then - for main_field in package_json.main_fields(&self.options.main_fields) { - // 1. Return the URL resolution of main in packageURL. - let path = cached_path.path().normalize_with(main_field); - let cached_path = self.cache.value(&path); - if cached_path.is_file(&self.cache.fs, ctx).await { - return Ok(Some(cached_path)); - } - } - } - } - let subpath = format!(".{subpath}"); - ctx.with_fully_specified(false); - return self.require(&cached_path, &subpath, ctx).await.map(Some); - } - } - } - - Err(ResolveError::NotFound(specifier.to_string())) - } - - /// PACKAGE_EXPORTS_RESOLVE(packageURL, subpath, exports, conditions) - fn package_exports_resolve<'a>( - &'a self, - package_url: &'a Path, - subpath: &'a str, - exports: &'a JSONValue, - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, ResolveResult> { - let fut = async move { - let conditions = &self.options.condition_names; - // 1. If exports is an Object with both a key starting with "." and a key not starting with ".", throw an Invalid Package Configuration error. - if let JSONValue::Object(map) = exports { - let mut has_dot = false; - let mut without_dot = false; - for key in map.keys() { - let starts_with_dot_or_hash = key.starts_with(['.', '#']); - has_dot = has_dot || starts_with_dot_or_hash; - without_dot = without_dot || !starts_with_dot_or_hash; - if has_dot && without_dot { - return Err(ResolveError::InvalidPackageConfig( - package_url.join("package.json"), - )); - } - } - } - // 2. If subpath is equal to ".", then - // Note: subpath is not prepended with a dot when passed in. - if subpath == "." { - // enhanced-resolve appends query and fragment when resolving exports field - // https://github.com/webpack/enhanced-resolve/blob/a998c7d218b7a9ec2461fc4fddd1ad5dd7687485/lib/ExportsFieldPlugin.js#L57-L62 - // This is only need when querying the main export, otherwise ctx is passed through. - if ctx.query.is_some() || ctx.fragment.is_some() { - let query = ctx.query.clone().unwrap_or_default(); - let fragment = ctx.fragment.clone().unwrap_or_default(); - return Err(ResolveError::PackagePathNotExported( - format!("./{}{query}{fragment}", subpath.trim_start_matches('.')), - package_url.join("package.json"), - )); - } - // 1. Let mainExport be undefined. - let main_export = match exports { - // 2. If exports is a String or Array, or an Object containing no keys starting with ".", then - JSONValue::String(_) | JSONValue::Array(_) => { - // 1. Set mainExport to exports. - Some(exports) - } - // 3. Otherwise if exports is an Object containing a "." property, then - JSONValue::Object(map) => { - // 1. Set mainExport to exports["."]. - map.get(".").map_or_else( - || { - if map - .keys() - .any(|key| key.starts_with("./") || key.starts_with('#')) - { - None - } else { - Some(exports) - } - }, - Some, - ) - } - _ => None, - }; - // 4. If mainExport is not undefined, then - if let Some(main_export) = main_export { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, mainExport, null, false, conditions). - let resolved = self - .package_target_resolve( - package_url, - ".", - main_export, - None, - /* is_imports */ false, - conditions, - ctx, - ) - .await?; - // 2. If resolved is not null or undefined, return resolved. - if let Some(path) = resolved { - return Ok(Some(path)); - } - } - } - // 3. Otherwise, if exports is an Object and all keys of exports start with ".", then - if let JSONValue::Object(exports) = exports { - // 1. Let matchKey be the string "./" concatenated with subpath. - // Note: `package_imports_exports_resolve` does not require the leading dot. - let match_key = &subpath; - // 2. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( matchKey, exports, packageURL, false, conditions). - if let Some(path) = self - .package_imports_exports_resolve( - match_key, - exports, - package_url, - /* is_imports */ false, - conditions, - ctx, - ) - .await? - { - // 3. If resolved is not null or undefined, return resolved. - return Ok(Some(path)); - } - } - // 4. Throw a Package Path Not Exported error. - Err(ResolveError::PackagePathNotExported( - subpath.to_string(), - package_url.join("package.json"), - )) - }; - Box::pin(fut) - } - - /// PACKAGE_IMPORTS_RESOLVE(specifier, parentURL, conditions) - async fn package_imports_resolve( - &self, - specifier: &str, - package_json: &PackageJson, - ctx: &mut Ctx, - ) -> Result, ResolveError> { - // 1. Assert: specifier begins with "#". - debug_assert!(specifier.starts_with('#'), "{specifier}"); - // 2. If specifier is exactly equal to "#" or starts with "#/", then - // 1. Throw an Invalid Module Specifier error. - // 3. Let packageURL be the result of LOOKUP_PACKAGE_SCOPE(parentURL). - // 4. If packageURL is not null, then - - // 1. Let pjson be the result of READ_PACKAGE_JSON(packageURL). - // 2. If pjson.imports is a non-null Object, then - - // 1. Let resolved be the result of PACKAGE_IMPORTS_EXPORTS_RESOLVE( specifier, pjson.imports, packageURL, true, conditions). - let mut has_imports = false; - for imports in package_json.imports_fields(&self.options.imports_fields) { - if !has_imports { - has_imports = true; - // TODO: fill in test case for this case - if specifier == "#" || specifier.starts_with("#/") { - return Err(ResolveError::InvalidModuleSpecifier( - specifier.to_string(), - package_json.path.clone(), - )); - } - } - if let Some(path) = self - .package_imports_exports_resolve( - specifier, - imports, - package_json.directory(), - /* is_imports */ true, - &self.options.condition_names, - ctx, - ) - .await? - { - // 2. If resolved is not null or undefined, return resolved. - return Ok(Some(path)); - } - } - - // 5. Throw a Package Import Not Defined error. - if has_imports { - Err(ResolveError::PackageImportNotDefined( - specifier.to_string(), - package_json.path.clone(), - )) - } else { - Ok(None) - } - } - - /// PACKAGE_IMPORTS_EXPORTS_RESOLVE(matchKey, matchObj, packageURL, isImports, conditions) - async fn package_imports_exports_resolve( - &self, - match_key: &str, - match_obj: &JSONMap, - package_url: &Path, - is_imports: bool, - conditions: &[String], - ctx: &mut Ctx, - ) -> ResolveResult { - // enhanced-resolve behaves differently, it throws - // Error: CachedPath to directories is not possible with the exports field (specifier was ./dist/) - if match_key.ends_with('/') { - return Ok(None); - } - // 1. If matchKey is a key of matchObj and does not contain "*", then - if !match_key.contains('*') { - // 1. Let target be the value of matchObj[matchKey]. - if let Some(target) = match_obj.get(match_key) { - // 2. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, null, isImports, conditions). - return self - .package_target_resolve( - package_url, - match_key, - target, - None, - is_imports, - conditions, - ctx, - ) - .await; - } - } - - let mut best_target = None; - let mut best_match = ""; - let mut best_key = ""; - // 2. Let expansionKeys be the list of keys of matchObj containing only a single "*", sorted by the sorting function PATTERN_KEY_COMPARE which orders in descending order of specificity. - // 3. For each key expansionKey in expansionKeys, do - for (expansion_key, target) in match_obj { - if expansion_key.starts_with("./") || expansion_key.starts_with('#') { - // 1. Let patternBase be the substring of expansionKey up to but excluding the first "*" character. - if let Some((pattern_base, pattern_trailer)) = expansion_key.split_once('*') { - // 2. If matchKey starts with but is not equal to patternBase, then - if match_key.starts_with(pattern_base) - // 1. Let patternTrailer be the substring of expansionKey from the index after the first "*" character. - && !pattern_trailer.contains('*') - // 2. If patternTrailer has zero length, or if matchKey ends with patternTrailer and the length of matchKey is greater than or equal to the length of expansionKey, then - && (pattern_trailer.is_empty() - || (match_key.len() >= expansion_key.len() - && match_key.ends_with(pattern_trailer))) - && Self::pattern_key_compare(best_key, expansion_key).is_gt() - { - // 1. Let target be the value of matchObj[expansionKey]. - best_target = Some(target); - // 2. Let patternMatch be the substring of matchKey starting at the index of the length of patternBase up to the length of matchKey minus the length of patternTrailer. - best_match = - &match_key[pattern_base.len()..match_key.len() - pattern_trailer.len()]; - best_key = expansion_key; - } - } else if expansion_key.ends_with('/') - && match_key.starts_with(expansion_key) - && Self::pattern_key_compare(best_key, expansion_key).is_gt() - { - // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. - best_target = Some(target); - best_match = &match_key[expansion_key.len()..]; - best_key = expansion_key; - } - } - } - if let Some(best_target) = best_target { - // 3. Return the result of PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions). - return self - .package_target_resolve( - package_url, - best_key, - best_target, - Some(best_match), - is_imports, - conditions, - ctx, - ) - .await; - } - // 4. Return null. - Ok(None) - } - - /// PACKAGE_TARGET_RESOLVE(packageURL, target, patternMatch, isImports, conditions) - #[allow(clippy::too_many_arguments)] - fn package_target_resolve<'a>( - &'a self, - package_url: &'a Path, - target_key: &'a str, - target: &'a JSONValue, - pattern_match: Option<&'a str>, - is_imports: bool, - conditions: &'a [String], - ctx: &'a mut Ctx, - ) -> BoxFuture<'a, ResolveResult> { - let fut = async move { - fn normalize_string_target<'a>( - target_key: &'a str, - target: &'a str, - pattern_match: Option<&'a str>, - package_url: &Path, - ) -> Result, ResolveError> { - let target = if let Some(pattern_match) = pattern_match { - if !target_key.contains('*') && !target.contains('*') { - // enhanced-resolve behaviour - // TODO: [DEP0148] DeprecationWarning: Use of deprecated folder mapping "./dist/" in the "exports" field module resolution of the package at xxx/package.json. - if target_key.ends_with('/') && target.ends_with('/') { - Cow::Owned(format!("{target}{pattern_match}")) - } else { - return Err(ResolveError::InvalidPackageConfigDirectory( - package_url.join("package.json"), - )); - } - } else { - Cow::Owned(target.replace('*', pattern_match)) - } - } else { - Cow::Borrowed(target) - }; - Ok(target) - } - - match target { - // 1. If target is a String, then - JSONValue::String(target) => { - // 1. If target does not start with "./", then - if !target.starts_with("./") { - // 1. If isImports is false, or if target starts with "../" or "/", or if target is a valid URL, then - if !is_imports || target.starts_with("../") || target.starts_with('/') { - // 1. Throw an Invalid Package Target error. - return Err(ResolveError::InvalidPackageTarget( - target.to_string(), - target_key.to_string(), - package_url.join("package.json"), - )); - } - // 2. If patternMatch is a String, then - // 1. Return PACKAGE_RESOLVE(target with every instance of "*" replaced by patternMatch, packageURL + "/"). - let target = normalize_string_target( - target_key, - target, - pattern_match, - package_url, - )?; - let package_url = self.cache.value(package_url); - // // 3. Return PACKAGE_RESOLVE(target, packageURL + "/"). - return self.package_resolve(&package_url, &target, ctx).await; - } - - // 2. If target split on "/" or "\" contains any "", ".", "..", or "node_modules" segments after the first "." segment, case insensitive and including percent encoded variants, throw an Invalid Package Target error. - // 3. Let resolvedTarget be the URL resolution of the concatenation of packageURL and target. - // 4. Assert: resolvedTarget is contained in packageURL. - // 5. If patternMatch is null, then - let target = - normalize_string_target(target_key, target, pattern_match, package_url)?; - if Path::new(target.as_ref()).is_invalid_exports_target() { - return Err(ResolveError::InvalidPackageTarget( - target.to_string(), - target_key.to_string(), - package_url.join("package.json"), - )); - } - let resolved_target = package_url.normalize_with(target.as_ref()); - // 6. If patternMatch split on "/" or "\" contains any "", ".", "..", or "node_modules" segments, case insensitive and including percent encoded variants, throw an Invalid Module Specifier error. - // 7. Return the URL resolution of resolvedTarget with every instance of "*" replaced with patternMatch. - let value = self.cache.value(&resolved_target); - return Ok(Some(value)); - } - // 2. Otherwise, if target is a non-null Object, then - JSONValue::Object(target) => { - // 1. If exports contains any index property keys, as defined in ECMA-262 6.1.7 Array Index, throw an Invalid Package Configuration error. - // 2. For each property p of target, in object insertion order as, - for (key, target_value) in target { - // 1. If p equals "default" or conditions contains an entry for p, then - if key == "default" || conditions.contains(key) { - // 1. Let targetValue be the value of the p property in target. - // 2. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions). - let resolved = self - .package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ) - .await; - // 3. If resolved is equal to undefined, continue the loop. - if let Some(path) = resolved? { - // 4. Return resolved. - return Ok(Some(path)); - } - } - } - // 3. Return undefined. - return Ok(None); - } - // 3. Otherwise, if target is an Array, then - JSONValue::Array(targets) => { - // 1. If _target.length is zero, return null. - if targets.is_empty() { - // Note: return PackagePathNotExported has the same effect as return because there are no matches. - return Err(ResolveError::PackagePathNotExported( - pattern_match.unwrap_or(".").to_string(), - package_url.join("package.json"), - )); - } - // 2. For each item targetValue in target, do - for (i, target_value) in targets.iter().enumerate() { - // 1. Let resolved be the result of PACKAGE_TARGET_RESOLVE( packageURL, targetValue, patternMatch, isImports, conditions), continuing the loop on any Invalid Package Target error. - let resolved = self - .package_target_resolve( - package_url, - target_key, - target_value, - pattern_match, - is_imports, - conditions, - ctx, - ) - .await; - - if resolved.is_err() && i == targets.len() { - return resolved; - } - - // 2. If resolved is undefined, continue the loop. - if let Ok(Some(path)) = resolved { - // 3. Return resolved. - return Ok(Some(path)); - } - } - // 3. Return or throw the last fallback resolution null return or error. - // Note: see `resolved.is_err() && i == targets.len()` - } - _ => {} - } - // 4. Otherwise, if target is null, return null. - Ok(None) - // 5. Otherwise throw an Invalid Package Target error. - }; - Box::pin(fut) - } - - // Returns (module, subpath) - // https://github.com/nodejs/node/blob/8f0f17e1e3b6c4e58ce748e06343c5304062c491/lib/internal/modules/esm/resolve.js#L688 - fn parse_package_specifier(specifier: &str) -> (&str, &str) { - let mut separator_index = specifier.as_bytes().iter().position(|b| *b == b'/'); - // let mut valid_package_name = true; - // let mut is_scoped = false; - if specifier.starts_with('@') { - // is_scoped = true; - if separator_index.is_none() || specifier.is_empty() { - // valid_package_name = false; - } else if let Some(index) = &separator_index { - separator_index = specifier[*index + 1..] - .as_bytes() - .iter() - .position(|b| *b == b'/') - .map(|i| i + *index + 1); - } - } - let package_name = - separator_index.map_or(specifier, |separator_index| &specifier[..separator_index]); - - // TODO: https://github.com/nodejs/node/blob/8f0f17e1e3b6c4e58ce748e06343c5304062c491/lib/internal/modules/esm/resolve.js#L705C1-L714C1 - // Package name cannot have leading . and cannot have percent-encoding or - // \\ separators. - // if (RegExpPrototypeExec(invalidPackageNameRegEx, packageName) !== null) - // validPackageName = false; - - // if (!validPackageName) { - // throw new ERR_INVALID_MODULE_SPECIFIER( - // specifier, 'is not a valid package name', fileURLToPath(base)); - // } - let package_subpath = - separator_index.map_or("", |separator_index| &specifier[separator_index..]); - (package_name, package_subpath) - } - - /// PATTERN_KEY_COMPARE(keyA, keyB) - fn pattern_key_compare(key_a: &str, key_b: &str) -> Ordering { - if key_a.is_empty() { - return Ordering::Greater; - } - // 1. Assert: keyA ends with "/" or contains only a single "*". - debug_assert!(key_a.ends_with('/') || key_a.match_indices('*').count() == 1, "{key_a}"); - // 2. Assert: keyB ends with "/" or contains only a single "*". - debug_assert!(key_b.ends_with('/') || key_b.match_indices('*').count() == 1, "{key_b}"); - // 3. Let baseLengthA be the index of "*" in keyA plus one, if keyA contains "*", or the length of keyA otherwise. - let a_pos = key_a.chars().position(|c| c == '*'); - let base_length_a = a_pos.map_or(key_a.len(), |p| p + 1); - // 4. Let baseLengthB be the index of "*" in keyB plus one, if keyB contains "*", or the length of keyB otherwise. - let b_pos = key_b.chars().position(|c| c == '*'); - let base_length_b = b_pos.map_or(key_b.len(), |p| p + 1); - // 5. If baseLengthA is greater than baseLengthB, return -1. - if base_length_a > base_length_b { - return Ordering::Less; - } - // 6. If baseLengthB is greater than baseLengthA, return 1. - if base_length_b > base_length_a { - return Ordering::Greater; - } - // 7. If keyA does not contain "*", return 1. - if !key_a.contains('*') { - return Ordering::Greater; - } - // 8. If keyB does not contain "*", return -1. - if !key_b.contains('*') { - return Ordering::Less; - } - // 9. If the length of keyA is greater than the length of keyB, return -1. - if key_a.len() > key_b.len() { - return Ordering::Less; - } - // 10. If the length of keyB is greater than the length of keyA, return 1. - if key_b.len() > key_a.len() { - return Ordering::Greater; - } - // 11. Return 0. - Ordering::Equal - } - - fn strip_package_name<'a>(specifier: &'a str, package_name: &'a str) -> Option<&'a str> { - specifier - .strip_prefix(package_name) - .filter(|tail| tail.is_empty() || tail.starts_with(SLASH_START)) - } -} diff --git a/src/tests/incorrect_description_file.rs.orig b/src/tests/incorrect_description_file.rs.orig deleted file mode 100644 index c6b93a03..00000000 --- a/src/tests/incorrect_description_file.rs.orig +++ /dev/null @@ -1,78 +0,0 @@ -//! - -use rustc_hash::FxHashSet; - -use crate::{JSONError, Resolution, ResolveContext, ResolveError, ResolveOptions, Resolver}; - -// should not resolve main in incorrect description file #1 -#[tokio::test] -async fn incorrect_description_file_1() { - let f = super::fixture().join("incorrect-package"); - let mut ctx = ResolveContext::default(); -<<<<<<< HEAD - let resolution = Resolver::default().resolve_with_context(f.join("pack1"), ".", &mut ctx).await; - let error = ResolveError::JSON(JSONError { -======= - let resolution = Resolver::default().resolve_with_context(f.join("pack1"), ".", &mut ctx); - let _error = ResolveError::JSON(JSONError { ->>>>>>> origin/main - path: f.join("pack1/package.json"), - message: String::from("EOF while parsing a value at line 3 column 0"), - line: 3, - column: 0, - content: None, - }); - - assert!(matches!(resolution, Err(ResolveError::JSON(_)))); - assert_eq!( - ctx.file_dependencies, - FxHashSet::from_iter([f.join("pack1"), f.join("pack1/package.json")]) - ); - assert!(!ctx.missing_dependencies.is_empty()); -} - -// should not resolve main in incorrect description file #2 -#[tokio::test] -async fn incorrect_description_file_2() { - let f = super::fixture().join("incorrect-package"); -<<<<<<< HEAD - let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; - let error = ResolveError::JSON(JSONError { -======= - let resolution = Resolver::default().resolve(f.join("pack2"), "."); - let _error = ResolveError::JSON(JSONError { ->>>>>>> origin/main - path: f.join("pack2/package.json"), - message: String::from("EOF while parsing a value at line 1 column 0"), - line: 1, - column: 0, - content: Some("".to_string()), - }); - assert!(matches!(resolution, Err(ResolveError::JSON(_)))); -} - -// should not resolve main in incorrect description file #3 -#[tokio::test] -async fn incorrect_description_file_3() { - let f = super::fixture().join("incorrect-package"); - let resolution = Resolver::default().resolve(f.join("pack2"), ".").await; - assert!(resolution.is_err()); -} - -// `enhanced_resolve` does not have this test case -#[tokio::test] -async fn no_description_file() { - let f = super::fixture_root().join("enhanced_resolve"); - - // has description file - let resolver = Resolver::default(); - assert_eq!( - resolver.resolve(&f, ".").await.map(Resolution::into_path_buf), - Ok(f.join("lib/index.js")) - ); - - // without description file - let resolver = - Resolver::new(ResolveOptions { description_files: vec![], ..ResolveOptions::default() }); - assert_eq!(resolver.resolve(&f, ".").await, Err(ResolveError::NotFound(".".into()))); -} diff --git a/src/tests/simple.rs.orig b/src/tests/simple.rs.orig deleted file mode 100644 index b1ce186f..00000000 --- a/src/tests/simple.rs.orig +++ /dev/null @@ -1,84 +0,0 @@ -//! - -use std::env; - -use crate::Resolver; - -<<<<<<< HEAD -#[tokio::test] -async fn simple() { -======= -#[test] -fn resolve_abs_main() { - let resolver = Resolver::default(); - let dirname = env::current_dir().unwrap().join("fixtures"); - let f = dirname.join("invalid/main.js"); - // a's main field id `/dist/index.js` - let resolution = resolver.resolve(&f, "a").unwrap(); - - assert_eq!(resolution.path(), dirname.join("invalid/node_modules/a/dist/index.js")); -} - -#[test] -fn simple() { ->>>>>>> origin/main - // mimic `enhanced-resolve/test/simple.test.js` - let dirname = env::current_dir().unwrap().join("fixtures"); - let f = dirname.join("enhanced_resolve/test"); - - let resolver = Resolver::default(); - - let data = [ - ("direct", f.clone(), "../lib/index"), - ("as directory", f, ".."), - ("as module", dirname.clone(), "./enhanced_resolve"), - ]; - - for (comment, path, request) in data { - let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); - let expected = dirname.join("enhanced_resolve/lib/index.js"); - assert_eq!(resolved_path, Ok(expected), "{comment} {path:?} {request}"); - } -} - -#[tokio::test] -async fn dashed_name() { - let f = super::fixture(); - - let resolver = Resolver::default(); - - let data = [ - (f.clone(), "dash", f.join("node_modules/dash/index.js")), - (f.clone(), "dash-name", f.join("node_modules/dash-name/index.js")), - (f.join("node_modules/dash"), "dash", f.join("node_modules/dash/index.js")), - (f.join("node_modules/dash"), "dash-name", f.join("node_modules/dash-name/index.js")), - (f.join("node_modules/dash-name"), "dash", f.join("node_modules/dash/index.js")), - (f.join("node_modules/dash-name"), "dash-name", f.join("node_modules/dash-name/index.js")), - ]; - - for (path, request, expected) in data { - let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{path:?} {request}"); - } -} - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows { - use super::super::memory_fs::MemoryFS; - - use crate::ResolveOptions; - - #[tokio::test] - async fn no_package() { - use crate::ResolverGeneric; - use std::path::Path; - let f = Path::new("/"); - let file_system = MemoryFS::new(&[]); - let resolver = ResolverGeneric::::new_with_file_system( - file_system, - ResolveOptions::default(), - ); - let resolved_path = resolver.resolve(f, "package").await; - assert!(resolved_path.is_err()); - } -} diff --git a/src/tests/tsconfig_paths.rs.orig b/src/tests/tsconfig_paths.rs.orig deleted file mode 100644 index f3cda0bd..00000000 --- a/src/tests/tsconfig_paths.rs.orig +++ /dev/null @@ -1,558 +0,0 @@ -//! tests for tsconfig-paths -//! -//! Fixtures copied from . - -use std::path::{Path, PathBuf}; - -use crate::{ - JSONError, ResolveError, ResolveOptions, Resolver, TsConfig, TsconfigOptions, - TsconfigReferences, -}; - -// -#[tokio::test] -async fn tsconfig() { - let f = super::fixture_root().join("tsconfig"); - - #[rustfmt::skip] - let pass = [ - (f.clone(), None, "ts-path", f.join("foo.js")), - (f.join("nested"), None, "ts-path", f.join("nested/test.js")), - (f.join("cases/index"), None, "foo", f.join("node_modules/tsconfig-index/foo.js")), - // This requires reading package.json.tsconfig field - // (f.join("cases/field"), "foo", f.join("node_modules/tsconfig-field/foo.js")) - (f.join("cases/exports"), None, "foo", f.join("node_modules/tsconfig-exports/foo.js")), - (f.join("cases/extends-extension"), None, "foo", f.join("cases/extends-extension/foo.js")), - (f.join("cases/extends-extensionless"), None, "foo", f.join("node_modules/tsconfig-field/foo.js")), - (f.join("cases/extends-paths"), Some("src"), "@/index", f.join("cases/extends-paths/src/index.js")), - (f.join("cases/extends-multiple"), None, "foo", f.join("cases/extends-multiple/foo.js")), - ]; - - for (dir, subdir, request, expected) in pass { - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: dir.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - let path = subdir.map_or(dir.clone(), |subdir| dir.join(subdir)); - let resolved_path = resolver.resolve(&path, request).await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} {path:?}"); - } - - #[rustfmt::skip] - let data = [ - (f.join("node_modules/tsconfig-not-used"), "ts-path", Ok(f.join("foo.js"))), - ]; - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - for (path, request, expected) in data { - let resolution = resolver.resolve(&path, request).await.map(|f| f.full_path()); - assert_eq!(resolution, expected, "{path:?} {request}"); - } -} - -#[tokio::test] -async fn tsconfig_fallthrough() { - let f = super::fixture_root().join("tsconfig"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "/").await; - assert_eq!(resolved_path, Err(ResolveError::NotFound("/".into()))); -} - -#[tokio::test] -async fn json_with_comments() { - let f = super::fixture_root().join("tsconfig/cases/trailing-comma"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "foo").await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(f.join("bar.js"))); -} - -#[tokio::test] -async fn broken() { - let f = super::fixture_root().join("tsconfig"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig_broken.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - -<<<<<<< HEAD - let resolved_path = resolver.resolve(&f, "/").await; - let error = ResolveError::JSON(JSONError { -======= - let resolved_path = resolver.resolve(&f, "/"); - let _error = ResolveError::JSON(JSONError { ->>>>>>> origin/main - path: f.join("tsconfig_broken.json"), - message: String::from("EOF while parsing an object at line 2 column 0"), - line: 2, - column: 0, - content: Some("{\n".to_string()), - }); - assert!(matches!(resolved_path, Err(ResolveError::JSON(_)))); -} - -#[test] -fn empty() { - let f = super::fixture_root().join("tsconfig/cases/empty"); - - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: f.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - - let resolved_path = resolver.resolve(&f, "./index").map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(f.join("index.js"))); -} - -// -#[tokio::test] -async fn test_paths() { - let path = Path::new("/foo/tsconfig.json"); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "paths": { - "jquery": ["node_modules/jquery/dist/jquery"], - "*": ["generated/*"], - "bar/*": ["test/*"], - "bar/baz/*": ["baz/*", "yo/*"], - "@/components/*": ["components/*"], - "url": ["node_modules/my-url"], - } - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("jquery", vec!["/foo/node_modules/jquery/dist/jquery"]), - ("test", vec!["/foo/generated/test"]), - ("test/hello", vec!["/foo/generated/test/hello"]), - ("bar/hi", vec!["/foo/test/hi"]), - ("bar/baz/hi", vec!["/foo/baz/hi", "/foo/yo/hi"]), - ("@/components/button", vec!["/foo/components/button"]), - ("./jquery", vec![]), - ("url", vec!["/foo/node_modules/my-url"]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// -#[tokio::test] -async fn test_base_url() { - let path = Path::new("/foo/tsconfig.json"); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "baseUrl": "./src" - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("foo", vec!["/foo/src/foo"]), - ("components/button", vec!["/foo/src/components/button"]), - ("./jquery", vec![]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// -#[tokio::test] -async fn test_paths_and_base_url() { - let path = Path::new("/foo/tsconfig.json"); - let mut tsconfig_json = serde_json::json!({ - "compilerOptions": { - "baseUrl": "./src", - "paths": { - "*": ["generated/*"], - "bar/*": ["test/*"], - "bar/baz/*": ["baz/*", "yo/*"], - "@/components/*": ["components/*"] - } - } - }) - .to_string(); - let tsconfig = TsConfig::parse(true, path, &mut tsconfig_json).unwrap(); - - let data = [ - ("test", vec!["/foo/src/generated/test", "/foo/src/test"]), - ("test/hello", vec!["/foo/src/generated/test/hello", "/foo/src/test/hello"]), - ("bar/hi", vec!["/foo/src/test/hi", "/foo/src/bar/hi"]), - ("bar/baz/hi", vec!["/foo/src/baz/hi", "/foo/src/yo/hi", "/foo/src/bar/baz/hi"]), - ("@/components/button", vec!["/foo/src/components/button", "/foo/src/@/components/button"]), - ("./jquery", vec![]), - ]; - - for (specifier, expected) in data { - let paths = tsconfig.resolve_path_alias(specifier); - let expected = expected.into_iter().map(PathBuf::from).collect::>(); - assert_eq!(paths, expected, "{specifier}"); - } -} - -// Template variable ${configDir} for substitution of config files directory path -// https://github.com/microsoft/TypeScript/pull/58042 -#[tokio::test] -async fn test_template_variable() { - let f = super::fixture_root().join("tsconfig"); - let f2 = f.join("cases").join("paths_template_variable"); - - #[rustfmt::skip] - let pass = [ - (f2.clone(), "tsconfig1.json", "foo", f2.join("foo.js")), - (f2.clone(), "tsconfig2.json", "foo", f2.join("foo.js")), - (f.clone(), "tsconfig_template_variable.json", "foo", f.join("foo.js")), - ]; - - for (dir, tsconfig, request, expected) in pass { - let resolver = Resolver::new(ResolveOptions { - tsconfig: Some(TsconfigOptions { - config_file: dir.join(tsconfig), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }); - let resolved_path = resolver.resolve(&dir, request).await.map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(expected), "{request} {tsconfig} {dir:?}"); - } -} - -#[cfg(not(target_os = "windows"))] // MemoryFS's path separator is always `/` so the test will not pass in windows. -mod windows_test { - use std::path::{Path, PathBuf}; - - use crate::{ - ResolveError, ResolveOptions, ResolverGeneric, TsconfigOptions, TsconfigReferences, - }; - - use super::super::memory_fs::MemoryFS; - - struct OneTest { - name: &'static str, - tsconfig: String, - package_json: Option<(PathBuf, String)>, - main_fields: Option>, - existing_files: Vec<&'static str>, - requested_module: &'static str, - expected_path: &'static str, - extensions: Vec, - } - - impl Default for OneTest { - fn default() -> Self { - Self { - name: "", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["location/*"] - } - } - }) - .to_string(), - package_json: None, - main_fields: None, - existing_files: vec![], - requested_module: "", - expected_path: "", - extensions: vec![ - ".js".into(), - ".json".into(), - ".node".into(), - ".ts".into(), - ".tsx".into(), - ], - } - } - } - - impl OneTest { - fn resolver(&self, root: &Path) -> ResolverGeneric { - let mut file_system = MemoryFS::default(); - - file_system.add_file(&root.join("tsconfig.json"), &self.tsconfig); - if let Some((path, package_json)) = &self.package_json { - file_system.add_file(&root.join(path).join("package.json"), package_json); - } - for path in &self.existing_files { - file_system.add_file(Path::new(path), ""); - } - - let mut options = ResolveOptions { - extensions: self.extensions.clone(), - tsconfig: Some(TsconfigOptions { - config_file: root.join("tsconfig.json"), - references: TsconfigReferences::Auto, - }), - ..ResolveOptions::default() - }; - if let Some(main_fields) = &self.main_fields { - options.main_fields.clone_from(main_fields); - } - - ResolverGeneric::::new_with_file_system(file_system, options) - } - } - - // Path matching tests from tsconfig-paths - // * - // * - #[tokio::test] - async fn match_path() { - let pass = [ - OneTest { - name: "should locate path that matches with star and exists", - existing_files: vec!["/root/location/mylib/index.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve to correct path when many are specified", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["foo1/*", "foo2/*", "location/*", "foo3/*"], - } - } - }) - .to_string(), - existing_files: vec!["/root/location/mylib/index.ts"], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should locate path that matches with star and prioritize pattern with longest prefix", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "*": ["location/*"], - "lib/*": ["location/*"], - } - } - }) - .to_string(), - existing_files: vec![ - "/root/location/lib/mylib/index.ts", - "/root/location/mylib/index.ts", - ], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should locate path that matches with star and exists with extension", - existing_files: vec![ - "/root/location/mylib.myext", - ], - requested_module: "lib/mylib", - extensions: vec![".js".into(), ".myext".into()], - expected_path: "/root/location/mylib.myext", - ..OneTest::default() - }, - OneTest { - name: "should resolve request with extension specified", - existing_files: vec![ - "/root/location/test.jpg", - ], - requested_module: "lib/test.jpg", - expected_path: "/root/location/test.jpg", - ..OneTest::default() - }, - OneTest { - name: "should locate path that matches without star and exists", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/foo": ["location/foo"] - } - } - }) - .to_string(), - existing_files: vec![ - "/root/location/foo.ts", - ], - requested_module: "lib/foo", - expected_path: "/root/location/foo.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve to parent folder when filename is in subfolder", - existing_files: vec![ - "/root/location/mylib/index.ts", - ], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/index.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve from main field in package.json", - package_json: Some((PathBuf::from("/root/location/mylib"), serde_json::json!({ - "main": "./kalle.ts" - }).to_string())), - existing_files: vec![ - "/root/location/mylib/kalle.ts", - ], - requested_module: "lib/mylib", - expected_path: "/root/location/mylib/kalle.ts", - ..OneTest::default() - }, - OneTest { - name: "should resolve from main field in package.json (js)", - package_json: Some((PathBuf::from("/root/location/mylib.js"), serde_json::json!({ - "main": "./kalle.js" - }).to_string())), - existing_files: vec![ - "/root/location/mylib.js/kalle.js", - ], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylib.js", - expected_path: "/root/location/mylib.js/kalle.js", - ..OneTest::default() - }, - OneTest { - name: "should resolve from list of fields by priority in package.json", - main_fields: Some(vec!["missing".into(), "browser".into(), "main".into()]), - package_json: Some((PathBuf::from("/root/location/mylibjs"), serde_json::json!({ - "main": "./main.js", - "browser": "./browser.js" - }).to_string())), - existing_files: vec![ - "/root/location/mylibjs/main.js", - "/root/location/mylibjs/browser.js", - ], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylibjs", - expected_path: "/root/location/mylibjs/browser.js", - ..OneTest::default() - }, -OneTest { - name: "should ignore field mappings to missing files in package.json", - main_fields: Some(vec!["browser".into(), "main".into()]), - package_json: Some((PathBuf::from("/root/location/mylibjs"), serde_json::json!({ - "main": "./kalle.js", - "browser": "./nope.js" - }).to_string())), - existing_files: vec![ - "/root/location/mylibjs/kalle.js", - ], - extensions: vec![".ts".into(), ".js".into()], - requested_module: "lib/mylibjs", - expected_path: "/root/location/mylibjs/kalle.js", - ..OneTest::default() - }, - // Tests that are not applicable: - // name: "should resolve nested main fields" - // name: "should ignore advanced field mappings in package.json" - // name: "should resolve to with the help of baseUrl when not explicitly set" - // name: "should not resolve with the help of baseUrl when asked not to" - // name: "should resolve main file with cjs file extension" - OneTest { - name: "should resolve .ts from .js alias", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "@/*": ["src/*"] - } - } - }).to_string(), - existing_files: vec![ - "/root/src/foo.ts", - ], - requested_module: "@/foo", // original data was "@/foo.ts" but I don't get why it is the case? - expected_path: "/root/src/foo.ts", // original data was "/root/src/foo" - ..OneTest::default() - }, - ]; - - let root = PathBuf::from("/root"); - - for test in pass { - let resolved_path = test - .resolver(&root) - .resolve(&root, test.requested_module) - .await - .map(|f| f.full_path()); - assert_eq!(resolved_path, Ok(PathBuf::from(test.expected_path)), "{}", test.name); - } - - let fail = [ - OneTest { - name: "should not locate path that does not match", - tsconfig: serde_json::json!({ - "compilerOptions": { - "paths": { - "lib/*": ["location/*"] - } - } - }) - .to_string(), - existing_files: vec!["/root/location/mylib"], - requested_module: "lib/mylibjs", - ..OneTest::default() - }, - OneTest { - name: "should not resolve typings file (index.d.ts)", - existing_files: vec!["/root/location/mylib/index.d.ts"], - requested_module: "lib/mylib", - ..OneTest::default() - }, - ]; - - for test in fail { - let resolved_path = test - .resolver(&root) - .resolve(&root, test.requested_module) - .await - .map(|f| f.full_path()); - assert_eq!( - resolved_path, - Err(ResolveError::NotFound(test.requested_module.into())), - "{}", - test.name - ); - } - } -} From bdd300dc344f8de26b1cbb982705d257785667cd Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 15:50:11 +0800 Subject: [PATCH 19/38] =?UTF-8?q?chore:=20=F0=9F=94=A5=20adjust=20benchmar?= =?UTF-8?q?k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benches/resolver.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index 0e255cfa..e2d8e70d 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -157,8 +157,9 @@ fn bench_resolver(c: &mut Criterion) { group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); + let oxc_resolver = oxc_resolver(); + b.to_async(runner).iter(|| async { - let oxc_resolver = oxc_resolver(); for (path, request) in data { _ = oxc_resolver.resolve(path, request).await; } @@ -167,12 +168,13 @@ fn bench_resolver(c: &mut Criterion) { group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); - b.to_async(runner).iter(|| async { - let oxc_resolver = Arc::new(oxc_resolver()); + let oxc_resolver = Arc::new(oxc_resolver()); + b.to_async(runner).iter(|| async { let handles = data.iter().map(|(path, request)| { create_async_resolve_task(oxc_resolver.clone(), path.clone(), request.to_string()) }); + for handle in handles { let _ = handle.await; } @@ -184,8 +186,9 @@ fn bench_resolver(c: &mut Criterion) { &symlinks_range, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); + let oxc_resolver = oxc_resolver(); + b.to_async(runner).iter(|| async { - let oxc_resolver = oxc_resolver(); for i in data.clone() { assert!( oxc_resolver @@ -204,9 +207,9 @@ fn bench_resolver(c: &mut Criterion) { &symlinks_range, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); - b.to_async(runner).iter(|| async { - let oxc_resolver = Arc::new(oxc_resolver()); + let oxc_resolver = Arc::new(oxc_resolver()); + b.to_async(runner).iter(|| async { let handles = data.clone().map(|i| { create_async_resolve_task( oxc_resolver.clone(), From d9af0cb1a7824a239eacfcb9eee04d2889d2696d Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 17:03:00 +0800 Subject: [PATCH 20/38] refactor: change multi thread bench --- benches/resolver.rs | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index e2d8e70d..f259c196 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -1,12 +1,13 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use std::future::Future; use std::{ env, fs, io::{self, Write}, path::{Path, PathBuf}, sync::Arc, }; - -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; use tokio::runtime; +use tokio::task::JoinSet; fn data() -> Vec<(PathBuf, &'static str)> { let cwd = env::current_dir().unwrap().join("fixtures/enhanced_resolve"); @@ -139,10 +140,10 @@ fn create_async_resolve_task( oxc_resolver: Arc, path: PathBuf, request: String, -) -> tokio::task::JoinHandle<()> { - tokio::spawn(async move { +) -> impl Future { + async move { let _ = oxc_resolver.resolve(path, &request); - }) + } } fn bench_resolver(c: &mut Criterion) { @@ -171,13 +172,17 @@ fn bench_resolver(c: &mut Criterion) { let oxc_resolver = Arc::new(oxc_resolver()); b.to_async(runner).iter(|| async { - let handles = data.iter().map(|(path, request)| { - create_async_resolve_task(oxc_resolver.clone(), path.clone(), request.to_string()) + let mut join_set = JoinSet::new(); + + data.iter().for_each(|(path, request)| { + join_set.spawn(create_async_resolve_task( + oxc_resolver.clone(), + path.clone(), + request.to_string(), + )); }); - for handle in handles { - let _ = handle.await; - } + join_set.join_all().await; }); }); @@ -209,21 +214,22 @@ fn bench_resolver(c: &mut Criterion) { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); let oxc_resolver = Arc::new(oxc_resolver()); + let symlink_test_dir = symlink_test_dir.clone(); + b.to_async(runner).iter(|| async { - let handles = data.clone().map(|i| { - create_async_resolve_task( + let mut join_set = JoinSet::new(); + + data.clone().for_each(|i| { + join_set.spawn(create_async_resolve_task( oxc_resolver.clone(), symlink_test_dir.clone(), format!("./file{i}").to_string(), - ) + )); }); - for handle in handles { - let _ = handle.await; - } + join_set.join_all().await; }); }, ); } -criterion_group!(resolver, bench_resolver); -criterion_main!(resolver); +criterion_group!(resolver, bench_resolver);criterion_main!(resolver); From c001382ff40f26fd8d74b2d6594dbbc3784107b5 Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 17:06:18 +0800 Subject: [PATCH 21/38] =?UTF-8?q?chore:=20=E2=9C=8F=EF=B8=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- benches/resolver.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index f259c196..c0b4b208 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -140,7 +140,7 @@ fn create_async_resolve_task( oxc_resolver: Arc, path: PathBuf, request: String, -) -> impl Future { +) -> impl Future { async move { let _ = oxc_resolver.resolve(path, &request); } @@ -232,4 +232,5 @@ fn bench_resolver(c: &mut Criterion) { ); } -criterion_group!(resolver, bench_resolver);criterion_main!(resolver); +criterion_group!(resolver, bench_resolver); +criterion_main!(resolver); From b2d6c5634a92b29763e9245840a1fd4a5d667bfb Mon Sep 17 00:00:00 2001 From: pshu Date: Mon, 24 Mar 2025 17:56:28 +0800 Subject: [PATCH 22/38] chore: init rayon thread pool avdanced benchmark --- Cargo.lock | 2 +- benches/resolver.rs | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 9cb39e65..34c3d8d2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -831,7 +831,7 @@ dependencies = [ [[package]] name = "rspack_resolver" -version = "0.5.2" +version = "0.5.3" dependencies = [ "cfg-if", "criterion2", diff --git a/benches/resolver.rs b/benches/resolver.rs index b523b5a3..63f6e2ce 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -166,6 +166,9 @@ fn bench_resolver(c: &mut Criterion) { group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let oxc_resolver = oxc_resolver(); + + rayon::ThreadPoolBuilder::new().build_global().expect("Failed to build global thread pool"); + b.iter(|| { data.par_iter().for_each(|(path, request)| { _ = oxc_resolver.resolve(path, request); From 99f4f62cdc128e85b31c81a2535282fcb2d825c4 Mon Sep 17 00:00:00 2001 From: pshu Date: Tue, 25 Mar 2025 17:14:24 +0800 Subject: [PATCH 23/38] chore: setup benchmark pkgs --- .gitignore | 2 +- benches/package.json | 993 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 994 insertions(+), 1 deletion(-) create mode 100644 benches/package.json diff --git a/.gitignore b/.gitignore index 922809bb..fb498ad1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ target/ -/node_modules +node_modules fuzz/Cargo.lock diff --git a/benches/package.json b/benches/package.json new file mode 100644 index 00000000..249eae98 --- /dev/null +++ b/benches/package.json @@ -0,0 +1,993 @@ +{ + "name": "benches", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "cargo bench" + }, + "keywords": [], + "author": "pshu", + "license": "MIT", + "type": "commonjs", + "description": "resolver benchmark fixture project", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@angular-devkit/core": "^19.2.4", + "@angular/common": "^19.2.3", + "@angular/compiler": "^19.2.3", + "@angular/core": "^19.2.3", + "@angular/forms": "^19.2.3", + "@angular/platform-browser": "^19.2.3", + "@angular/platform-browser-dynamic": "^19.2.3", + "@angular/router": "^19.2.3", + "@aws-crypto/sha256-browser": "^5.2.0", + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-sdk/client-s3": "^3.774.0", + "@aws-sdk/client-sso-oidc": "^3.774.0", + "@aws-sdk/client-sts": "^3.774.0", + "@aws-sdk/core": "^3.774.0", + "@aws-sdk/credential-provider-node": "^3.774.0", + "@aws-sdk/middleware-host-header": "^3.774.0", + "@aws-sdk/middleware-logger": "^3.734.0", + "@aws-sdk/middleware-recursion-detection": "^3.772.0", + "@aws-sdk/middleware-user-agent": "^3.774.0", + "@aws-sdk/region-config-resolver": "^3.734.0", + "@aws-sdk/types": "^3.734.0", + "@aws-sdk/util-endpoints": "^3.743.0", + "@aws-sdk/util-user-agent-browser": "^3.734.0", + "@aws-sdk/util-user-agent-node": "^3.774.0", + "@azure/abort-controller": "^2.1.2", + "@babel/code-frame": "^7.26.2", + "@babel/core": "^7.26.10", + "@babel/generator": "^7.27.0", + "@babel/helper-annotate-as-pure": "^7.25.9", + "@babel/helper-compilation-targets": "^7.27.0", + "@babel/helper-module-imports": "^7.25.9", + "@babel/helper-module-transforms": "^7.26.0", + "@babel/helper-plugin-utils": "^7.26.5", + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9", + "@babel/helper-validator-option": "^7.25.9", + "@babel/helpers": "^7.27.0", + "@babel/parser": "^7.27.0", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-jsx": "^7.25.9", + "@babel/plugin-syntax-typescript": "^7.25.9", + "@babel/plugin-transform-arrow-functions": "^7.25.9", + "@babel/plugin-transform-async-to-generator": "^7.25.9", + "@babel/plugin-transform-classes": "^7.25.9", + "@babel/plugin-transform-destructuring": "^7.25.9", + "@babel/plugin-transform-modules-commonjs": "^7.26.3", + "@babel/plugin-transform-react-jsx": "^7.25.9", + "@babel/plugin-transform-regenerator": "^7.27.0", + "@babel/plugin-transform-runtime": "^7.26.10", + "@babel/plugin-transform-spread": "^7.25.9", + "@babel/plugin-transform-template-literals": "^7.26.8", + "@babel/plugin-transform-typescript": "^7.27.0", + "@babel/preset-env": "^7.26.9", + "@babel/preset-react": "^7.26.3", + "@babel/preset-typescript": "^7.27.0", + "@babel/template": "^7.27.0", + "@babel/traverse": "^7.27.0", + "@babel/types": "^7.27.0", + "@colors/colors": "^1.6.0", + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.23.0", + "@floating-ui/dom": "^1.6.13", + "@graphql-tools/utils": "^10.8.6", + "@grpc/grpc-js": "^1.13.1", + "@grpc/proto-loader": "^0.7.13", + "@jest/globals": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/gen-mapping": "^0.3.8", + "@jridgewell/resolve-uri": "^3.1.2", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.25", + "@mui/material": "^6.4.8", + "@nestjs/common": "^11.0.12", + "@nodelib/fs.stat": "^4.0.0", + "@nodelib/fs.walk": "^3.0.1", + "@octokit/rest": "^21.1.1", + "@opentelemetry/api": "^1.9.0", + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.200.0", + "@opentelemetry/semantic-conventions": "^1.30.0", + "@popperjs/core": "^2.11.8", + "@radix-ui/react-slot": "^1.1.2", + "@rollup/pluginutils": "^5.1.4", + "@sinclair/typebox": "^0.34.31", + "@sindresorhus/is": "^7.0.1", + "@smithy/config-resolver": "^4.1.0", + "@smithy/core": "^3.2.0", + "@smithy/fetch-http-handler": "^5.0.2", + "@smithy/hash-node": "^4.0.2", + "@smithy/invalid-dependency": "^4.0.2", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/middleware-content-length": "^4.0.2", + "@smithy/middleware-endpoint": "^4.1.0", + "@smithy/middleware-retry": "^4.1.0", + "@smithy/middleware-serde": "^4.0.3", + "@smithy/middleware-stack": "^4.0.2", + "@smithy/node-config-provider": "^4.0.2", + "@smithy/node-http-handler": "^4.0.4", + "@smithy/property-provider": "^4.0.2", + "@smithy/protocol-http": "^5.1.0", + "@smithy/types": "^4.2.0", + "@smithy/url-parser": "^4.0.2", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-buffer-from": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.8", + "@smithy/util-defaults-mode-node": "^4.0.8", + "@smithy/util-endpoints": "^3.0.2", + "@smithy/util-middleware": "^4.0.2", + "@smithy/util-retry": "^4.0.2", + "@smithy/util-utf8": "^4.0.0", + "@swc/core": "^1.11.13", + "@swc/helpers": "^0.5.15", + "@testing-library/jest-dom": "^6.6.3", + "@testing-library/react": "^16.2.0", + "@testing-library/user-event": "^14.6.1", + "@typescript-eslint/eslint-plugin": "^8.28.0", + "@typescript-eslint/parser": "^8.28.0", + "@typescript-eslint/scope-manager": "^8.28.0", + "@typescript-eslint/type-utils": "^8.28.0", + "@typescript-eslint/types": "^8.28.0", + "@typescript-eslint/typescript-estree": "^8.28.0", + "@typescript-eslint/utils": "^8.28.0", + "@typescript-eslint/visitor-keys": "^8.28.0", + "JSONStream": "^1.3.5", + "abbrev": "^3.0.0", + "abort-controller": "^3.0.0", + "accepts": "^1.3.8", + "acorn": "^8.14.1", + "acorn-globals": "^7.0.1", + "acorn-jsx": "^5.3.2", + "acorn-walk": "^8.3.4", + "adm-zip": "^0.5.16", + "agent-base": "^7.1.3", + "ajv": "^8.17.1", + "ajv-formats": "^3.0.1", + "ajv-keywords": "^5.1.0", + "ansi-colors": "^4.1.3", + "ansi-escapes": "^7.0.0", + "ansi-regex": "^6.1.0", + "ansi-styles": "^6.2.1", + "any-promise": "^1.3.0", + "anymatch": "^3.1.3", + "archiver": "^7.0.1", + "arg": "^5.0.2", + "argparse": "^2.0.1", + "aria-query": "^5.3.2", + "array-buffer-byte-length": "^1.0.2", + "array-flatten": "^3.0.0", + "array-includes": "^3.1.8", + "array-union": "^3.0.1", + "array.prototype.findlast": "^1.2.5", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "arraybuffer.prototype.slice": "^1.0.4", + "arrify": "^3.0.0", + "asap": "^2.0.6", + "assert": "^2.1.0", + "assertion-error": "^2.0.1", + "ast-types": "^0.14.2", + "astral-regex": "^2.0.0", + "async": "^3.2.6", + "async-retry": "^1.3.3", + "asynckit": "^0.4.0", + "atob": "^2.1.2", + "autoprefixer": "^10.4.21", + "available-typed-arrays": "^1.0.7", + "aws-sdk": "^2.1692.0", + "axe-core": "^4.10.3", + "axios": "1.6.2", + "axobject-query": "^4.1.0", + "babel-core": "^6.26.3", + "babel-jest": "^29.7.0", + "babel-loader": "^10.0.0", + "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.1.0", + "babel-preset-jest": "^29.6.3", + "balanced-match": "^3.0.1", + "base64-js": "^1.5.1", + "big.js": "^6.2.2", + "bignumber.js": "^9.1.2", + "binary-extensions": "^3.0.0", + "bindings": "^1.5.0", + "bl": "^6.1.0", + "bluebird": "^3.7.2", + "bn.js": "^5.2.1", + "body-parser": "^1.20.3", + "boolbase": "^1.0.0", + "bowser": "^2.11.0", + "boxen": "^8.0.1", + "brace-expansion": "^4.0.0", + "braces": "^3.0.3", + "browserslist": "^4.24.4", + "bser": "^2.1.1", + "buffer": "^6.0.3", + "buffer-crc32": "^1.0.0", + "buffer-from": "^1.1.2", + "builtin-modules": "^5.0.0", + "busboy": "^1.6.0", + "bytes": "^3.1.2", + "cac": "^6.7.14", + "cacache": "^19.0.1", + "call-bind": "^1.0.8", + "callsites": "^4.2.0", + "camelcase": "^8.0.0", + "caniuse-lite": "^1.0.30001707", + "caseless": "^0.12.0", + "chai": "^5.2.0", + "chalk": "^5.4.1", + "change-case": "^5.4.4", + "char-regex": "^2.0.2", + "chardet": "^2.1.0", + "cheerio": "^1.0.0", + "chokidar": "^4.0.3", + "chownr": "^3.0.0", + "chrome-trace-event": "^1.0.4", + "cjs-module-lexer": "^2.1.0", + "classnames": "^2.5.1", + "clean-css": "^5.3.3", + "clean-stack": "^5.2.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^3.2.0", + "cli-table3": "^0.6.5", + "cli-truncate": "^4.0.0", + "cli-width": "^4.1.0", + "cliui": "^9.0.1", + "clone": "^2.1.2", + "clone-deep": "^4.0.1", + "clsx": "^2.1.1", + "co": "^4.6.0", + "collect-v8-coverage": "^1.0.2", + "color": "^5.0.0", + "color-convert": "^3.0.1", + "color-name": "^2.0.0", + "color-string": "^2.0.1", + "colorette": "^2.0.20", + "colors": "^1.4.0", + "combined-stream": "^1.0.8", + "commander": "^13.1.0", + "commondir": "^1.0.1", + "component-emitter": "^2.0.0", + "compression": "^1.8.0", + "concat-map": "^0.0.2", + "concat-stream": "^2.0.0", + "configstore": "^7.0.0", + "connect": "^3.7.0", + "consola": "^3.4.2", + "content-disposition": "^0.5.4", + "content-type": "^1.0.5", + "convert-source-map": "^2.0.0", + "cookie": "^1.0.2", + "cookie-parser": "^1.4.7", + "cookie-signature": "^1.2.2", + "core-js": "^3.41.0", + "core-js-compat": "^3.41.0", + "core-util-is": "^1.0.3", + "cors": "^2.8.5", + "cosmiconfig": "^9.0.0", + "create-require": "^1.1.1", + "cross-env": "^7.0.3", + "cross-fetch": "^4.1.0", + "cross-spawn": "^7.0.6", + "crypto-js": "^4.2.0", + "css-loader": "^7.1.2", + "css-select": "^5.1.0", + "css-tree": "^3.1.0", + "css-what": "^6.1.0", + "cssesc": "^3.0.0", + "cssnano": "^7.0.6", + "cssom": "^0.5.0", + "cssstyle": "^4.3.0", + "d3-array": "^3.2.4", + "d3-scale": "^4.0.2", + "data-uri-to-buffer": "^6.0.2", + "data-urls": "^5.0.0", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "date-fns": "^4.1.0", + "dateformat": "^5.0.3", + "dayjs": "^1.11.13", + "debug": "^4.4.0", + "decamelize": "^6.0.0", + "decimal.js": "10.4.3", + "decompress-response": "^9.0.0", + "dedent": "^1.5.3", + "deep-eql": "^5.0.2", + "deep-equal": "^2.2.3", + "deep-extend": "^0.6.0", + "deep-is": "^0.1.4", + "deepmerge": "^4.3.1", + "defaults": "^3.0.0", + "define-data-property": "^1.1.4", + "define-lazy-prop": "^3.0.0", + "define-properties": "^1.2.1", + "delayed-stream": "^1.0.0", + "depd": "^2.0.0", + "destroy": "^1.2.0", + "detect-indent": "^7.0.1", + "detect-libc": "^2.0.3", + "detect-newline": "^4.0.1", + "diff": "^7.0.0", + "diff-sequences": "^29.6.3", + "dir-glob": "^3.0.1", + "doctrine": "^3.0.0", + "dom-accessibility-api": "^0.7.0", + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "dompurify": "^3.2.4", + "domutils": "^3.2.2", + "dot-prop": "^9.0.0", + "dotenv": "^16.4.7", + "dotenv-expand": "^12.0.1", + "duplexer": "^0.1.2", + "eastasianwidth": "^0.3.0", + "ee-first": "^1.1.1", + "ejs": "^3.1.10", + "electron-to-chromium": "^1.5.123", + "elliptic": "^6.6.1", + "emittery": "^1.1.0", + "emoji-regex": "^10.4.0", + "encodeurl": "^2.0.0", + "encoding": "^0.1.13", + "end-of-stream": "^1.4.4", + "enhanced-resolve": "^5.17.1", + "enquirer": "^2.4.1", + "entities": "^6.0.0", + "env-paths": "^3.0.0", + "envinfo": "^7.14.0", + "error-ex": "^1.3.2", + "error-stack-parser": "^2.1.4", + "es-abstract": "^1.23.9", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-iterator-helpers": "^1.2.1", + "es-module-lexer": "^1.6.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-shim-unscopables": "^1.1.0", + "es-to-primitive": "^1.3.0", + "es6-promise": "^4.2.8", + "esbuild": "^0.25.1", + "escalade": "^3.2.0", + "escape-html": "^1.0.3", + "escape-string-regexp": "^5.0.0", + "eslint": "^9.23.0", + "eslint-config-prettier": "^10.1.1", + "eslint-import-resolver-node": "^0.3.9", + "eslint-import-resolver-typescript": "^4.2.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jest": "^28.11.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.2.4", + "eslint-plugin-promise": "^7.2.1", + "eslint-plugin-react": "^7.37.4", + "eslint-plugin-react-hooks": "^5.2.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esprima": "^4.0.1", + "esquery": "^1.6.0", + "esrecurse": "^4.3.0", + "estraverse": "^5.3.0", + "estree-walker": "^3.0.3", + "etag": "^1.8.1", + "event-target-shim": "^6.0.2", + "eventemitter2": "^6.4.9", + "eventemitter3": "^5.0.1", + "events": "^3.3.0", + "execa": "^9.5.2", + "exit": "^0.1.2", + "expect": "^29.7.0", + "express": "^4.21.2", + "extend": "^3.0.2", + "extend-shallow": "^3.0.2", + "external-editor": "^3.1.0", + "fast-deep-equal": "^3.1.3", + "fast-diff": "^1.3.0", + "fast-glob": "^3.3.3", + "fast-json-stable-stringify": "^2.1.0", + "fast-levenshtein": "^3.0.0", + "fast-xml-parser": "^5.0.9", + "fastq": "^1.19.1", + "fb-watchman": "^2.0.2", + "figlet": "^1.8.0", + "file-entry-cache": "^10.0.7", + "file-type": "^20.4.1", + "filesize": "^10.1.6", + "fill-range": "^7.1.1", + "finalhandler": "^2.1.0", + "find-cache-dir": "^5.0.0", + "find-up": "^7.0.0", + "flat": "^6.0.1", + "flat-cache": "^6.1.7", + "flatted": "^3.3.3", + "follow-redirects": "^1.15.9", + "for-each": "^0.3.5", + "for-in": "^1.0.2", + "foreground-child": "^3.3.1", + "form-data": "^4.0.2", + "forwarded": "^0.2.0", + "fraction.js": "^5.2.1", + "framer-motion": "^12.5.0", + "fresh": "^0.5.2", + "fs-extra": "^11.3.0", + "fs-minipass": "^3.0.3", + "fs.realpath": "^1.0.0", + "function-bind": "^1.1.2", + "function.prototype.name": "^1.1.8", + "functions-have-names": "^1.2.3", + "gensync": "1.0.0-beta.2", + "get-caller-file": "^2.0.5", + "get-intrinsic": "^1.3.0", + "get-package-type": "^0.1.0", + "get-stdin": "^9.0.0", + "get-stream": "^9.0.1", + "get-symbol-description": "^1.1.0", + "get-tsconfig": "^4.10.0", + "get-value": "^4.0.1", + "glob": "^11.0.1", + "glob-parent": "^6.0.2", + "global-prefix": "^4.0.0", + "globals": "^16.0.0", + "globalthis": "^1.0.4", + "globby": "^14.1.0", + "google-auth-library": "^9.15.1", + "gopd": "^1.2.0", + "got": "^14.4.6", + "graceful-fs": "^4.2.11", + "graphemer": "^1.4.0", + "graphql": "^16.10.0", + "handlebars": "^4.7.8", + "has-bigints": "^1.1.0", + "has-flag": "^5.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "has-tostringtag": "^1.0.2", + "hash.js": "^1.1.7", + "hasown": "^2.0.2", + "he": "^1.2.0", + "highlight.js": "^11.11.1", + "hosted-git-info": "^8.0.2", + "html-entities": "^2.5.3", + "html-escaper": "^3.0.3", + "html-webpack-plugin": "^5.6.3", + "htmlparser2": "^10.0.0", + "http-cache-semantics": "^4.1.1", + "http-errors": "^2.0.0", + "http-proxy-agent": "^7.0.2", + "http-proxy-middleware": "^3.0.3", + "http-signature": "^1.4.0", + "https-proxy-agent": "^7.0.6", + "husky": "^9.1.7", + "i18next": "^24.2.3", + "iconv-lite": "^0.6.3", + "ieee754": "^1.2.1", + "ignore": "^7.0.3", + "image-size": "^2.0.1", + "immer": "^10.1.1", + "immutable": "^5.0.3", + "import-fresh": "^3.3.1", + "import-local": "^3.2.0", + "imurmurhash": "^0.1.4", + "indent-string": "^5.0.0", + "inherits": "^2.0.4", + "ini": "^5.0.0", + "inquirer": "^12.5.0", + "internal-slot": "^1.1.0", + "interpret": "^3.1.1", + "ioredis": "^5.6.0", + "ip-address": "^10.0.1", + "ipaddr.js": "2.2.0", + "is-array-buffer": "^3.0.5", + "is-arrayish": "^0.3.2", + "is-bigint": "^1.1.0", + "is-binary-path": "^3.0.0", + "is-callable": "^1.2.7", + "is-ci": "^4.1.0", + "is-core-module": "^2.16.1", + "is-data-view": "^1.0.2", + "is-docker": "^3.0.0", + "is-extendable": "^1.0.1", + "is-extglob": "^2.1.1", + "is-finalizationregistry": "^1.1.1", + "is-fullwidth-code-point": "^5.0.0", + "is-generator-fn": "^3.0.0", + "is-generator-function": "^1.1.0", + "is-glob": "^4.0.3", + "is-interactive": "^2.0.0", + "is-map": "^2.0.3", + "is-negative-zero": "^2.0.3", + "is-number": "^7.0.0", + "is-path-inside": "^4.0.0", + "is-plain-obj": "^4.1.0", + "is-plain-object": "^5.0.0", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-stream": "^4.0.1", + "is-typed-array": "^1.1.15", + "is-unicode-supported": "^2.1.0", + "is-weakmap": "^2.0.2", + "is-weakref": "^1.1.1", + "is-weakset": "^2.0.4", + "is-wsl": "^3.1.0", + "isarray": "^2.0.5", + "isexe": "^3.1.1", + "isobject": "^4.0.0", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-instrument": "^6.0.3", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "iterator.prototype": "^1.1.5", + "jackspeak": "^4.1.0", + "jake": "^10.9.2", + "jest": "^29.7.0", + "jest-changed-files": "^29.7.0", + "jest-circus": "^29.7.0", + "jest-cli": "^29.7.0", + "jest-config": "^29.7.0", + "jest-diff": "^29.7.0", + "jest-docblock": "^29.7.0", + "jest-each": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-pnp-resolver": "^1.2.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "jiti": "^2.4.2", + "joi": "^17.13.3", + "jose": "^6.0.10", + "jquery": "^3.7.1", + "js-cookie": "^3.0.5", + "js-tokens": "^9.0.1", + "js-yaml": "^4.1.0", + "jsbn": "^1.1.0", + "jsdom": "^26.0.0", + "jsesc": "^3.1.0", + "json-buffer": "^3.0.1", + "json-parse-better-errors": "^1.0.2", + "json-parse-even-better-errors": "^4.0.0", + "json-schema-traverse": "^1.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "json5": "^2.2.3", + "jsonc-parser": "^3.3.1", + "jsonfile": "^6.1.0", + "jsonparse": "^1.3.1", + "jsonwebtoken": "^9.0.2", + "jsx-ast-utils": "^3.3.5", + "jszip": "^3.10.1", + "jws": "^4.0.0", + "jwt-decode": "^4.0.0", + "keyv": "^5.3.2", + "kind-of": "^6.0.3", + "kleur": "^4.1.5", + "koa": "^2.16.0", + "less": "^4.2.2", + "less-loader": "^12.2.0", + "levn": "^0.4.1", + "lilconfig": "^3.1.3", + "lines-and-columns": "^2.0.4", + "lint-staged": "^15.5.0", + "listr2": "^8.2.5", + "load-json-file": "^7.0.1", + "loader-utils": "^3.3.1", + "locate-path": "^7.2.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash.camelcase": "^4.3.0", + "lodash.isequal": "^4.5.0", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.merge": "^4.6.2", + "log-symbols": "^7.0.0", + "log-update": "^6.1.0", + "log4js": "^6.9.1", + "loglevel": "^1.9.2", + "long": "^5.3.1", + "loose-envify": "^1.4.0", + "lowercase-keys": "^3.0.0", + "lru-cache": "^11.1.0", + "luxon": "^3.5.0", + "magic-string": "^0.30.17", + "make-dir": "^5.0.0", + "make-error": "^1.3.6", + "map-obj": "^5.0.2", + "markdown-it": "^14.1.0", + "marked": "^15.0.7", + "md5": "^2.3.0", + "mdn-data": "^2.18.0", + "media-typer": "^1.1.0", + "memfs": "^4.17.0", + "meow": "^13.2.0", + "merge-descriptors": "^2.0.0", + "merge-stream": "^2.0.0", + "merge2": "^1.4.1", + "methods": "^1.1.2", + "micromatch": "^4.0.8", + "mime": "^4.0.6", + "mime-db": "^1.54.0", + "mime-types": "^2.1.35", + "mini-css-extract-plugin": "^2.9.2", + "minimalistic-assert": "^1.0.1", + "minimatch": "^10.0.1", + "minimist": "^1.2.8", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mitt": "^3.0.1", + "mkdirp": "^3.0.1", + "mocha": "^11.1.0", + "moment": "^2.30.1", + "moment-timezone": "^0.5.48", + "mongodb": "^6.15.0", + "mongoose": "^8.13.0", + "morgan": "^1.10.0", + "ms": "^2.1.3", + "multer": "1.4.5-lts.2", + "mustache": "^4.2.0", + "mute-stream": "^2.0.0", + "mz": "^2.7.0", + "nan": "^2.22.2", + "nanoid": "^5.1.5", + "natural-compare": "^1.4.0", + "negotiator": "^1.0.0", + "neo-async": "^2.6.2", + "next": "^15.2.4", + "nice-try": "^3.0.1", + "node-addon-api": "^8.3.1", + "node-fetch": "^3.3.2", + "node-forge": "^1.3.1", + "node-gyp-build": "^4.8.4", + "node-int64": "^0.4.0", + "nodemailer": "^6.10.0", + "nodemon": "^3.1.9", + "nopt": "^8.1.0", + "normalize-package-data": "^7.0.0", + "normalize-path": "^3.0.0", + "normalize-range": "^0.1.2", + "normalize-url": "^8.0.1", + "npm": "^11.2.0", + "npm-package-arg": "^12.0.2", + "npm-run-path": "^6.0.0", + "nth-check": "^2.1.1", + "nwsapi": "^2.2.19", + "object-assign": "^4.1.1", + "object-hash": "^3.0.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "on-finished": "^2.4.1", + "on-headers": "^1.0.2", + "once": "^1.4.0", + "onetime": "^7.0.0", + "open": "^10.1.0", + "optionator": "^0.9.4", + "ora": "^8.2.0", + "p-cancelable": "^4.0.1", + "p-limit": "^6.2.0", + "p-locate": "^6.0.0", + "p-map": "^7.0.3", + "p-retry": "^6.2.1", + "p-try": "^3.0.0", + "pako": "^2.1.0", + "parse-json": "^8.2.0", + "parse5": "^7.2.1", + "parseurl": "^1.3.3", + "path": "^0.12.7", + "path-browserify": "^1.0.1", + "path-exists": "^5.0.0", + "path-key": "^4.0.0", + "path-parse": "^1.0.7", + "path-scurry": "^2.0.0", + "path-to-regexp": "^8.2.0", + "path-type": "^6.0.0", + "pathe": "^2.0.3", + "performance-now": "^2.1.0", + "pg": "^8.14.1", + "picocolors": "^1.1.1", + "picomatch": "^4.0.2", + "pify": "^6.1.0", + "pino": "^9.6.0", + "pirates": "^4.0.6", + "pkg-dir": "^8.0.0", + "playwright": "^1.51.1", + "pluralize": "^8.0.0", + "pnpm": "^10.6.5", + "polished": "^4.3.1", + "possible-typed-array-names": "^1.1.0", + "postcss": "8.4.33", + "postcss-import": "^16.1.0", + "postcss-load-config": "^6.0.1", + "postcss-loader": "^8.1.1", + "postcss-nested": "^7.0.2", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "prelude-ls": "^1.2.1", + "prettier": "^3.5.3", + "pretty-bytes": "^6.1.1", + "pretty-format": "^29.7.0", + "prismjs": "^1.30.0", + "process": "^0.11.10", + "process-nextick-args": "^2.0.1", + "progress": "^2.0.3", + "promise": "^8.3.0", + "promise-retry": "^2.0.1", + "prompts": "^2.4.2", + "prop-types": "^15.8.1", + "protobufjs": "^7.4.0", + "proxy-addr": "^2.0.7", + "proxy-from-env": "^1.1.0", + "psl": "^1.15.0", + "pump": "^3.0.2", + "punycode": "^2.3.1", + "qs": "^6.14.0", + "query-string": "^9.1.1", + "querystringify": "^2.2.0", + "queue-microtask": "^1.2.3", + "raf": "^3.4.1", + "ramda": "^0.30.1", + "randombytes": "^2.1.0", + "range-parser": "^1.2.1", + "raw-body": "^3.0.0", + "rc": "^1.2.8", + "react": "^18.3.1", + "react-dom": "^19.0.0", + "react-hook-form": "^7.54.2", + "react-is": "^19.0.0", + "react-redux": "^9.2.0", + "react-refresh": "^0.16.0", + "react-router": "^7.4.0", + "react-router-dom": "^7.4.0", + "react-transition-group": "^4.4.5", + "read-pkg": "^9.0.1", + "readable-stream": "^4.7.0", + "readdirp": "^4.1.2", + "recast": "^0.23.11", + "rechoir": "^0.8.0", + "redent": "^4.0.0", + "redux": "^5.0.1", + "redux-thunk": "^3.1.0", + "reflect-metadata": "^0.2.2", + "reflect.getprototypeof": "^1.0.10", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.2.0", + "regenerator-runtime": "^0.14.1", + "regenerator-transform": "^0.15.2", + "regexp.prototype.flags": "^1.5.4", + "regexpu-core": "^6.2.0", + "regjsparser": "^0.12.0", + "repeat-string": "^1.6.1", + "require-directory": "^2.1.1", + "require-from-string": "^2.0.2", + "require-main-filename": "^2.0.0", + "requires-port": "^1.0.0", + "reselect": "^5.1.1", + "resize-observer-polyfill": "^1.5.1", + "resolve": "^1.22.10", + "resolve-cwd": "^3.0.0", + "resolve-from": "^5.0.0", + "resolve.exports": "^2.0.3", + "responselike": "^3.0.0", + "restore-cursor": "^5.1.0", + "retry": "^0.13.1", + "reusify": "^1.1.0", + "rfdc": "^1.4.1", + "rimraf": "^6.0.1", + "rollup": "^4.37.0", + "run-async": "^3.0.0", + "run-parallel": "^1.2.0", + "rxjs": "^7.8.2", + "safe-array-concat": "^1.1.3", + "safe-buffer": "^5.2.1", + "safe-regex-test": "^1.1.0", + "safer-buffer": "^2.1.2", + "sass": "^1.86.0", + "sass-loader": "^16.0.5", + "sax": "^1.4.1", + "saxes": "^6.0.0", + "scheduler": "^0.25.0", + "schema-utils": "^4.3.0", + "semver": "^7.7.1", + "send": "^1.1.0", + "serve-static": "^1.16.2", + "set-blocking": "^2.0.0", + "set-function-length": "^1.2.2", + "set-function-name": "^2.0.2", + "set-value": "^4.1.0", + "setimmediate": "^1.0.5", + "setprototypeof": "^1.2.0", + "shallow-clone": "^3.0.1", + "sharp": "^0.33.5", + "shebang-command": "^2.0.0", + "shebang-regex": "^4.0.0", + "shell-quote": "^1.8.2", + "shelljs": "^0.9.2", + "side-channel": "^1.1.0", + "signal-exit": "^4.1.0", + "simple-git": "^3.27.0", + "sisteransi": "^1.0.5", + "slash": "^5.1.0", + "slice-ansi": "^7.1.0", + "smart-buffer": "^4.2.0", + "socket.io": "^4.8.1", + "socket.io-client": "^4.8.1", + "socks": "^2.8.4", + "socks-proxy-agent": "^8.0.5", + "source-map": "^0.7.4", + "source-map-js": "^1.2.1", + "source-map-support": "^0.5.21", + "spdx-correct": "^3.2.0", + "spdx-expression-parse": "^4.0.0", + "split2": "^4.2.0", + "sprintf-js": "^1.1.3", + "sshpk": "^1.18.0", + "ssri": "^12.0.0", + "stack-utils": "^2.0.6", + "statuses": "^2.0.1", + "stream-browserify": "^3.0.0", + "string-length": "^6.0.0", + "string-width": "^7.2.0", + "string.prototype.matchall": "^4.0.12", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "string_decoder": "^1.3.0", + "strip-ansi": "^7.1.0", + "strip-bom": "^5.0.0", + "strip-final-newline": "^4.0.0", + "strip-indent": "^4.0.0", + "strip-json-comments": "^5.0.1", + "style-loader": "^4.0.0", + "sucrase": "^3.35.0", + "superagent": "^10.2.0", + "supports-color": "^10.0.0", + "supports-preserve-symlinks-flag": "^1.0.0", + "svgo": "^3.3.2", + "symbol-tree": "^3.2.4", + "tailwind-merge": "^3.0.2", + "tailwindcss": "^4.0.15", + "tapable": "^2.2.1", + "tar": "^7.4.3", + "tar-stream": "^3.1.7", + "terser-webpack-plugin": "^5.3.14", + "test-exclude": "^7.0.1", + "text-table": "^0.2.0", + "thenify": "^3.3.1", + "thenify-all": "^1.6.0", + "through": "^2.3.8", + "through2": "^4.0.2", + "tiny-invariant": "^1.3.3", + "tiny-warning": "^1.0.3", + "tmp": "^0.2.3", + "tmpl": "^1.0.5", + "to-regex-range": "^5.0.1", + "toidentifier": "^1.0.1", + "tough-cookie": "^5.1.2", + "tr46": "^5.1.0", + "tree-kill": "^1.2.2", + "ts-api-utils": "^2.1.0", + "ts-jest": "^29.3.0", + "ts-loader": "^9.5.2", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "tslib": "^2.8.1", + "tweetnacl": "^1.0.3", + "type-check": "^0.4.0", + "type-detect": "^4.1.0", + "type-is": "^1.6.18", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "typedarray": "^0.0.7", + "typedarray-to-buffer": "^4.0.0", + "typescript": "^5.6.2", + "ua-parser-js": "^2.0.3", + "unbox-primitive": "^1.1.0", + "underscore": "^1.13.7", + "undici": "^7.5.0", + "unicode-canonical-property-names-ecmascript": "^2.0.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.2.0", + "unicode-property-aliases-ecmascript": "^2.1.0", + "unified": "^11.0.5", + "unique-filename": "^4.0.0", + "unique-slug": "^5.0.0", + "unique-string": "^3.0.0", + "unist-util-visit": "^5.0.0", + "unpipe": "^1.0.0", + "update-browserslist-db": "^1.1.3", + "update-notifier": "^7.3.1", + "uri-js": "^4.4.1", + "url": "^0.11.4", + "url-join": "^5.0.0", + "url-parse": "^1.5.10", + "use-sync-external-store": "^1.4.0", + "util-deprecate": "^1.0.2", + "utils-merge": "^1.0.1", + "uuid": "^11.1.0", + "v8-compile-cache-lib": "^3.0.1", + "v8-to-istanbul": "^9.3.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^6.0.0", + "validator": "^13.15.0", + "vary": "^1.1.2", + "verror": "^1.10.1", + "vite": "^6.2.3", + "vue": "^3.5.13", + "vue-router": "^4.5.0", + "w3c-xmlserializer": "^5.0.0", + "walker": "^1.0.8", + "watchpack": "^2.4.2", + "wcwidth": "^1.0.1", + "web-vitals": "^4.2.4", + "webidl-conversions": "^7.0.0", + "webpack": "^5.98.0", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.0", + "webpack-merge": "^6.0.1", + "webpack-sources": "^3.2.3", + "whatwg-encoding": "^3.1.1", + "whatwg-fetch": "^3.6.20", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.2.0", + "which": "^5.0.0", + "which-boxed-primitive": "^1.1.1", + "which-builtin-type": "^1.2.1", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.19", + "winston": "^3.17.0", + "word-wrap": "^1.2.5", + "wordwrap": "^1.0.0", + "wrap-ansi": "^9.0.0", + "wrappy": "^1.0.2", + "write-file-atomic": "^6.0.0", + "ws": "^8.18.1", + "xml-name-validator": "^5.0.0", + "xml2js": "^0.6.2", + "xmlbuilder": "^15.1.1", + "xtend": "^4.0.2", + "y18n": "^5.0.8", + "yallist": "^5.0.0", + "yaml": "^2.7.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yn": "^5.0.0", + "yocto-queue": "^1.2.1", + "yup": "^1.6.1", + "zod": "^3.24.2", + "zone.js": "^0.15.0" + } +} From a64aa23ae5deb2bf022ec6b8c745c0e5143b54ee Mon Sep 17 00:00:00 2001 From: pshu Date: Tue, 25 Mar 2025 17:43:57 +0800 Subject: [PATCH 24/38] test: use real npm package to benchmark --- benches/resolver.rs | 87 +++++++++++++-------------------------------- 1 file changed, 24 insertions(+), 63 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index 63f6e2ce..e68c2960 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -1,62 +1,13 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use rayon::prelude::*; +use serde_json::Value; +use std::fs::read_to_string; use std::{ env, fs, io::{self, Write}, path::{Path, PathBuf}, }; -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; -use rayon::prelude::*; - -fn data() -> Vec<(PathBuf, &'static str)> { - let cwd = env::current_dir().unwrap().join("fixtures/enhanced_resolve"); - let f = cwd.join("test/fixtures"); - vec![ - (cwd.clone(), "./"), - (cwd.clone(), "./lib/index"), - (cwd.clone(), "/absolute/path"), - // query fragment - (f.clone(), "./main1.js#fragment?query"), - (f.clone(), "m1/a.js?query#fragment"), - // browserField - (f.join("browser-module"), "./lib/replaced"), - (f.join("browser-module/lib"), "./replaced"), - // exportsField - (f.join("exports-field"), "exports-field"), - (f.join("exports-field"), "exports-field/dist/main.js"), - (f.join("exports-field"), "exports-field/dist/main.js?foo"), - (f.join("exports-field"), "exports-field/dist/main.js#foo"), - (f.join("exports-field"), "@exports-field/core"), - (f.join("imports-exports-wildcard"), "m/features/f.js"), - // extensionAlias - (f.join("extension-alias"), "./index.js"), - (f.join("extension-alias"), "./dir2/index.mjs"), - // extensions - (f.join("extensions"), "./foo"), - (f.join("extensions"), "."), - (f.join("extensions"), "./dir"), - (f.join("extensions"), "module/"), - // importsField - (f.join("imports-field"), "#imports-field"), - (f.join("imports-exports-wildcard/node_modules/m/"), "#internal/i.js"), - // scoped - (f.join("scoped"), "@scope/pack1"), - (f.join("scoped"), "@scope/pack2/lib"), - // dashed name - (f.clone(), "dash"), - (f.clone(), "dash-name"), - (f.join("node_modules/dash"), "dash"), - (f.join("node_modules/dash"), "dash-name"), - (f.join("node_modules/dash-name"), "dash"), - (f.join("node_modules/dash-name"), "dash-name"), - // alias - (cwd.clone(), "aaa"), - (cwd.clone(), "ggg"), - (cwd.clone(), "rrr"), - (cwd.clone(), "@"), - (cwd, "@@@"), - ] -} - fn symlink, Q: AsRef>(original: P, link: Q) -> io::Result<()> { #[cfg(target_family = "unix")] { @@ -96,13 +47,10 @@ fn oxc_resolver() -> rspack_resolver::Resolver { use rspack_resolver::{AliasValue, ResolveOptions, Resolver}; let alias_value = AliasValue::from("./"); Resolver::new(ResolveOptions { - extensions: vec![".ts".into(), ".js".into()], - condition_names: vec!["webpack".into(), "require".into()], + extensions: vec![".ts".into(), ".js".into(), ".mjs".into()], + condition_names: vec!["import".into(), "webpack".into(), "require".into()], alias_fields: vec![vec!["browser".into()]], - extension_alias: vec![ - (".js".into(), vec![".ts".into(), ".js".into()]), - (".mjs".into(), vec![".mts".into()]), - ], + extension_alias: vec![(".js".into(), vec![".ts".into(), ".js".into()])], // Real projects LOVE setting these many aliases. // I saw them with my own eyes. alias: vec![ @@ -135,11 +83,24 @@ fn oxc_resolver() -> rspack_resolver::Resolver { } fn bench_resolver(c: &mut Criterion) { - let data = data(); + let cwd = env::current_dir().unwrap().join("benches"); + + let pkg_content = read_to_string("./benches/package.json").unwrap(); + let pkg_json: Value = serde_json::from_str(&pkg_content).unwrap(); + // about 1000 npm packages + let data = pkg_json["dependencies"] + .as_object() + .unwrap() + .keys() + .map(|name| (&cwd, name)) + .collect::>(); // check validity for (path, request) in &data { - assert!(oxc_resolver().resolve(path, request).is_ok(), "{path:?} {request}"); + let r = oxc_resolver().resolve(path, request); + if !r.is_ok() { + panic!("resolve failed {path:?} {request},\n\nplease run npm install in `/benches` before running the benchmarks"); + } } let symlink_test_dir = create_symlinks().expect("Create symlink fixtures failed"); @@ -155,6 +116,8 @@ fn bench_resolver(c: &mut Criterion) { let mut group = c.benchmark_group("resolver"); + rayon::ThreadPoolBuilder::new().build_global().expect("Failed to build global thread pool"); + group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { let oxc_resolver = oxc_resolver(); b.iter(|| { @@ -167,8 +130,6 @@ fn bench_resolver(c: &mut Criterion) { group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let oxc_resolver = oxc_resolver(); - rayon::ThreadPoolBuilder::new().build_global().expect("Failed to build global thread pool"); - b.iter(|| { data.par_iter().for_each(|(path, request)| { _ = oxc_resolver.resolve(path, request); From 5cf7f62aeff163ecb3aae388b603f14a8cd1accd Mon Sep 17 00:00:00 2001 From: pshu Date: Tue, 25 Mar 2025 17:50:19 +0800 Subject: [PATCH 25/38] chore: setup bench data in workflow --- .github/workflows/benchmark.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 7c25853b..9df86779 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -24,6 +24,16 @@ jobs: - name: Checkout Branch uses: taiki-e/checkout-action@v1 + - uses: pnpm/action-setup@v4 + + - uses: actions/setup-node@v4 + with: + node-version-file: .node-version + cache: pnpm + + - name: Setup benchmark data + run: cd benches && pnpm install + - uses: Boshen/setup-rust@main with: cache-key: benchmark From 803cffc50e6a19db750b26487d60ba5b44c89ae5 Mon Sep 17 00:00:00 2001 From: pshu Date: Tue, 25 Mar 2025 22:01:06 +0800 Subject: [PATCH 26/38] chore: pnpm install with opt --ignore-workspace --- .github/workflows/benchmark.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 9df86779..0c38d71c 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -32,13 +32,14 @@ jobs: cache: pnpm - name: Setup benchmark data - run: cd benches && pnpm install + run: cd benches && pnpm install --ignore-workspace - uses: Boshen/setup-rust@main with: cache-key: benchmark save-cache: ${{ github.ref_name == 'main' }} tools: cargo-codspeed + - uses: ./.github/actions/pnpm - name: Build Benchmark run: cargo codspeed build --features codspeed From 21bb93172c75798acee17df7628017b251b84207 Mon Sep 17 00:00:00 2001 From: pshu Date: Tue, 25 Mar 2025 23:03:11 +0800 Subject: [PATCH 27/38] chore: more reasonable bench --- benches/resolver.rs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index e68c2960..9b612ad2 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -119,8 +119,8 @@ fn bench_resolver(c: &mut Criterion) { rayon::ThreadPoolBuilder::new().build_global().expect("Failed to build global thread pool"); group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { - let oxc_resolver = oxc_resolver(); b.iter(|| { + let oxc_resolver = oxc_resolver(); for (path, request) in data { _ = oxc_resolver.resolve(path, request); } @@ -128,9 +128,8 @@ fn bench_resolver(c: &mut Criterion) { }); group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { - let oxc_resolver = oxc_resolver(); - b.iter(|| { + let oxc_resolver = oxc_resolver(); data.par_iter().for_each(|(path, request)| { _ = oxc_resolver.resolve(path, request); }); From 77ff0a6c9615a38174ad4c5f0e87e1f83387c780 Mon Sep 17 00:00:00 2001 From: pshu Date: Wed, 26 Mar 2025 02:04:34 +0800 Subject: [PATCH 28/38] chore: cargo fmt --- benches/resolver.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index 794256e2..ffa6f0fd 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -138,7 +138,7 @@ fn bench_resolver(c: &mut Criterion) { group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); - + b.to_async(runner).iter(|| async { let mut join_set = JoinSet::new(); let oxc_resolver = Arc::new(oxc_resolver()); From a9cfe72758e84af4cca204943e14ab75f5b94f3a Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 14:33:16 +0800 Subject: [PATCH 29/38] test: perf with tokio async --- .github/workflows/benchmark.yml | 4 +- Cargo.lock | 704 +- Cargo.toml | 10 +- benches/pnpm-lock.yaml | 23674 ++++++++++++++++++++++++++++++ benches/resolver.rs | 87 +- 5 files changed, 24165 insertions(+), 314 deletions(-) create mode 100644 benches/pnpm-lock.yaml diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 0c38d71c..3b004780 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -42,7 +42,9 @@ jobs: - uses: ./.github/actions/pnpm - name: Build Benchmark - run: cargo codspeed build --features codspeed + env: + RUSTFLAGS: "-C debuginfo=1 -C strip=none -g" + run: cargo codspeed build - name: Run benchmark uses: CodSpeedHQ/action@v3 diff --git a/Cargo.lock b/Cargo.lock index 9cfcba62..83c65585 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -49,9 +49,15 @@ dependencies = [ [[package]] name = "anes" -version = "0.2.0" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" + +[[package]] +name = "anstyle" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "735d4f398ca57cfa2880225c2bf81c3b9af3be5bb22e44ae70118dad38713e84" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" [[package]] name = "arca" @@ -77,9 +83,9 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -90,10 +96,10 @@ dependencies = [ "addr2line", "cfg-if", "libc", - "miniz_oxide 0.8.0", + "miniz_oxide 0.8.5", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -119,27 +125,15 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - -[[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" - -[[package]] -name = "bpaf" -version = "0.9.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3280efcf6d66bc77c2cf9b67dc8acee47a217d9be67dd590b3230dffe663724d" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] name = "bumpalo" -version = "3.16.0" +version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" [[package]] name = "byteorder" @@ -155,9 +149,12 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.1.0" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" +dependencies = [ + "shlex", +] [[package]] name = "cfg-if" @@ -167,15 +164,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.38" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -205,6 +202,31 @@ dependencies = [ "half", ] +[[package]] +name = "clap" +version = "4.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff" +dependencies = [ + "clap_builder", +] + +[[package]] +name = "clap_builder" +version = "4.5.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489" +dependencies = [ + "anstyle", + "clap_lex", +] + +[[package]] +name = "clap_lex" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" + [[package]] name = "clean-path" version = "0.2.1" @@ -213,23 +235,65 @@ checksum = "aaa6b4b263a5d737e9bf6b7c09b72c41a5480aec4d7219af827f6564e950b6a5" [[package]] name = "codspeed" -version = "2.6.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3a104ac948e0188b921eb3fcbdd55dcf62e542df4c7ab7e660623f6288302089" +checksum = "60e744216bfa9add3b1f2505587cbbb837923232ed10963609f4a6e3cbd99c3e" dependencies = [ "colored", "libc", + "serde", "serde_json", + "uuid", +] + +[[package]] +name = "codspeed-criterion-compat" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5926ca63222a35b9a2299adcaafecf596efe20a9a2048e4a81cb2fc3463b4a8" +dependencies = [ + "codspeed", + "codspeed-criterion-compat-walltime", + "colored", + "futures", + "tokio", +] + +[[package]] +name = "codspeed-criterion-compat-walltime" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dbae4da05076cbc673e242400ac8f4353bdb686e48020edc6e36a5c36ae0878e" +dependencies = [ + "anes", + "cast", + "ciborium", + "clap", + "codspeed", + "criterion-plot", + "futures", + "is-terminal", + "itertools", + "num-traits", + "once_cell", + "oorandom", + "regex", + "serde", + "serde_derive", + "serde_json", + "tinytemplate", + "tokio", + "walkdir", ] [[package]] name = "colored" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.48.0", + "windows-sys", ] [[package]] @@ -243,61 +307,76 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.6.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" dependencies = [ "unicode-segmentation", ] [[package]] name = "core-foundation-sys" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] -name = "criterion2" -version = "1.1.1" +name = "criterion-plot" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6c2be2af5816b76f45745ccfb9959a9efd1322ae4c88fc3c9b2d6bcdabe5554" +checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" dependencies = [ - "anes", - "bpaf", "cast", - "ciborium", - "codspeed", - "colored", - "num-traits", - "oorandom", - "serde", - "serde_json", - "tokio", - "walkdir", + "itertools", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", ] [[package]] name = "crossbeam-utils" -version = "0.8.20" +version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" +checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.2" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" +checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "ctor" -version = "0.2.8" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" +checksum = "07e9666f4a9a948d4f1dff0c08a4512b0f7c86414b23960104c243c10d79f4c3" dependencies = [ - "quote", - "syn", + "ctor-proc-macro", + "dtor", ] +[[package]] +name = "ctor-proc-macro" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f211af61d8efdd104f96e57adf5e426ba1bc3ed7a4ead616e15e5881fd79c4d" + [[package]] name = "darling" version = "0.20.10" @@ -335,9 +414,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.0.1" +version = "6.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" dependencies = [ "cfg-if", "crossbeam-utils", @@ -349,9 +428,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.3.11" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" dependencies = [ "powerfmt", "serde", @@ -359,19 +438,40 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.10" +version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" +checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" dependencies = [ "litrs", ] +[[package]] +name = "dtor" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "222ef136a1c687d4aa0395c175f2c4586e379924c352fd02f7870cf7de783c23" +dependencies = [ + "dtor-proc-macro", +] + +[[package]] +name = "dtor-proc-macro" +version = "0.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055" + [[package]] name = "dunce" version = "1.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" +[[package]] +name = "either" +version = "1.15.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" + [[package]] name = "endian-type" version = "0.1.2" @@ -380,9 +480,9 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "equivalent" -version = "1.0.1" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" +checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" [[package]] name = "fancy-regex" @@ -397,14 +497,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.23" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.4.1", - "windows-sys 0.52.0", + "libredox", + "windows-sys", ] [[package]] @@ -502,6 +602,18 @@ dependencies = [ "slab", ] +[[package]] +name = "getrandom" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73fea8450eea4bac3940448fb7ae50d91f034f941199fcd9d909a5a07aa455f0" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasi", +] + [[package]] name = "gimli" version = "0.31.1" @@ -510,9 +622,9 @@ checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" [[package]] name = "half" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" +checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" dependencies = [ "cfg-if", "crunchy", @@ -536,6 +648,12 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +[[package]] +name = "hermit-abi" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" + [[package]] name = "hex" version = "0.4.3" @@ -544,14 +662,15 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "iana-time-zone" -version = "0.1.60" +version = "0.1.62" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", + "log", "wasm-bindgen", "windows-core", ] @@ -584,27 +703,48 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.7.1" +version = "2.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" +checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" dependencies = [ "equivalent", "hashbrown 0.15.2", "serde", ] +[[package]] +name = "is-terminal" +version = "0.4.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" +dependencies = [ + "hermit-abi", + "libc", + "windows-sys", +] + +[[package]] +name = "itertools" +version = "0.10.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" +dependencies = [ + "either", +] + [[package]] name = "itoa" -version = "1.0.11" +version = "1.0.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" +checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" [[package]] name = "js-sys" -version = "0.3.69" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ + "once_cell", "wasm-bindgen", ] @@ -625,18 +765,29 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.168" +version = "0.2.171" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" +checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" [[package]] name = "libloading" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" +checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets", +] + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags", + "libc", + "redox_syscall", ] [[package]] @@ -657,9 +808,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.22" +version = "0.4.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" [[package]] name = "memchr" @@ -678,24 +829,23 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.0" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" dependencies = [ "adler2", ] [[package]] name = "napi" -version = "3.0.0-alpha.7" +version = "3.0.0-alpha.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ec04344cc540f5897e97c9821ab99e7eb276b4dca6f3e6e441dfa72e5bcde70" +checksum = "c857a2b38c994db8bec785554ab4216d45ad63469832070c86a992be0b5491ad" dependencies = [ - "bitflags 2.6.0", + "bitflags", "ctor", "napi-build", "napi-sys", - "once_cell", "serde", "serde_json", "tokio", @@ -703,17 +853,16 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.1.3" +version = "2.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" +checksum = "e28acfa557c083f6e254a786e01ba253fc56f18ee000afcd4f79af735f73a6da" [[package]] name = "napi-derive" -version = "3.0.0-alpha.6" +version = "3.0.0-alpha.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c6240c4ddca592cde608bbfa26e2af397c3596e413a0c65c9bbcb65c2f1e485" +checksum = "c7165d931d54f68115e651330d5fe0ae0081133d3f4ee3ab55b0b808f0c23f71" dependencies = [ - "cfg-if", "convert_case", "napi-derive-backend", "proc-macro2", @@ -723,24 +872,22 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "2.0.0-alpha.6" +version = "2.0.0-alpha.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b32dcc50065508fe2f387076c17adbdf10e038d1c080d48b10196813d94ac6a8" +checksum = "ce3f36354262054df8e1c3a73bdcd36ea13f130feb1e4d86b67cab9e10d6ef6d" dependencies = [ "convert_case", - "once_cell", "proc-macro2", "quote", - "regex", "semver", "syn", ] [[package]] name = "napi-sys" -version = "2.4.0" +version = "3.0.0-alpha.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3" +checksum = "4cc061b99c514ad4b7abc99d4db1ca24b9542b7ff48b4760bd9f82b24611534d" dependencies = [ "libloading", ] @@ -777,24 +924,24 @@ dependencies = [ [[package]] name = "object" -version = "0.36.5" +version = "0.36.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" dependencies = [ "memchr", ] [[package]] name = "once_cell" -version = "1.19.0" +version = "1.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" [[package]] name = "oorandom" -version = "11.1.4" +version = "11.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" +checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" [[package]] name = "parking_lot_core" @@ -804,9 +951,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.5.2", + "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-targets", ] [[package]] @@ -817,15 +964,15 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] name = "pathdiff" -version = "0.2.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" +checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" [[package]] name = "pin-project-lite" -version = "0.2.14" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "pin-utils" @@ -843,7 +990,7 @@ dependencies = [ "byteorder", "concurrent_lru", "fancy-regex", - "indexmap 2.7.1", + "indexmap 2.8.0", "lazy_static", "miniz_oxide 0.7.4", "pathdiff", @@ -862,22 +1009,28 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "proc-macro2" -version = "1.0.86" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e719e8df665df0d1c8fbfd238015744736151d4445ec0836b8e628aae103b77" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] [[package]] name = "quote" -version = "1.0.36" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" + [[package]] name = "radix_trie" version = "0.2.1" @@ -889,28 +1042,39 @@ dependencies = [ ] [[package]] -name = "redox_syscall" -version = "0.4.1" +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ - "bitflags 1.3.2", + "crossbeam-deque", + "crossbeam-utils", ] [[package]] name = "redox_syscall" -version = "0.5.2" +version = "0.5.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" dependencies = [ - "bitflags 2.6.0", + "bitflags", ] [[package]] name = "regex" -version = "1.10.5" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", @@ -920,9 +1084,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", @@ -931,9 +1095,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "rspack_napi_resolver" @@ -952,15 +1116,16 @@ version = "0.5.3" dependencies = [ "async-trait", "cfg-if", - "criterion2", + "codspeed-criterion-compat", "dashmap", "document-features", "dunce", "futures", - "indexmap 2.7.1", + "indexmap 2.8.0", "json-strip-comments", "normalize-path", "pnp", + "rayon", "rustc-hash", "serde", "serde_json", @@ -978,15 +1143,21 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.0.0" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" +checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" + +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" [[package]] name = "ryu" -version = "1.0.18" +version = "1.0.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" +checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" [[package]] name = "same-file" @@ -1005,24 +1176,24 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.23" +version = "1.0.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" [[package]] name = "serde" -version = "1.0.204" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc76f558e0cbb2a839d37354c575f1dc3fdc6546b5be373ba43d95f231bf7c12" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.204" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0cd7e117be63d3c3678776753929474f3b04a43a080c744d6b0ae2a8c28e222" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -1031,11 +1202,11 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.122" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.7.1", + "indexmap 2.8.0", "itoa", "memchr", "ryu", @@ -1044,15 +1215,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.8.3" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e73139bc5ec2d45e6c5fd85be5a46949c1c39a4c18e56915f5eb4c12f975e377" +checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.7.1", + "indexmap 2.8.0", "serde", "serde_derive", "serde_json", @@ -1062,9 +1233,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.8.3" +version = "3.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b80d3d6b56b64335c0180e5ffde23b3c5e08c14c585b51a15bd0e95393f46703" +checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" dependencies = [ "darling", "proc-macro2", @@ -1081,6 +1252,12 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "slab" version = "0.4.9" @@ -1092,9 +1269,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.2" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" [[package]] name = "strsim" @@ -1104,9 +1281,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.70" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0209b68b3613b093e0ec905354eccaedcfe83b8cb37cbdeae64026c3064c16" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -1115,18 +1292,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", @@ -1145,9 +1322,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" dependencies = [ "deranged", "itoa", @@ -1160,25 +1337,35 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.2" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" +checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" dependencies = [ "num-conv", "time-core", ] +[[package]] +name = "tinytemplate" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" +dependencies = [ + "serde", + "serde_json", +] + [[package]] name = "tokio" -version = "1.42.0" +version = "1.44.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" +checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a" dependencies = [ "backtrace", "pin-project-lite", @@ -1187,9 +1374,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "2.4.0" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", @@ -1198,9 +1385,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.40" +version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -1209,9 +1396,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.27" +version = "0.1.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", @@ -1220,18 +1407,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.32" +version = "0.1.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", ] [[package]] name = "tracing-subscriber" -version = "0.3.18" +version = "0.3.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" dependencies = [ "sharded-slab", "thread_local", @@ -1240,21 +1427,30 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.12" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" +checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" [[package]] name = "unicode-segmentation" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "uuid" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "458f7a779bf54acc9f347480ac654f68407d3aab21269a6e3c9f922acd9e2da9" +dependencies = [ + "getrandom", +] [[package]] name = "vfs" -version = "0.12.0" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "654cd097e182a71dbf899178e6b5662c2157dd0b8afd5975de18008f6fc173d1" +checksum = "2ec343ec20aa715908fd028a4b8e7c99a349d13143224222e4d61c316d1e7f0a" dependencies = [ "filetime", ] @@ -1269,25 +1465,35 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "wasi" +version = "0.14.2+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "wasm-bindgen" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", + "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn", @@ -1296,9 +1502,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1306,9 +1512,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", @@ -1319,17 +1525,20 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.92" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys", ] [[package]] @@ -1338,40 +1547,22 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.52.6", + "windows-targets", ] [[package]] -name = "windows-sys" -version = "0.48.0" +name = "windows-link" +version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets 0.48.5", -] +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" [[package]] name = "windows-sys" -version = "0.52.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" -dependencies = [ - "windows-targets 0.52.6", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" +version = "0.59.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" dependencies = [ - "windows_aarch64_gnullvm 0.48.5", - "windows_aarch64_msvc 0.48.5", - "windows_i686_gnu 0.48.5", - "windows_i686_msvc 0.48.5", - "windows_x86_64_gnu 0.48.5", - "windows_x86_64_gnullvm 0.48.5", - "windows_x86_64_msvc 0.48.5", + "windows-targets", ] [[package]] @@ -1380,46 +1571,28 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm 0.52.6", - "windows_aarch64_msvc 0.52.6", - "windows_i686_gnu 0.52.6", + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", "windows_i686_gnullvm", - "windows_i686_msvc 0.52.6", - "windows_x86_64_gnu 0.52.6", - "windows_x86_64_gnullvm 0.52.6", - "windows_x86_64_msvc 0.52.6", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", ] -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -1432,36 +1605,18 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" @@ -1470,12 +1625,15 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_msvc" -version = "0.48.5" +version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" +name = "wit-bindgen-rt" +version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" +checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" +dependencies = [ + "bitflags", +] diff --git a/Cargo.toml b/Cargo.toml index 2236e7ff..d30e6da9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -95,14 +95,14 @@ futures = "0.3.31" async-trait = "0.1.88" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros", "fs"] } +tokio = { version = "1", default-features = false, features = ["sync", "rt-multi-thread", "macros", "fs"] } [target.'cfg(target_arch = "wasm32")'.dependencies] -tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros"] } +tokio = { version = "1", default-features = false, features = ["sync", "rt-multi-thread", "macros" ]} [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system -criterion2 = { version = "1.0.0", default-features = false, features = ["async_tokio"]} -tokio = { version = "1.42.0", features = ["rt", "rt-multi-thread"] } +rayon = { version = "1.10.0" } +criterion2 = { version = "2.0.0", default-features = false, package = "codspeed-criterion-compat", features = ["async_tokio"]} normalize-path = { version = "0.2.1" } [features] @@ -112,8 +112,6 @@ default = ["yarn_pnp"] package_json_raw_json_api = [] ## [Yarn Plug'n'Play](https://yarnpkg.com/features/pnp) yarn_pnp = ["pnp"] -# For codspeed benchmark -codspeed = ["criterion2/codspeed"] [package.metadata.docs.rs] all-features = true diff --git a/benches/pnpm-lock.yaml b/benches/pnpm-lock.yaml new file mode 100644 index 00000000..6cca3771 --- /dev/null +++ b/benches/pnpm-lock.yaml @@ -0,0 +1,23674 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@ampproject/remapping': + specifier: ^2.3.0 + version: 2.3.0 + '@angular-devkit/core': + specifier: ^19.2.4 + version: 19.2.4(chokidar@4.0.3) + '@angular/common': + specifier: ^19.2.3 + version: 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) + '@angular/compiler': + specifier: ^19.2.3 + version: 19.2.3 + '@angular/core': + specifier: ^19.2.3 + version: 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + '@angular/forms': + specifier: ^19.2.3 + version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) + '@angular/platform-browser': + specifier: ^19.2.3 + version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) + '@angular/platform-browser-dynamic': + specifier: ^19.2.3 + version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/compiler@19.2.3)(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))) + '@angular/router': + specifier: ^19.2.3 + version: 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2) + '@aws-crypto/sha256-browser': + specifier: ^5.2.0 + version: 5.2.0 + '@aws-crypto/sha256-js': + specifier: ^5.2.0 + version: 5.2.0 + '@aws-sdk/client-s3': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/client-sso-oidc': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/client-sts': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/core': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/credential-provider-node': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/middleware-host-header': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/middleware-logger': + specifier: ^3.734.0 + version: 3.734.0 + '@aws-sdk/middleware-recursion-detection': + specifier: ^3.772.0 + version: 3.772.0 + '@aws-sdk/middleware-user-agent': + specifier: ^3.774.0 + version: 3.774.0 + '@aws-sdk/region-config-resolver': + specifier: ^3.734.0 + version: 3.734.0 + '@aws-sdk/types': + specifier: ^3.734.0 + version: 3.734.0 + '@aws-sdk/util-endpoints': + specifier: ^3.743.0 + version: 3.743.0 + '@aws-sdk/util-user-agent-browser': + specifier: ^3.734.0 + version: 3.734.0 + '@aws-sdk/util-user-agent-node': + specifier: ^3.774.0 + version: 3.774.0 + '@azure/abort-controller': + specifier: ^2.1.2 + version: 2.1.2 + '@babel/code-frame': + specifier: ^7.26.2 + version: 7.26.2 + '@babel/core': + specifier: ^7.26.10 + version: 7.26.10(supports-color@10.0.0) + '@babel/generator': + specifier: ^7.27.0 + version: 7.27.0 + '@babel/helper-annotate-as-pure': + specifier: ^7.25.9 + version: 7.25.9 + '@babel/helper-compilation-targets': + specifier: ^7.27.0 + version: 7.27.0 + '@babel/helper-module-imports': + specifier: ^7.25.9 + version: 7.25.9(supports-color@10.0.0) + '@babel/helper-module-transforms': + specifier: ^7.26.0 + version: 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': + specifier: ^7.26.5 + version: 7.26.5 + '@babel/helper-string-parser': + specifier: ^7.25.9 + version: 7.25.9 + '@babel/helper-validator-identifier': + specifier: ^7.25.9 + version: 7.25.9 + '@babel/helper-validator-option': + specifier: ^7.25.9 + version: 7.25.9 + '@babel/helpers': + specifier: ^7.27.0 + version: 7.27.0 + '@babel/parser': + specifier: ^7.27.0 + version: 7.27.0 + '@babel/plugin-syntax-import-meta': + specifier: ^7.10.4 + version: 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-jsx': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-typescript': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-arrow-functions': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-async-to-generator': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-classes': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-destructuring': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-modules-commonjs': + specifier: ^7.26.3 + version: 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-react-jsx': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-regenerator': + specifier: ^7.27.0 + version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-runtime': + specifier: ^7.26.10 + version: 7.26.10(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-spread': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-template-literals': + specifier: ^7.26.8 + version: 7.26.8(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-typescript': + specifier: ^7.27.0 + version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/preset-env': + specifier: ^7.26.9 + version: 7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/preset-react': + specifier: ^7.26.3 + version: 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/preset-typescript': + specifier: ^7.27.0 + version: 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/template': + specifier: ^7.27.0 + version: 7.27.0 + '@babel/traverse': + specifier: ^7.27.0 + version: 7.27.0(supports-color@10.0.0) + '@babel/types': + specifier: ^7.27.0 + version: 7.27.0 + '@colors/colors': + specifier: ^1.6.0 + version: 1.6.0 + '@emotion/react': + specifier: ^11.14.0 + version: 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@emotion/styled': + specifier: ^11.14.0 + version: 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@eslint/eslintrc': + specifier: ^3.3.1 + version: 3.3.1(supports-color@10.0.0) + '@eslint/js': + specifier: ^9.23.0 + version: 9.23.0 + '@floating-ui/dom': + specifier: ^1.6.13 + version: 1.6.13 + '@graphql-tools/utils': + specifier: ^10.8.6 + version: 10.8.6(graphql@16.10.0) + '@grpc/grpc-js': + specifier: ^1.13.1 + version: 1.13.1 + '@grpc/proto-loader': + specifier: ^0.7.13 + version: 0.7.13 + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + '@jest/types': + specifier: ^29.6.3 + version: 29.6.3 + '@jridgewell/gen-mapping': + specifier: ^0.3.8 + version: 0.3.8 + '@jridgewell/resolve-uri': + specifier: ^3.1.2 + version: 3.1.2 + '@jridgewell/sourcemap-codec': + specifier: ^1.5.0 + version: 1.5.0 + '@jridgewell/trace-mapping': + specifier: ^0.3.25 + version: 0.3.25 + '@mui/material': + specifier: ^6.4.8 + version: 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@nestjs/common': + specifier: ^11.0.12 + version: 11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2) + '@nodelib/fs.stat': + specifier: ^4.0.0 + version: 4.0.0 + '@nodelib/fs.walk': + specifier: ^3.0.1 + version: 3.0.1 + '@octokit/rest': + specifier: ^21.1.1 + version: 21.1.1 + '@opentelemetry/api': + specifier: ^1.9.0 + version: 1.9.0 + '@opentelemetry/core': + specifier: ^2.0.0 + version: 2.0.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': + specifier: ^0.200.0 + version: 0.200.0(@opentelemetry/api@1.9.0)(supports-color@10.0.0) + '@opentelemetry/semantic-conventions': + specifier: ^1.30.0 + version: 1.30.0 + '@popperjs/core': + specifier: ^2.11.8 + version: 2.11.8 + '@radix-ui/react-slot': + specifier: ^1.1.2 + version: 1.1.2(@types/react@19.0.12)(react@18.3.1) + '@rollup/pluginutils': + specifier: ^5.1.4 + version: 5.1.4(rollup@4.37.0) + '@sinclair/typebox': + specifier: ^0.34.31 + version: 0.34.31 + '@sindresorhus/is': + specifier: ^7.0.1 + version: 7.0.1 + '@smithy/config-resolver': + specifier: ^4.1.0 + version: 4.1.0 + '@smithy/core': + specifier: ^3.2.0 + version: 3.2.0 + '@smithy/fetch-http-handler': + specifier: ^5.0.2 + version: 5.0.2 + '@smithy/hash-node': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/invalid-dependency': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/is-array-buffer': + specifier: ^4.0.0 + version: 4.0.0 + '@smithy/middleware-content-length': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/middleware-endpoint': + specifier: ^4.1.0 + version: 4.1.0 + '@smithy/middleware-retry': + specifier: ^4.1.0 + version: 4.1.0 + '@smithy/middleware-serde': + specifier: ^4.0.3 + version: 4.0.3 + '@smithy/middleware-stack': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/node-config-provider': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/node-http-handler': + specifier: ^4.0.4 + version: 4.0.4 + '@smithy/property-provider': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/protocol-http': + specifier: ^5.1.0 + version: 5.1.0 + '@smithy/types': + specifier: ^4.2.0 + version: 4.2.0 + '@smithy/url-parser': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/util-base64': + specifier: ^4.0.0 + version: 4.0.0 + '@smithy/util-body-length-browser': + specifier: ^4.0.0 + version: 4.0.0 + '@smithy/util-body-length-node': + specifier: ^4.0.0 + version: 4.0.0 + '@smithy/util-buffer-from': + specifier: ^4.0.0 + version: 4.0.0 + '@smithy/util-defaults-mode-browser': + specifier: ^4.0.8 + version: 4.0.8 + '@smithy/util-defaults-mode-node': + specifier: ^4.0.8 + version: 4.0.8 + '@smithy/util-endpoints': + specifier: ^3.0.2 + version: 3.0.2 + '@smithy/util-middleware': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/util-retry': + specifier: ^4.0.2 + version: 4.0.2 + '@smithy/util-utf8': + specifier: ^4.0.0 + version: 4.0.0 + '@swc/core': + specifier: ^1.11.13 + version: 1.11.13(@swc/helpers@0.5.15) + '@swc/helpers': + specifier: ^0.5.15 + version: 0.5.15 + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/react': + specifier: ^16.2.0 + version: 16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1(@testing-library/dom@10.4.0) + '@typescript-eslint/eslint-plugin': + specifier: ^8.28.0 + version: 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/parser': + specifier: ^8.28.0 + version: 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/scope-manager': + specifier: ^8.28.0 + version: 8.28.0 + '@typescript-eslint/type-utils': + specifier: ^8.28.0 + version: 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/types': + specifier: ^8.28.0 + version: 8.28.0 + '@typescript-eslint/typescript-estree': + specifier: ^8.28.0 + version: 8.28.0(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/utils': + specifier: ^8.28.0 + version: 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': + specifier: ^8.28.0 + version: 8.28.0 + JSONStream: + specifier: ^1.3.5 + version: 1.3.5 + abbrev: + specifier: ^3.0.0 + version: 3.0.0 + abort-controller: + specifier: ^3.0.0 + version: 3.0.0 + accepts: + specifier: ^1.3.8 + version: 1.3.8 + acorn: + specifier: ^8.14.1 + version: 8.14.1 + acorn-globals: + specifier: ^7.0.1 + version: 7.0.1 + acorn-jsx: + specifier: ^5.3.2 + version: 5.3.2(acorn@8.14.1) + acorn-walk: + specifier: ^8.3.4 + version: 8.3.4 + adm-zip: + specifier: ^0.5.16 + version: 0.5.16 + agent-base: + specifier: ^7.1.3 + version: 7.1.3 + ajv: + specifier: ^8.17.1 + version: 8.17.1 + ajv-formats: + specifier: ^3.0.1 + version: 3.0.1(ajv@8.17.1) + ajv-keywords: + specifier: ^5.1.0 + version: 5.1.0(ajv@8.17.1) + ansi-colors: + specifier: ^4.1.3 + version: 4.1.3 + ansi-escapes: + specifier: ^7.0.0 + version: 7.0.0 + ansi-regex: + specifier: ^6.1.0 + version: 6.1.0 + ansi-styles: + specifier: ^6.2.1 + version: 6.2.1 + any-promise: + specifier: ^1.3.0 + version: 1.3.0 + anymatch: + specifier: ^3.1.3 + version: 3.1.3 + archiver: + specifier: ^7.0.1 + version: 7.0.1 + arg: + specifier: ^5.0.2 + version: 5.0.2 + argparse: + specifier: ^2.0.1 + version: 2.0.1 + aria-query: + specifier: ^5.3.2 + version: 5.3.2 + array-buffer-byte-length: + specifier: ^1.0.2 + version: 1.0.2 + array-flatten: + specifier: ^3.0.0 + version: 3.0.0 + array-includes: + specifier: ^3.1.8 + version: 3.1.8 + array-union: + specifier: ^3.0.1 + version: 3.0.1 + array.prototype.findlast: + specifier: ^1.2.5 + version: 1.2.5 + array.prototype.findlastindex: + specifier: ^1.2.6 + version: 1.2.6 + array.prototype.flat: + specifier: ^1.3.3 + version: 1.3.3 + array.prototype.flatmap: + specifier: ^1.3.3 + version: 1.3.3 + array.prototype.tosorted: + specifier: ^1.1.4 + version: 1.1.4 + arraybuffer.prototype.slice: + specifier: ^1.0.4 + version: 1.0.4 + arrify: + specifier: ^3.0.0 + version: 3.0.0 + asap: + specifier: ^2.0.6 + version: 2.0.6 + assert: + specifier: ^2.1.0 + version: 2.1.0 + assertion-error: + specifier: ^2.0.1 + version: 2.0.1 + ast-types: + specifier: ^0.14.2 + version: 0.14.2 + astral-regex: + specifier: ^2.0.0 + version: 2.0.0 + async: + specifier: ^3.2.6 + version: 3.2.6 + async-retry: + specifier: ^1.3.3 + version: 1.3.3 + asynckit: + specifier: ^0.4.0 + version: 0.4.0 + atob: + specifier: ^2.1.2 + version: 2.1.2 + autoprefixer: + specifier: ^10.4.21 + version: 10.4.21(postcss@8.4.33) + available-typed-arrays: + specifier: ^1.0.7 + version: 1.0.7 + aws-sdk: + specifier: ^2.1692.0 + version: 2.1692.0 + axe-core: + specifier: ^4.10.3 + version: 4.10.3 + axios: + specifier: 1.6.2 + version: 1.6.2(debug@4.4.0(supports-color@10.0.0)) + axobject-query: + specifier: ^4.1.0 + version: 4.1.0 + babel-core: + specifier: ^6.26.3 + version: 6.26.3(supports-color@10.0.0) + babel-jest: + specifier: ^29.7.0 + version: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + babel-loader: + specifier: ^10.0.0 + version: 10.0.0(@babel/core@7.26.10(supports-color@10.0.0))(webpack@5.98.0) + babel-plugin-istanbul: + specifier: ^7.0.0 + version: 7.0.0(supports-color@10.0.0) + babel-plugin-jest-hoist: + specifier: ^29.6.3 + version: 29.6.3 + babel-preset-current-node-syntax: + specifier: ^1.1.0 + version: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) + babel-preset-jest: + specifier: ^29.6.3 + version: 29.6.3(@babel/core@7.26.10(supports-color@10.0.0)) + balanced-match: + specifier: ^3.0.1 + version: 3.0.1 + base64-js: + specifier: ^1.5.1 + version: 1.5.1 + big.js: + specifier: ^6.2.2 + version: 6.2.2 + bignumber.js: + specifier: ^9.1.2 + version: 9.1.2 + binary-extensions: + specifier: ^3.0.0 + version: 3.0.0 + bindings: + specifier: ^1.5.0 + version: 1.5.0 + bl: + specifier: ^6.1.0 + version: 6.1.0 + bluebird: + specifier: ^3.7.2 + version: 3.7.2 + bn.js: + specifier: ^5.2.1 + version: 5.2.1 + body-parser: + specifier: ^1.20.3 + version: 1.20.3(supports-color@10.0.0) + boolbase: + specifier: ^1.0.0 + version: 1.0.0 + bowser: + specifier: ^2.11.0 + version: 2.11.0 + boxen: + specifier: ^8.0.1 + version: 8.0.1 + brace-expansion: + specifier: ^4.0.0 + version: 4.0.0 + braces: + specifier: ^3.0.3 + version: 3.0.3 + browserslist: + specifier: ^4.24.4 + version: 4.24.4 + bser: + specifier: ^2.1.1 + version: 2.1.1 + buffer: + specifier: ^6.0.3 + version: 6.0.3 + buffer-crc32: + specifier: ^1.0.0 + version: 1.0.0 + buffer-from: + specifier: ^1.1.2 + version: 1.1.2 + builtin-modules: + specifier: ^5.0.0 + version: 5.0.0 + busboy: + specifier: ^1.6.0 + version: 1.6.0 + bytes: + specifier: ^3.1.2 + version: 3.1.2 + cac: + specifier: ^6.7.14 + version: 6.7.14 + cacache: + specifier: ^19.0.1 + version: 19.0.1 + call-bind: + specifier: ^1.0.8 + version: 1.0.8 + callsites: + specifier: ^4.2.0 + version: 4.2.0 + camelcase: + specifier: ^8.0.0 + version: 8.0.0 + caniuse-lite: + specifier: ^1.0.30001707 + version: 1.0.30001707 + caseless: + specifier: ^0.12.0 + version: 0.12.0 + chai: + specifier: ^5.2.0 + version: 5.2.0 + chalk: + specifier: ^5.4.1 + version: 5.4.1 + change-case: + specifier: ^5.4.4 + version: 5.4.4 + char-regex: + specifier: ^2.0.2 + version: 2.0.2 + chardet: + specifier: ^2.1.0 + version: 2.1.0 + cheerio: + specifier: ^1.0.0 + version: 1.0.0 + chokidar: + specifier: ^4.0.3 + version: 4.0.3 + chownr: + specifier: ^3.0.0 + version: 3.0.0 + chrome-trace-event: + specifier: ^1.0.4 + version: 1.0.4 + cjs-module-lexer: + specifier: ^2.1.0 + version: 2.1.0 + classnames: + specifier: ^2.5.1 + version: 2.5.1 + clean-css: + specifier: ^5.3.3 + version: 5.3.3 + clean-stack: + specifier: ^5.2.0 + version: 5.2.0 + cli-cursor: + specifier: ^5.0.0 + version: 5.0.0 + cli-spinners: + specifier: ^3.2.0 + version: 3.2.0 + cli-table3: + specifier: ^0.6.5 + version: 0.6.5 + cli-truncate: + specifier: ^4.0.0 + version: 4.0.0 + cli-width: + specifier: ^4.1.0 + version: 4.1.0 + cliui: + specifier: ^9.0.1 + version: 9.0.1 + clone: + specifier: ^2.1.2 + version: 2.1.2 + clone-deep: + specifier: ^4.0.1 + version: 4.0.1 + clsx: + specifier: ^2.1.1 + version: 2.1.1 + co: + specifier: ^4.6.0 + version: 4.6.0 + collect-v8-coverage: + specifier: ^1.0.2 + version: 1.0.2 + color: + specifier: ^5.0.0 + version: 5.0.0 + color-convert: + specifier: ^3.0.1 + version: 3.0.1 + color-name: + specifier: ^2.0.0 + version: 2.0.0 + color-string: + specifier: ^2.0.1 + version: 2.0.1 + colorette: + specifier: ^2.0.20 + version: 2.0.20 + colors: + specifier: ^1.4.0 + version: 1.4.0 + combined-stream: + specifier: ^1.0.8 + version: 1.0.8 + commander: + specifier: ^13.1.0 + version: 13.1.0 + commondir: + specifier: ^1.0.1 + version: 1.0.1 + component-emitter: + specifier: ^2.0.0 + version: 2.0.0 + compression: + specifier: ^1.8.0 + version: 1.8.0(supports-color@10.0.0) + concat-map: + specifier: ^0.0.2 + version: 0.0.2 + concat-stream: + specifier: ^2.0.0 + version: 2.0.0 + configstore: + specifier: ^7.0.0 + version: 7.0.0 + connect: + specifier: ^3.7.0 + version: 3.7.0(supports-color@10.0.0) + consola: + specifier: ^3.4.2 + version: 3.4.2 + content-disposition: + specifier: ^0.5.4 + version: 0.5.4 + content-type: + specifier: ^1.0.5 + version: 1.0.5 + convert-source-map: + specifier: ^2.0.0 + version: 2.0.0 + cookie: + specifier: ^1.0.2 + version: 1.0.2 + cookie-parser: + specifier: ^1.4.7 + version: 1.4.7 + cookie-signature: + specifier: ^1.2.2 + version: 1.2.2 + core-js: + specifier: ^3.41.0 + version: 3.41.0 + core-js-compat: + specifier: ^3.41.0 + version: 3.41.0 + core-util-is: + specifier: ^1.0.3 + version: 1.0.3 + cors: + specifier: ^2.8.5 + version: 2.8.5 + cosmiconfig: + specifier: ^9.0.0 + version: 9.0.0(typescript@5.8.2) + create-require: + specifier: ^1.1.1 + version: 1.1.1 + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + cross-fetch: + specifier: ^4.1.0 + version: 4.1.0(encoding@0.1.13) + cross-spawn: + specifier: ^7.0.6 + version: 7.0.6 + crypto-js: + specifier: ^4.2.0 + version: 4.2.0 + css-loader: + specifier: ^7.1.2 + version: 7.1.2(webpack@5.98.0) + css-select: + specifier: ^5.1.0 + version: 5.1.0 + css-tree: + specifier: ^3.1.0 + version: 3.1.0 + css-what: + specifier: ^6.1.0 + version: 6.1.0 + cssesc: + specifier: ^3.0.0 + version: 3.0.0 + cssnano: + specifier: ^7.0.6 + version: 7.0.6(postcss@8.4.33) + cssom: + specifier: ^0.5.0 + version: 0.5.0 + cssstyle: + specifier: ^4.3.0 + version: 4.3.0 + d3-array: + specifier: ^3.2.4 + version: 3.2.4 + d3-scale: + specifier: ^4.0.2 + version: 4.0.2 + data-uri-to-buffer: + specifier: ^6.0.2 + version: 6.0.2 + data-urls: + specifier: ^5.0.0 + version: 5.0.0 + data-view-buffer: + specifier: ^1.0.2 + version: 1.0.2 + data-view-byte-length: + specifier: ^1.0.2 + version: 1.0.2 + data-view-byte-offset: + specifier: ^1.0.1 + version: 1.0.1 + date-fns: + specifier: ^4.1.0 + version: 4.1.0 + dateformat: + specifier: ^5.0.3 + version: 5.0.3 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + debug: + specifier: ^4.4.0 + version: 4.4.0(supports-color@10.0.0) + decamelize: + specifier: ^6.0.0 + version: 6.0.0 + decimal.js: + specifier: 10.4.3 + version: 10.4.3 + decompress-response: + specifier: ^9.0.0 + version: 9.0.0 + dedent: + specifier: ^1.5.3 + version: 1.5.3(babel-plugin-macros@3.1.0) + deep-eql: + specifier: ^5.0.2 + version: 5.0.2 + deep-equal: + specifier: ^2.2.3 + version: 2.2.3 + deep-extend: + specifier: ^0.6.0 + version: 0.6.0 + deep-is: + specifier: ^0.1.4 + version: 0.1.4 + deepmerge: + specifier: ^4.3.1 + version: 4.3.1 + defaults: + specifier: ^3.0.0 + version: 3.0.0 + define-data-property: + specifier: ^1.1.4 + version: 1.1.4 + define-lazy-prop: + specifier: ^3.0.0 + version: 3.0.0 + define-properties: + specifier: ^1.2.1 + version: 1.2.1 + delayed-stream: + specifier: ^1.0.0 + version: 1.0.0 + depd: + specifier: ^2.0.0 + version: 2.0.0 + destroy: + specifier: ^1.2.0 + version: 1.2.0 + detect-indent: + specifier: ^7.0.1 + version: 7.0.1 + detect-libc: + specifier: ^2.0.3 + version: 2.0.3 + detect-newline: + specifier: ^4.0.1 + version: 4.0.1 + diff: + specifier: ^7.0.0 + version: 7.0.0 + diff-sequences: + specifier: ^29.6.3 + version: 29.6.3 + dir-glob: + specifier: ^3.0.1 + version: 3.0.1 + doctrine: + specifier: ^3.0.0 + version: 3.0.0 + dom-accessibility-api: + specifier: ^0.7.0 + version: 0.7.0 + dom-serializer: + specifier: ^2.0.0 + version: 2.0.0 + domelementtype: + specifier: ^2.3.0 + version: 2.3.0 + domhandler: + specifier: ^5.0.3 + version: 5.0.3 + dompurify: + specifier: ^3.2.4 + version: 3.2.4 + domutils: + specifier: ^3.2.2 + version: 3.2.2 + dot-prop: + specifier: ^9.0.0 + version: 9.0.0 + dotenv: + specifier: ^16.4.7 + version: 16.4.7 + dotenv-expand: + specifier: ^12.0.1 + version: 12.0.1 + duplexer: + specifier: ^0.1.2 + version: 0.1.2 + eastasianwidth: + specifier: ^0.3.0 + version: 0.3.0 + ee-first: + specifier: ^1.1.1 + version: 1.1.1 + ejs: + specifier: ^3.1.10 + version: 3.1.10 + electron-to-chromium: + specifier: ^1.5.123 + version: 1.5.123 + elliptic: + specifier: ^6.6.1 + version: 6.6.1 + emittery: + specifier: ^1.1.0 + version: 1.1.0 + emoji-regex: + specifier: ^10.4.0 + version: 10.4.0 + encodeurl: + specifier: ^2.0.0 + version: 2.0.0 + encoding: + specifier: ^0.1.13 + version: 0.1.13 + end-of-stream: + specifier: ^1.4.4 + version: 1.4.4 + enhanced-resolve: + specifier: ^5.17.1 + version: 5.18.1 + enquirer: + specifier: ^2.4.1 + version: 2.4.1 + entities: + specifier: ^6.0.0 + version: 6.0.0 + env-paths: + specifier: ^3.0.0 + version: 3.0.0 + envinfo: + specifier: ^7.14.0 + version: 7.14.0 + error-ex: + specifier: ^1.3.2 + version: 1.3.2 + error-stack-parser: + specifier: ^2.1.4 + version: 2.1.4 + es-abstract: + specifier: ^1.23.9 + version: 1.23.9 + es-define-property: + specifier: ^1.0.1 + version: 1.0.1 + es-errors: + specifier: ^1.3.0 + version: 1.3.0 + es-iterator-helpers: + specifier: ^1.2.1 + version: 1.2.1 + es-module-lexer: + specifier: ^1.6.0 + version: 1.6.0 + es-object-atoms: + specifier: ^1.1.1 + version: 1.1.1 + es-set-tostringtag: + specifier: ^2.1.0 + version: 2.1.0 + es-shim-unscopables: + specifier: ^1.1.0 + version: 1.1.0 + es-to-primitive: + specifier: ^1.3.0 + version: 1.3.0 + es6-promise: + specifier: ^4.2.8 + version: 4.2.8 + esbuild: + specifier: ^0.25.1 + version: 0.25.1 + escalade: + specifier: ^3.2.0 + version: 3.2.0 + escape-html: + specifier: ^1.0.3 + version: 1.0.3 + escape-string-regexp: + specifier: ^5.0.0 + version: 5.0.0 + eslint: + specifier: ^9.23.0 + version: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + eslint-config-prettier: + specifier: ^10.1.1 + version: 10.1.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint-import-resolver-node: + specifier: ^0.3.9 + version: 0.3.9(supports-color@10.0.0) + eslint-import-resolver-typescript: + specifier: ^4.2.2 + version: 4.2.3(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) + eslint-plugin-import: + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.2.3)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) + eslint-plugin-jest: + specifier: ^28.11.0 + version: 28.11.0(@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(supports-color@10.0.0)(typescript@5.8.2) + eslint-plugin-jsx-a11y: + specifier: ^6.10.2 + version: 6.10.2(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint-plugin-prettier: + specifier: ^5.2.4 + version: 5.2.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(prettier@3.5.3) + eslint-plugin-promise: + specifier: ^7.2.1 + version: 7.2.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint-plugin-react: + specifier: ^7.37.4 + version: 7.37.4(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint-plugin-react-hooks: + specifier: ^5.2.0 + version: 5.2.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint-scope: + specifier: ^8.3.0 + version: 8.3.0 + eslint-visitor-keys: + specifier: ^4.2.0 + version: 4.2.0 + espree: + specifier: ^10.3.0 + version: 10.3.0 + esprima: + specifier: ^4.0.1 + version: 4.0.1 + esquery: + specifier: ^1.6.0 + version: 1.6.0 + esrecurse: + specifier: ^4.3.0 + version: 4.3.0 + estraverse: + specifier: ^5.3.0 + version: 5.3.0 + estree-walker: + specifier: ^3.0.3 + version: 3.0.3 + etag: + specifier: ^1.8.1 + version: 1.8.1 + event-target-shim: + specifier: ^6.0.2 + version: 6.0.2 + eventemitter2: + specifier: ^6.4.9 + version: 6.4.9 + eventemitter3: + specifier: ^5.0.1 + version: 5.0.1 + events: + specifier: ^3.3.0 + version: 3.3.0 + execa: + specifier: ^9.5.2 + version: 9.5.2 + exit: + specifier: ^0.1.2 + version: 0.1.2 + expect: + specifier: ^29.7.0 + version: 29.7.0 + express: + specifier: ^4.21.2 + version: 4.21.2(supports-color@10.0.0) + extend: + specifier: ^3.0.2 + version: 3.0.2 + extend-shallow: + specifier: ^3.0.2 + version: 3.0.2 + external-editor: + specifier: ^3.1.0 + version: 3.1.0 + fast-deep-equal: + specifier: ^3.1.3 + version: 3.1.3 + fast-diff: + specifier: ^1.3.0 + version: 1.3.0 + fast-glob: + specifier: ^3.3.3 + version: 3.3.3 + fast-json-stable-stringify: + specifier: ^2.1.0 + version: 2.1.0 + fast-levenshtein: + specifier: ^3.0.0 + version: 3.0.0 + fast-xml-parser: + specifier: ^5.0.9 + version: 5.0.9 + fastq: + specifier: ^1.19.1 + version: 1.19.1 + fb-watchman: + specifier: ^2.0.2 + version: 2.0.2 + figlet: + specifier: ^1.8.0 + version: 1.8.0 + file-entry-cache: + specifier: ^10.0.7 + version: 10.0.7 + file-type: + specifier: ^20.4.1 + version: 20.4.1(supports-color@10.0.0) + filesize: + specifier: ^10.1.6 + version: 10.1.6 + fill-range: + specifier: ^7.1.1 + version: 7.1.1 + finalhandler: + specifier: ^2.1.0 + version: 2.1.0(supports-color@10.0.0) + find-cache-dir: + specifier: ^5.0.0 + version: 5.0.0 + find-up: + specifier: ^7.0.0 + version: 7.0.0 + flat: + specifier: ^6.0.1 + version: 6.0.1 + flat-cache: + specifier: ^6.1.7 + version: 6.1.7 + flatted: + specifier: ^3.3.3 + version: 3.3.3 + follow-redirects: + specifier: ^1.15.9 + version: 1.15.9(debug@4.4.0(supports-color@10.0.0)) + for-each: + specifier: ^0.3.5 + version: 0.3.5 + for-in: + specifier: ^1.0.2 + version: 1.0.2 + foreground-child: + specifier: ^3.3.1 + version: 3.3.1 + form-data: + specifier: ^4.0.2 + version: 4.0.2 + forwarded: + specifier: ^0.2.0 + version: 0.2.0 + fraction.js: + specifier: ^5.2.1 + version: 5.2.1 + framer-motion: + specifier: ^12.5.0 + version: 12.6.0(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + fresh: + specifier: ^0.5.2 + version: 0.5.2 + fs-extra: + specifier: ^11.3.0 + version: 11.3.0 + fs-minipass: + specifier: ^3.0.3 + version: 3.0.3 + fs.realpath: + specifier: ^1.0.0 + version: 1.0.0 + function-bind: + specifier: ^1.1.2 + version: 1.1.2 + function.prototype.name: + specifier: ^1.1.8 + version: 1.1.8 + functions-have-names: + specifier: ^1.2.3 + version: 1.2.3 + gensync: + specifier: 1.0.0-beta.2 + version: 1.0.0-beta.2 + get-caller-file: + specifier: ^2.0.5 + version: 2.0.5 + get-intrinsic: + specifier: ^1.3.0 + version: 1.3.0 + get-package-type: + specifier: ^0.1.0 + version: 0.1.0 + get-stdin: + specifier: ^9.0.0 + version: 9.0.0 + get-stream: + specifier: ^9.0.1 + version: 9.0.1 + get-symbol-description: + specifier: ^1.1.0 + version: 1.1.0 + get-tsconfig: + specifier: ^4.10.0 + version: 4.10.0 + get-value: + specifier: ^4.0.1 + version: 4.0.1 + glob: + specifier: ^11.0.1 + version: 11.0.1 + glob-parent: + specifier: ^6.0.2 + version: 6.0.2 + global-prefix: + specifier: ^4.0.0 + version: 4.0.0 + globals: + specifier: ^16.0.0 + version: 16.0.0 + globalthis: + specifier: ^1.0.4 + version: 1.0.4 + globby: + specifier: ^14.1.0 + version: 14.1.0 + google-auth-library: + specifier: ^9.15.1 + version: 9.15.1(encoding@0.1.13)(supports-color@10.0.0) + gopd: + specifier: ^1.2.0 + version: 1.2.0 + got: + specifier: ^14.4.6 + version: 14.4.6 + graceful-fs: + specifier: ^4.2.11 + version: 4.2.11 + graphemer: + specifier: ^1.4.0 + version: 1.4.0 + graphql: + specifier: ^16.10.0 + version: 16.10.0 + handlebars: + specifier: ^4.7.8 + version: 4.7.8 + has-bigints: + specifier: ^1.1.0 + version: 1.1.0 + has-flag: + specifier: ^5.0.1 + version: 5.0.1 + has-property-descriptors: + specifier: ^1.0.2 + version: 1.0.2 + has-proto: + specifier: ^1.2.0 + version: 1.2.0 + has-symbols: + specifier: ^1.1.0 + version: 1.1.0 + has-tostringtag: + specifier: ^1.0.2 + version: 1.0.2 + hash.js: + specifier: ^1.1.7 + version: 1.1.7 + hasown: + specifier: ^2.0.2 + version: 2.0.2 + he: + specifier: ^1.2.0 + version: 1.2.0 + highlight.js: + specifier: ^11.11.1 + version: 11.11.1 + hosted-git-info: + specifier: ^8.0.2 + version: 8.0.2 + html-entities: + specifier: ^2.5.3 + version: 2.5.3 + html-escaper: + specifier: ^3.0.3 + version: 3.0.3 + html-webpack-plugin: + specifier: ^5.6.3 + version: 5.6.3(webpack@5.98.0) + htmlparser2: + specifier: ^10.0.0 + version: 10.0.0 + http-cache-semantics: + specifier: ^4.1.1 + version: 4.1.1 + http-errors: + specifier: ^2.0.0 + version: 2.0.0 + http-proxy-agent: + specifier: ^7.0.2 + version: 7.0.2(supports-color@10.0.0) + http-proxy-middleware: + specifier: ^3.0.3 + version: 3.0.3(supports-color@10.0.0) + http-signature: + specifier: ^1.4.0 + version: 1.4.0 + https-proxy-agent: + specifier: ^7.0.6 + version: 7.0.6(supports-color@10.0.0) + husky: + specifier: ^9.1.7 + version: 9.1.7 + i18next: + specifier: ^24.2.3 + version: 24.2.3(typescript@5.8.2) + iconv-lite: + specifier: ^0.6.3 + version: 0.6.3 + ieee754: + specifier: ^1.2.1 + version: 1.2.1 + ignore: + specifier: ^7.0.3 + version: 7.0.3 + image-size: + specifier: ^2.0.1 + version: 2.0.1 + immer: + specifier: ^10.1.1 + version: 10.1.1 + immutable: + specifier: ^5.0.3 + version: 5.0.3 + import-fresh: + specifier: ^3.3.1 + version: 3.3.1 + import-local: + specifier: ^3.2.0 + version: 3.2.0 + imurmurhash: + specifier: ^0.1.4 + version: 0.1.4 + indent-string: + specifier: ^5.0.0 + version: 5.0.0 + inherits: + specifier: ^2.0.4 + version: 2.0.4 + ini: + specifier: ^5.0.0 + version: 5.0.0 + inquirer: + specifier: ^12.5.0 + version: 12.5.0(@types/node@22.13.13) + internal-slot: + specifier: ^1.1.0 + version: 1.1.0 + interpret: + specifier: ^3.1.1 + version: 3.1.1 + ioredis: + specifier: ^5.6.0 + version: 5.6.0(supports-color@10.0.0) + ip-address: + specifier: ^10.0.1 + version: 10.0.1 + ipaddr.js: + specifier: 2.2.0 + version: 2.2.0 + is-array-buffer: + specifier: ^3.0.5 + version: 3.0.5 + is-arrayish: + specifier: ^0.3.2 + version: 0.3.2 + is-bigint: + specifier: ^1.1.0 + version: 1.1.0 + is-binary-path: + specifier: ^3.0.0 + version: 3.0.0 + is-callable: + specifier: ^1.2.7 + version: 1.2.7 + is-ci: + specifier: ^4.1.0 + version: 4.1.0 + is-core-module: + specifier: ^2.16.1 + version: 2.16.1 + is-data-view: + specifier: ^1.0.2 + version: 1.0.2 + is-docker: + specifier: ^3.0.0 + version: 3.0.0 + is-extendable: + specifier: ^1.0.1 + version: 1.0.1 + is-extglob: + specifier: ^2.1.1 + version: 2.1.1 + is-finalizationregistry: + specifier: ^1.1.1 + version: 1.1.1 + is-fullwidth-code-point: + specifier: ^5.0.0 + version: 5.0.0 + is-generator-fn: + specifier: ^3.0.0 + version: 3.0.0 + is-generator-function: + specifier: ^1.1.0 + version: 1.1.0 + is-glob: + specifier: ^4.0.3 + version: 4.0.3 + is-interactive: + specifier: ^2.0.0 + version: 2.0.0 + is-map: + specifier: ^2.0.3 + version: 2.0.3 + is-negative-zero: + specifier: ^2.0.3 + version: 2.0.3 + is-number: + specifier: ^7.0.0 + version: 7.0.0 + is-path-inside: + specifier: ^4.0.0 + version: 4.0.0 + is-plain-obj: + specifier: ^4.1.0 + version: 4.1.0 + is-plain-object: + specifier: ^5.0.0 + version: 5.0.0 + is-regex: + specifier: ^1.2.1 + version: 1.2.1 + is-set: + specifier: ^2.0.3 + version: 2.0.3 + is-shared-array-buffer: + specifier: ^1.0.4 + version: 1.0.4 + is-stream: + specifier: ^4.0.1 + version: 4.0.1 + is-typed-array: + specifier: ^1.1.15 + version: 1.1.15 + is-unicode-supported: + specifier: ^2.1.0 + version: 2.1.0 + is-weakmap: + specifier: ^2.0.2 + version: 2.0.2 + is-weakref: + specifier: ^1.1.1 + version: 1.1.1 + is-weakset: + specifier: ^2.0.4 + version: 2.0.4 + is-wsl: + specifier: ^3.1.0 + version: 3.1.0 + isarray: + specifier: ^2.0.5 + version: 2.0.5 + isexe: + specifier: ^3.1.1 + version: 3.1.1 + isobject: + specifier: ^4.0.0 + version: 4.0.0 + istanbul-lib-coverage: + specifier: ^3.2.2 + version: 3.2.2 + istanbul-lib-instrument: + specifier: ^6.0.3 + version: 6.0.3(supports-color@10.0.0) + istanbul-lib-report: + specifier: ^3.0.1 + version: 3.0.1 + istanbul-lib-source-maps: + specifier: ^5.0.6 + version: 5.0.6(supports-color@10.0.0) + istanbul-reports: + specifier: ^3.1.7 + version: 3.1.7 + iterator.prototype: + specifier: ^1.1.5 + version: 1.1.5 + jackspeak: + specifier: ^4.1.0 + version: 4.1.0 + jake: + specifier: ^10.9.2 + version: 10.9.2 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-changed-files: + specifier: ^29.7.0 + version: 29.7.0 + jest-circus: + specifier: ^29.7.0 + version: 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0) + jest-cli: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-config: + specifier: ^29.7.0 + version: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-diff: + specifier: ^29.7.0 + version: 29.7.0 + jest-docblock: + specifier: ^29.7.0 + version: 29.7.0 + jest-each: + specifier: ^29.7.0 + version: 29.7.0 + jest-environment-jsdom: + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + jest-environment-node: + specifier: ^29.7.0 + version: 29.7.0 + jest-get-type: + specifier: ^29.6.3 + version: 29.6.3 + jest-haste-map: + specifier: ^29.7.0 + version: 29.7.0 + jest-leak-detector: + specifier: ^29.7.0 + version: 29.7.0 + jest-matcher-utils: + specifier: ^29.7.0 + version: 29.7.0 + jest-message-util: + specifier: ^29.7.0 + version: 29.7.0 + jest-mock: + specifier: ^29.7.0 + version: 29.7.0 + jest-pnp-resolver: + specifier: ^1.2.3 + version: 1.2.3(jest-resolve@29.7.0) + jest-regex-util: + specifier: ^29.6.3 + version: 29.6.3 + jest-resolve: + specifier: ^29.7.0 + version: 29.7.0 + jest-resolve-dependencies: + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + jest-runner: + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + jest-runtime: + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + jest-snapshot: + specifier: ^29.7.0 + version: 29.7.0(supports-color@10.0.0) + jest-util: + specifier: ^29.7.0 + version: 29.7.0 + jest-validate: + specifier: ^29.7.0 + version: 29.7.0 + jest-watcher: + specifier: ^29.7.0 + version: 29.7.0 + jest-worker: + specifier: ^29.7.0 + version: 29.7.0 + jiti: + specifier: ^2.4.2 + version: 2.4.2 + joi: + specifier: ^17.13.3 + version: 17.13.3 + jose: + specifier: ^6.0.10 + version: 6.0.10 + jquery: + specifier: ^3.7.1 + version: 3.7.1 + js-cookie: + specifier: ^3.0.5 + version: 3.0.5 + js-tokens: + specifier: ^9.0.1 + version: 9.0.1 + js-yaml: + specifier: ^4.1.0 + version: 4.1.0 + jsbn: + specifier: ^1.1.0 + version: 1.1.0 + jsdom: + specifier: ^26.0.0 + version: 26.0.0(supports-color@10.0.0) + jsesc: + specifier: ^3.1.0 + version: 3.1.0 + json-buffer: + specifier: ^3.0.1 + version: 3.0.1 + json-parse-better-errors: + specifier: ^1.0.2 + version: 1.0.2 + json-parse-even-better-errors: + specifier: ^4.0.0 + version: 4.0.0 + json-schema-traverse: + specifier: ^1.0.0 + version: 1.0.0 + json-stable-stringify-without-jsonify: + specifier: ^1.0.1 + version: 1.0.1 + json5: + specifier: ^2.2.3 + version: 2.2.3 + jsonc-parser: + specifier: ^3.3.1 + version: 3.3.1 + jsonfile: + specifier: ^6.1.0 + version: 6.1.0 + jsonparse: + specifier: ^1.3.1 + version: 1.3.1 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + jsx-ast-utils: + specifier: ^3.3.5 + version: 3.3.5 + jszip: + specifier: ^3.10.1 + version: 3.10.1 + jws: + specifier: ^4.0.0 + version: 4.0.0 + jwt-decode: + specifier: ^4.0.0 + version: 4.0.0 + keyv: + specifier: ^5.3.2 + version: 5.3.2 + kind-of: + specifier: ^6.0.3 + version: 6.0.3 + kleur: + specifier: ^4.1.5 + version: 4.1.5 + koa: + specifier: ^2.16.0 + version: 2.16.0(supports-color@10.0.0) + less: + specifier: ^4.2.2 + version: 4.2.2 + less-loader: + specifier: ^12.2.0 + version: 12.2.0(less@4.2.2)(webpack@5.98.0) + levn: + specifier: ^0.4.1 + version: 0.4.1 + lilconfig: + specifier: ^3.1.3 + version: 3.1.3 + lines-and-columns: + specifier: ^2.0.4 + version: 2.0.4 + lint-staged: + specifier: ^15.5.0 + version: 15.5.0(supports-color@10.0.0) + listr2: + specifier: ^8.2.5 + version: 8.2.5 + load-json-file: + specifier: ^7.0.1 + version: 7.0.1 + loader-utils: + specifier: ^3.3.1 + version: 3.3.1 + locate-path: + specifier: ^7.2.0 + version: 7.2.0 + lodash: + specifier: ^4.17.21 + version: 4.17.21 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + lodash.camelcase: + specifier: ^4.3.0 + version: 4.3.0 + lodash.isequal: + specifier: ^4.5.0 + version: 4.5.0 + lodash.isplainobject: + specifier: ^4.0.6 + version: 4.0.6 + lodash.isstring: + specifier: ^4.0.1 + version: 4.0.1 + lodash.merge: + specifier: ^4.6.2 + version: 4.6.2 + log-symbols: + specifier: ^7.0.0 + version: 7.0.0 + log-update: + specifier: ^6.1.0 + version: 6.1.0 + log4js: + specifier: ^6.9.1 + version: 6.9.1(supports-color@10.0.0) + loglevel: + specifier: ^1.9.2 + version: 1.9.2 + long: + specifier: ^5.3.1 + version: 5.3.1 + loose-envify: + specifier: ^1.4.0 + version: 1.4.0 + lowercase-keys: + specifier: ^3.0.0 + version: 3.0.0 + lru-cache: + specifier: ^11.1.0 + version: 11.1.0 + luxon: + specifier: ^3.5.0 + version: 3.6.0 + magic-string: + specifier: ^0.30.17 + version: 0.30.17 + make-dir: + specifier: ^5.0.0 + version: 5.0.0 + make-error: + specifier: ^1.3.6 + version: 1.3.6 + map-obj: + specifier: ^5.0.2 + version: 5.0.2 + markdown-it: + specifier: ^14.1.0 + version: 14.1.0 + marked: + specifier: ^15.0.7 + version: 15.0.7 + md5: + specifier: ^2.3.0 + version: 2.3.0 + mdn-data: + specifier: ^2.18.0 + version: 2.18.0 + media-typer: + specifier: ^1.1.0 + version: 1.1.0 + memfs: + specifier: ^4.17.0 + version: 4.17.0 + meow: + specifier: ^13.2.0 + version: 13.2.0 + merge-descriptors: + specifier: ^2.0.0 + version: 2.0.0 + merge-stream: + specifier: ^2.0.0 + version: 2.0.0 + merge2: + specifier: ^1.4.1 + version: 1.4.1 + methods: + specifier: ^1.1.2 + version: 1.1.2 + micromatch: + specifier: ^4.0.8 + version: 4.0.8 + mime: + specifier: ^4.0.6 + version: 4.0.6 + mime-db: + specifier: ^1.54.0 + version: 1.54.0 + mime-types: + specifier: ^2.1.35 + version: 2.1.35 + mini-css-extract-plugin: + specifier: ^2.9.2 + version: 2.9.2(webpack@5.98.0) + minimalistic-assert: + specifier: ^1.0.1 + version: 1.0.1 + minimatch: + specifier: ^10.0.1 + version: 10.0.1 + minimist: + specifier: ^1.2.8 + version: 1.2.8 + minipass: + specifier: ^7.1.2 + version: 7.1.2 + minizlib: + specifier: ^3.0.1 + version: 3.0.1 + mitt: + specifier: ^3.0.1 + version: 3.0.1 + mkdirp: + specifier: ^3.0.1 + version: 3.0.1 + mocha: + specifier: ^11.1.0 + version: 11.1.0 + moment: + specifier: ^2.30.1 + version: 2.30.1 + moment-timezone: + specifier: ^0.5.48 + version: 0.5.48 + mongodb: + specifier: ^6.15.0 + version: 6.15.0(socks@2.8.4) + mongoose: + specifier: ^8.13.0 + version: 8.13.0(socks@2.8.4)(supports-color@10.0.0) + morgan: + specifier: ^1.10.0 + version: 1.10.0(supports-color@10.0.0) + ms: + specifier: ^2.1.3 + version: 2.1.3 + multer: + specifier: 1.4.5-lts.2 + version: 1.4.5-lts.2 + mustache: + specifier: ^4.2.0 + version: 4.2.0 + mute-stream: + specifier: ^2.0.0 + version: 2.0.0 + mz: + specifier: ^2.7.0 + version: 2.7.0 + nan: + specifier: ^2.22.2 + version: 2.22.2 + nanoid: + specifier: ^5.1.5 + version: 5.1.5 + natural-compare: + specifier: ^1.4.0 + version: 1.4.0 + negotiator: + specifier: ^1.0.0 + version: 1.0.0 + neo-async: + specifier: ^2.6.2 + version: 2.6.2 + next: + specifier: ^15.2.4 + version: 15.2.4(@babel/core@7.26.10(supports-color@10.0.0))(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(sass@1.86.0) + nice-try: + specifier: ^3.0.1 + version: 3.0.1 + node-addon-api: + specifier: ^8.3.1 + version: 8.3.1 + node-fetch: + specifier: ^3.3.2 + version: 3.3.2 + node-forge: + specifier: ^1.3.1 + version: 1.3.1 + node-gyp-build: + specifier: ^4.8.4 + version: 4.8.4 + node-int64: + specifier: ^0.4.0 + version: 0.4.0 + nodemailer: + specifier: ^6.10.0 + version: 6.10.0 + nodemon: + specifier: ^3.1.9 + version: 3.1.9 + nopt: + specifier: ^8.1.0 + version: 8.1.0 + normalize-package-data: + specifier: ^7.0.0 + version: 7.0.0 + normalize-path: + specifier: ^3.0.0 + version: 3.0.0 + normalize-range: + specifier: ^0.1.2 + version: 0.1.2 + normalize-url: + specifier: ^8.0.1 + version: 8.0.1 + npm: + specifier: ^11.2.0 + version: 11.2.0 + npm-package-arg: + specifier: ^12.0.2 + version: 12.0.2 + npm-run-path: + specifier: ^6.0.0 + version: 6.0.0 + nth-check: + specifier: ^2.1.1 + version: 2.1.1 + nwsapi: + specifier: ^2.2.19 + version: 2.2.19 + object-assign: + specifier: ^4.1.1 + version: 4.1.1 + object-hash: + specifier: ^3.0.0 + version: 3.0.0 + object-inspect: + specifier: ^1.13.4 + version: 1.13.4 + object-keys: + specifier: ^1.1.1 + version: 1.1.1 + object.assign: + specifier: ^4.1.7 + version: 4.1.7 + object.entries: + specifier: ^1.1.9 + version: 1.1.9 + object.fromentries: + specifier: ^2.0.8 + version: 2.0.8 + object.groupby: + specifier: ^1.0.3 + version: 1.0.3 + object.values: + specifier: ^1.2.1 + version: 1.2.1 + on-finished: + specifier: ^2.4.1 + version: 2.4.1 + on-headers: + specifier: ^1.0.2 + version: 1.0.2 + once: + specifier: ^1.4.0 + version: 1.4.0 + onetime: + specifier: ^7.0.0 + version: 7.0.0 + open: + specifier: ^10.1.0 + version: 10.1.0 + optionator: + specifier: ^0.9.4 + version: 0.9.4 + ora: + specifier: ^8.2.0 + version: 8.2.0 + p-cancelable: + specifier: ^4.0.1 + version: 4.0.1 + p-limit: + specifier: ^6.2.0 + version: 6.2.0 + p-locate: + specifier: ^6.0.0 + version: 6.0.0 + p-map: + specifier: ^7.0.3 + version: 7.0.3 + p-retry: + specifier: ^6.2.1 + version: 6.2.1 + p-try: + specifier: ^3.0.0 + version: 3.0.0 + pako: + specifier: ^2.1.0 + version: 2.1.0 + parse-json: + specifier: ^8.2.0 + version: 8.2.0 + parse5: + specifier: ^7.2.1 + version: 7.2.1 + parseurl: + specifier: ^1.3.3 + version: 1.3.3 + path: + specifier: ^0.12.7 + version: 0.12.7 + path-browserify: + specifier: ^1.0.1 + version: 1.0.1 + path-exists: + specifier: ^5.0.0 + version: 5.0.0 + path-key: + specifier: ^4.0.0 + version: 4.0.0 + path-parse: + specifier: ^1.0.7 + version: 1.0.7 + path-scurry: + specifier: ^2.0.0 + version: 2.0.0 + path-to-regexp: + specifier: ^8.2.0 + version: 8.2.0 + path-type: + specifier: ^6.0.0 + version: 6.0.0 + pathe: + specifier: ^2.0.3 + version: 2.0.3 + performance-now: + specifier: ^2.1.0 + version: 2.1.0 + pg: + specifier: ^8.14.1 + version: 8.14.1 + picocolors: + specifier: ^1.1.1 + version: 1.1.1 + picomatch: + specifier: ^4.0.2 + version: 4.0.2 + pify: + specifier: ^6.1.0 + version: 6.1.0 + pino: + specifier: ^9.6.0 + version: 9.6.0 + pirates: + specifier: ^4.0.6 + version: 4.0.6 + pkg-dir: + specifier: ^8.0.0 + version: 8.0.0 + playwright: + specifier: ^1.51.1 + version: 1.51.1 + pluralize: + specifier: ^8.0.0 + version: 8.0.0 + pnpm: + specifier: ^10.6.5 + version: 10.6.5 + polished: + specifier: ^4.3.1 + version: 4.3.1 + possible-typed-array-names: + specifier: ^1.1.0 + version: 1.1.0 + postcss: + specifier: 8.4.33 + version: 8.4.33 + postcss-import: + specifier: ^16.1.0 + version: 16.1.0(postcss@8.4.33) + postcss-load-config: + specifier: ^6.0.1 + version: 6.0.1(jiti@2.4.2)(postcss@8.4.33)(yaml@2.7.0) + postcss-loader: + specifier: ^8.1.1 + version: 8.1.1(postcss@8.4.33)(typescript@5.8.2)(webpack@5.98.0) + postcss-nested: + specifier: ^7.0.2 + version: 7.0.2(postcss@8.4.33) + postcss-selector-parser: + specifier: ^7.1.0 + version: 7.1.0 + postcss-value-parser: + specifier: ^4.2.0 + version: 4.2.0 + prelude-ls: + specifier: ^1.2.1 + version: 1.2.1 + prettier: + specifier: ^3.5.3 + version: 3.5.3 + pretty-bytes: + specifier: ^6.1.1 + version: 6.1.1 + pretty-format: + specifier: ^29.7.0 + version: 29.7.0 + prismjs: + specifier: ^1.30.0 + version: 1.30.0 + process: + specifier: ^0.11.10 + version: 0.11.10 + process-nextick-args: + specifier: ^2.0.1 + version: 2.0.1 + progress: + specifier: ^2.0.3 + version: 2.0.3 + promise: + specifier: ^8.3.0 + version: 8.3.0 + promise-retry: + specifier: ^2.0.1 + version: 2.0.1 + prompts: + specifier: ^2.4.2 + version: 2.4.2 + prop-types: + specifier: ^15.8.1 + version: 15.8.1 + protobufjs: + specifier: ^7.4.0 + version: 7.4.0 + proxy-addr: + specifier: ^2.0.7 + version: 2.0.7 + proxy-from-env: + specifier: ^1.1.0 + version: 1.1.0 + psl: + specifier: ^1.15.0 + version: 1.15.0 + pump: + specifier: ^3.0.2 + version: 3.0.2 + punycode: + specifier: ^2.3.1 + version: 2.3.1 + qs: + specifier: ^6.14.0 + version: 6.14.0 + query-string: + specifier: ^9.1.1 + version: 9.1.1 + querystringify: + specifier: ^2.2.0 + version: 2.2.0 + queue-microtask: + specifier: ^1.2.3 + version: 1.2.3 + raf: + specifier: ^3.4.1 + version: 3.4.1 + ramda: + specifier: ^0.30.1 + version: 0.30.1 + randombytes: + specifier: ^2.1.0 + version: 2.1.0 + range-parser: + specifier: ^1.2.1 + version: 1.2.1 + raw-body: + specifier: ^3.0.0 + version: 3.0.0 + rc: + specifier: ^1.2.8 + version: 1.2.8 + react: + specifier: ^18.3.1 + version: 18.3.1 + react-dom: + specifier: ^19.0.0 + version: 19.0.0(react@18.3.1) + react-hook-form: + specifier: ^7.54.2 + version: 7.54.2(react@18.3.1) + react-is: + specifier: ^19.0.0 + version: 19.0.0 + react-redux: + specifier: ^9.2.0 + version: 9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1) + react-refresh: + specifier: ^0.16.0 + version: 0.16.0 + react-router: + specifier: ^7.4.0 + version: 7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + react-router-dom: + specifier: ^7.4.0 + version: 7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + react-transition-group: + specifier: ^4.4.5 + version: 4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + read-pkg: + specifier: ^9.0.1 + version: 9.0.1 + readable-stream: + specifier: ^4.7.0 + version: 4.7.0 + readdirp: + specifier: ^4.1.2 + version: 4.1.2 + recast: + specifier: ^0.23.11 + version: 0.23.11 + rechoir: + specifier: ^0.8.0 + version: 0.8.0 + redent: + specifier: ^4.0.0 + version: 4.0.0 + redux: + specifier: ^5.0.1 + version: 5.0.1 + redux-thunk: + specifier: ^3.1.0 + version: 3.1.0(redux@5.0.1) + reflect-metadata: + specifier: ^0.2.2 + version: 0.2.2 + reflect.getprototypeof: + specifier: ^1.0.10 + version: 1.0.10 + regenerate: + specifier: ^1.4.2 + version: 1.4.2 + regenerate-unicode-properties: + specifier: ^10.2.0 + version: 10.2.0 + regenerator-runtime: + specifier: ^0.14.1 + version: 0.14.1 + regenerator-transform: + specifier: ^0.15.2 + version: 0.15.2 + regexp.prototype.flags: + specifier: ^1.5.4 + version: 1.5.4 + regexpu-core: + specifier: ^6.2.0 + version: 6.2.0 + regjsparser: + specifier: ^0.12.0 + version: 0.12.0 + repeat-string: + specifier: ^1.6.1 + version: 1.6.1 + require-directory: + specifier: ^2.1.1 + version: 2.1.1 + require-from-string: + specifier: ^2.0.2 + version: 2.0.2 + require-main-filename: + specifier: ^2.0.0 + version: 2.0.0 + requires-port: + specifier: ^1.0.0 + version: 1.0.0 + reselect: + specifier: ^5.1.1 + version: 5.1.1 + resize-observer-polyfill: + specifier: ^1.5.1 + version: 1.5.1 + resolve: + specifier: ^1.22.10 + version: 1.22.10 + resolve-cwd: + specifier: ^3.0.0 + version: 3.0.0 + resolve-from: + specifier: ^5.0.0 + version: 5.0.0 + resolve.exports: + specifier: ^2.0.3 + version: 2.0.3 + responselike: + specifier: ^3.0.0 + version: 3.0.0 + restore-cursor: + specifier: ^5.1.0 + version: 5.1.0 + retry: + specifier: ^0.13.1 + version: 0.13.1 + reusify: + specifier: ^1.1.0 + version: 1.1.0 + rfdc: + specifier: ^1.4.1 + version: 1.4.1 + rimraf: + specifier: ^6.0.1 + version: 6.0.1 + rollup: + specifier: ^4.37.0 + version: 4.37.0 + run-async: + specifier: ^3.0.0 + version: 3.0.0 + run-parallel: + specifier: ^1.2.0 + version: 1.2.0 + rxjs: + specifier: ^7.8.2 + version: 7.8.2 + safe-array-concat: + specifier: ^1.1.3 + version: 1.1.3 + safe-buffer: + specifier: ^5.2.1 + version: 5.2.1 + safe-regex-test: + specifier: ^1.1.0 + version: 1.1.0 + safer-buffer: + specifier: ^2.1.2 + version: 2.1.2 + sass: + specifier: ^1.86.0 + version: 1.86.0 + sass-loader: + specifier: ^16.0.5 + version: 16.0.5(sass@1.86.0)(webpack@5.98.0) + sax: + specifier: ^1.4.1 + version: 1.4.1 + saxes: + specifier: ^6.0.0 + version: 6.0.0 + scheduler: + specifier: ^0.25.0 + version: 0.25.0 + schema-utils: + specifier: ^4.3.0 + version: 4.3.0 + semver: + specifier: ^7.7.1 + version: 7.7.1 + send: + specifier: ^1.1.0 + version: 1.1.0(supports-color@10.0.0) + serve-static: + specifier: ^1.16.2 + version: 1.16.2(supports-color@10.0.0) + set-blocking: + specifier: ^2.0.0 + version: 2.0.0 + set-function-length: + specifier: ^1.2.2 + version: 1.2.2 + set-function-name: + specifier: ^2.0.2 + version: 2.0.2 + set-value: + specifier: ^4.1.0 + version: 4.1.0 + setimmediate: + specifier: ^1.0.5 + version: 1.0.5 + setprototypeof: + specifier: ^1.2.0 + version: 1.2.0 + shallow-clone: + specifier: ^3.0.1 + version: 3.0.1 + sharp: + specifier: ^0.33.5 + version: 0.33.5 + shebang-command: + specifier: ^2.0.0 + version: 2.0.0 + shebang-regex: + specifier: ^4.0.0 + version: 4.0.0 + shell-quote: + specifier: ^1.8.2 + version: 1.8.2 + shelljs: + specifier: ^0.9.2 + version: 0.9.2 + side-channel: + specifier: ^1.1.0 + version: 1.1.0 + signal-exit: + specifier: ^4.1.0 + version: 4.1.0 + simple-git: + specifier: ^3.27.0 + version: 3.27.0(supports-color@10.0.0) + sisteransi: + specifier: ^1.0.5 + version: 1.0.5 + slash: + specifier: ^5.1.0 + version: 5.1.0 + slice-ansi: + specifier: ^7.1.0 + version: 7.1.0 + smart-buffer: + specifier: ^4.2.0 + version: 4.2.0 + socket.io: + specifier: ^4.8.1 + version: 4.8.1(supports-color@10.0.0) + socket.io-client: + specifier: ^4.8.1 + version: 4.8.1(supports-color@10.0.0) + socks: + specifier: ^2.8.4 + version: 2.8.4 + socks-proxy-agent: + specifier: ^8.0.5 + version: 8.0.5(supports-color@10.0.0) + source-map: + specifier: ^0.7.4 + version: 0.7.4 + source-map-js: + specifier: ^1.2.1 + version: 1.2.1 + source-map-support: + specifier: ^0.5.21 + version: 0.5.21 + spdx-correct: + specifier: ^3.2.0 + version: 3.2.0 + spdx-expression-parse: + specifier: ^4.0.0 + version: 4.0.0 + split2: + specifier: ^4.2.0 + version: 4.2.0 + sprintf-js: + specifier: ^1.1.3 + version: 1.1.3 + sshpk: + specifier: ^1.18.0 + version: 1.18.0 + ssri: + specifier: ^12.0.0 + version: 12.0.0 + stack-utils: + specifier: ^2.0.6 + version: 2.0.6 + statuses: + specifier: ^2.0.1 + version: 2.0.1 + stream-browserify: + specifier: ^3.0.0 + version: 3.0.0 + string-length: + specifier: ^6.0.0 + version: 6.0.0 + string-width: + specifier: ^7.2.0 + version: 7.2.0 + string.prototype.matchall: + specifier: ^4.0.12 + version: 4.0.12 + string.prototype.trim: + specifier: ^1.2.10 + version: 1.2.10 + string.prototype.trimend: + specifier: ^1.0.9 + version: 1.0.9 + string.prototype.trimstart: + specifier: ^1.0.8 + version: 1.0.8 + string_decoder: + specifier: ^1.3.0 + version: 1.3.0 + strip-ansi: + specifier: ^7.1.0 + version: 7.1.0 + strip-bom: + specifier: ^5.0.0 + version: 5.0.0 + strip-final-newline: + specifier: ^4.0.0 + version: 4.0.0 + strip-indent: + specifier: ^4.0.0 + version: 4.0.0 + strip-json-comments: + specifier: ^5.0.1 + version: 5.0.1 + style-loader: + specifier: ^4.0.0 + version: 4.0.0(webpack@5.98.0) + sucrase: + specifier: ^3.35.0 + version: 3.35.0 + superagent: + specifier: ^10.2.0 + version: 10.2.0(supports-color@10.0.0) + supports-color: + specifier: ^10.0.0 + version: 10.0.0 + supports-preserve-symlinks-flag: + specifier: ^1.0.0 + version: 1.0.0 + svgo: + specifier: ^3.3.2 + version: 3.3.2 + symbol-tree: + specifier: ^3.2.4 + version: 3.2.4 + tailwind-merge: + specifier: ^3.0.2 + version: 3.0.2 + tailwindcss: + specifier: ^4.0.15 + version: 4.0.16 + tapable: + specifier: ^2.2.1 + version: 2.2.1 + tar: + specifier: ^7.4.3 + version: 7.4.3 + tar-stream: + specifier: ^3.1.7 + version: 3.1.7 + terser-webpack-plugin: + specifier: ^5.3.14 + version: 5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0) + test-exclude: + specifier: ^7.0.1 + version: 7.0.1 + text-table: + specifier: ^0.2.0 + version: 0.2.0 + thenify: + specifier: ^3.3.1 + version: 3.3.1 + thenify-all: + specifier: ^1.6.0 + version: 1.6.0 + through: + specifier: ^2.3.8 + version: 2.3.8 + through2: + specifier: ^4.0.2 + version: 4.0.2 + tiny-invariant: + specifier: ^1.3.3 + version: 1.3.3 + tiny-warning: + specifier: ^1.0.3 + version: 1.0.3 + tmp: + specifier: ^0.2.3 + version: 0.2.3 + tmpl: + specifier: ^1.0.5 + version: 1.0.5 + to-regex-range: + specifier: ^5.0.1 + version: 5.0.1 + toidentifier: + specifier: ^1.0.1 + version: 1.0.1 + tough-cookie: + specifier: ^5.1.2 + version: 5.1.2 + tr46: + specifier: ^5.1.0 + version: 5.1.0 + tree-kill: + specifier: ^1.2.2 + version: 1.2.2 + ts-api-utils: + specifier: ^2.1.0 + version: 2.1.0(typescript@5.8.2) + ts-jest: + specifier: ^29.3.0 + version: 29.3.0(@babel/core@7.26.10(supports-color@10.0.0))(@jest/transform@29.7.0(supports-color@10.0.0))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(typescript@5.8.2) + ts-loader: + specifier: ^9.5.2 + version: 9.5.2(typescript@5.8.2)(webpack@5.98.0) + ts-node: + specifier: ^10.9.2 + version: 10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2) + tsconfig-paths: + specifier: ^4.2.0 + version: 4.2.0 + tslib: + specifier: ^2.8.1 + version: 2.8.1 + tweetnacl: + specifier: ^1.0.3 + version: 1.0.3 + type-check: + specifier: ^0.4.0 + version: 0.4.0 + type-detect: + specifier: ^4.1.0 + version: 4.1.0 + type-is: + specifier: ^1.6.18 + version: 1.6.18 + typed-array-buffer: + specifier: ^1.0.3 + version: 1.0.3 + typed-array-byte-length: + specifier: ^1.0.3 + version: 1.0.3 + typed-array-byte-offset: + specifier: ^1.0.4 + version: 1.0.4 + typed-array-length: + specifier: ^1.0.7 + version: 1.0.7 + typedarray: + specifier: ^0.0.7 + version: 0.0.7 + typedarray-to-buffer: + specifier: ^4.0.0 + version: 4.0.0 + typescript: + specifier: ^5.6.2 + version: 5.8.2 + ua-parser-js: + specifier: ^2.0.3 + version: 2.0.3(encoding@0.1.13) + unbox-primitive: + specifier: ^1.1.0 + version: 1.1.0 + underscore: + specifier: ^1.13.7 + version: 1.13.7 + undici: + specifier: ^7.5.0 + version: 7.5.0 + unicode-canonical-property-names-ecmascript: + specifier: ^2.0.1 + version: 2.0.1 + unicode-match-property-ecmascript: + specifier: ^2.0.0 + version: 2.0.0 + unicode-match-property-value-ecmascript: + specifier: ^2.2.0 + version: 2.2.0 + unicode-property-aliases-ecmascript: + specifier: ^2.1.0 + version: 2.1.0 + unified: + specifier: ^11.0.5 + version: 11.0.5 + unique-filename: + specifier: ^4.0.0 + version: 4.0.0 + unique-slug: + specifier: ^5.0.0 + version: 5.0.0 + unique-string: + specifier: ^3.0.0 + version: 3.0.0 + unist-util-visit: + specifier: ^5.0.0 + version: 5.0.0 + unpipe: + specifier: ^1.0.0 + version: 1.0.0 + update-browserslist-db: + specifier: ^1.1.3 + version: 1.1.3(browserslist@4.24.4) + update-notifier: + specifier: ^7.3.1 + version: 7.3.1 + uri-js: + specifier: ^4.4.1 + version: 4.4.1 + url: + specifier: ^0.11.4 + version: 0.11.4 + url-join: + specifier: ^5.0.0 + version: 5.0.0 + url-parse: + specifier: ^1.5.10 + version: 1.5.10 + use-sync-external-store: + specifier: ^1.4.0 + version: 1.4.0(react@18.3.1) + util-deprecate: + specifier: ^1.0.2 + version: 1.0.2 + utils-merge: + specifier: ^1.0.1 + version: 1.0.1 + uuid: + specifier: ^11.1.0 + version: 11.1.0 + v8-compile-cache-lib: + specifier: ^3.0.1 + version: 3.0.1 + v8-to-istanbul: + specifier: ^9.3.0 + version: 9.3.0 + validate-npm-package-license: + specifier: ^3.0.4 + version: 3.0.4 + validate-npm-package-name: + specifier: ^6.0.0 + version: 6.0.0 + validator: + specifier: ^13.15.0 + version: 13.15.0 + vary: + specifier: ^1.1.2 + version: 1.1.2 + verror: + specifier: ^1.10.1 + version: 1.10.1 + vite: + specifier: ^6.2.3 + version: 6.2.3(@types/node@22.13.13)(jiti@2.4.2)(less@4.2.2)(sass@1.86.0)(terser@5.39.0)(yaml@2.7.0) + vue: + specifier: ^3.5.13 + version: 3.5.13(typescript@5.8.2) + vue-router: + specifier: ^4.5.0 + version: 4.5.0(vue@3.5.13(typescript@5.8.2)) + w3c-xmlserializer: + specifier: ^5.0.0 + version: 5.0.0 + walker: + specifier: ^1.0.8 + version: 1.0.8 + watchpack: + specifier: ^2.4.2 + version: 2.4.2 + wcwidth: + specifier: ^1.0.1 + version: 1.0.1 + web-vitals: + specifier: ^4.2.4 + version: 4.2.4 + webidl-conversions: + specifier: ^7.0.0 + version: 7.0.0 + webpack: + specifier: ^5.98.0 + version: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-cli: + specifier: ^6.0.1 + version: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + webpack-dev-server: + specifier: ^5.2.0 + version: 5.2.0(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) + webpack-merge: + specifier: ^6.0.1 + version: 6.0.1 + webpack-sources: + specifier: ^3.2.3 + version: 3.2.3 + whatwg-encoding: + specifier: ^3.1.1 + version: 3.1.1 + whatwg-fetch: + specifier: ^3.6.20 + version: 3.6.20 + whatwg-mimetype: + specifier: ^4.0.0 + version: 4.0.0 + whatwg-url: + specifier: ^14.2.0 + version: 14.2.0 + which: + specifier: ^5.0.0 + version: 5.0.0 + which-boxed-primitive: + specifier: ^1.1.1 + version: 1.1.1 + which-builtin-type: + specifier: ^1.2.1 + version: 1.2.1 + which-collection: + specifier: ^1.0.2 + version: 1.0.2 + which-typed-array: + specifier: ^1.1.19 + version: 1.1.19 + winston: + specifier: ^3.17.0 + version: 3.17.0 + word-wrap: + specifier: ^1.2.5 + version: 1.2.5 + wordwrap: + specifier: ^1.0.0 + version: 1.0.0 + wrap-ansi: + specifier: ^9.0.0 + version: 9.0.0 + wrappy: + specifier: ^1.0.2 + version: 1.0.2 + write-file-atomic: + specifier: ^6.0.0 + version: 6.0.0 + ws: + specifier: ^8.18.1 + version: 8.18.1 + xml-name-validator: + specifier: ^5.0.0 + version: 5.0.0 + xml2js: + specifier: ^0.6.2 + version: 0.6.2 + xmlbuilder: + specifier: ^15.1.1 + version: 15.1.1 + xtend: + specifier: ^4.0.2 + version: 4.0.2 + y18n: + specifier: ^5.0.8 + version: 5.0.8 + yallist: + specifier: ^5.0.0 + version: 5.0.0 + yaml: + specifier: ^2.7.0 + version: 2.7.0 + yargs: + specifier: ^17.7.2 + version: 17.7.2 + yargs-parser: + specifier: ^21.1.1 + version: 21.1.1 + yn: + specifier: ^5.0.0 + version: 5.0.0 + yocto-queue: + specifier: ^1.2.1 + version: 1.2.1 + yup: + specifier: ^1.6.1 + version: 1.6.1 + zod: + specifier: ^3.24.2 + version: 3.24.2 + zone.js: + specifier: ^0.15.0 + version: 0.15.0 + +packages: + + '@adobe/css-tools@4.4.2': + resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@angular-devkit/core@19.2.4': + resolution: {integrity: sha512-dL6AmCQsKh+CFVvO/jxX8qZpamVwt9r4iIo7fYcAI2+mTSDGxxBGWbS+onIfdPFuRp2HgKa+AT6WiHmRqu63AA==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'} + peerDependencies: + chokidar: ^4.0.0 + peerDependenciesMeta: + chokidar: + optional: true + + '@angular/common@19.2.3': + resolution: {integrity: sha512-cYOMRXFb6Sjtg9BI3bE/Ave+xU234jQmHYj7hBxr3MiqRSVJL4niy10KiA/Jiz6y76V5QfZfS+0aE65VuoqAvg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/core': 19.2.3 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/compiler@19.2.3': + resolution: {integrity: sha512-TL/JIU7vzSWD+IrMq2PAiHZi7IUFSRhdHo8q6/WuZ8SQmbuXCK2pJvHZpTtUdLswdPeD/UVhkhTAhQzEyEdZVg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + + '@angular/core@19.2.3': + resolution: {integrity: sha512-uNDbQBDWdAfL8JhgG2l9eTEbikovZ+SthLUKERyR4fL7AVGSx85LjNySRuq4WAL4eiD1cRN1UUgu8o+WKqF/ow==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + rxjs: ^6.5.3 || ^7.4.0 + zone.js: ~0.15.0 + + '@angular/forms@19.2.3': + resolution: {integrity: sha512-JEgNKiZd3taYBg9lsMvoana5cv1QGke8xkuryc9zesHPJjhw9QHllmDPOW2HyUuwPqXZ/YkHiuCMOk+4qPjsAw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.3 + '@angular/core': 19.2.3 + '@angular/platform-browser': 19.2.3 + rxjs: ^6.5.3 || ^7.4.0 + + '@angular/platform-browser-dynamic@19.2.3': + resolution: {integrity: sha512-PHmmtdGxSfe9HL8xR4g3PspnEaPqTEOGyzNviAHugfkZCgXCdSbYs36d3i0nPwhExMAeuIVXbbJyouDn2kyeOw==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.3 + '@angular/compiler': 19.2.3 + '@angular/core': 19.2.3 + '@angular/platform-browser': 19.2.3 + + '@angular/platform-browser@19.2.3': + resolution: {integrity: sha512-bz5mvUkCS8SxaMInjPgi/2dD7vpWkZePQesvr/bBRNQbYSE4cGTbovXcVl3X5hIxs5JoC6Het0lS2IxDq7j6qg==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/animations': 19.2.3 + '@angular/common': 19.2.3 + '@angular/core': 19.2.3 + peerDependenciesMeta: + '@angular/animations': + optional: true + + '@angular/router@19.2.3': + resolution: {integrity: sha512-yYVMT7CceKqE+fBXxkhkAqEQUEdY/BHtLQr1vP9rEnAf30vwKghDEresugfegY6Ch4IGKTBtDG/QGmxWszgUAQ==} + engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0} + peerDependencies: + '@angular/common': 19.2.3 + '@angular/core': 19.2.3 + '@angular/platform-browser': 19.2.3 + rxjs: ^6.5.3 || ^7.4.0 + + '@asamuzakjp/css-color@3.1.1': + resolution: {integrity: sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==} + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-s3@3.774.0': + resolution: {integrity: sha512-HQ5Xi01r/Pv2IpzPTf5acrN0g/yJQalheDCYbBSA8VU31zoYiT/w5kLFWYJHQDB2hRozh2DB/VC/VDmntkWXxA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso-oidc@3.774.0': + resolution: {integrity: sha512-HgkV8oQoZa7ZuxD6k9bSE6BFyvifSEwpz03MlzywUjp0/AV9KFpwEBRUyZDTxqS178rDIuqK6H/d7RfOrO7pVw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.774.0': + resolution: {integrity: sha512-bN+wd2gpTq+DNJ/fZdam/mX6K3TcVdZBIvxaVtg+imep6xAuRukdFhsoG0cDzk96+WHPCOhkyi+6lFljCof43Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sts@3.774.0': + resolution: {integrity: sha512-OjYVB5tfdJMsN3Up3YWqfDkan+eKVqDG8RNIUCIluBdOn2KeVF/xgAS3BcGorOZAv4cXri3qRzKm1MTXxF7zLQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.774.0': + resolution: {integrity: sha512-JDkAAlPyGWMX42L4Cv8mxybwHTOoFweNbNrOc5oQJhFxZAe1zkW4uLTEfr79vYhnXCFbThCyPpBotmo3U2vULA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.774.0': + resolution: {integrity: sha512-FkSDBi9Ly0bmzyrMDeqQq1lGsFMrrd/bIB3c9VD4Llh0sPLxB/DU31+VTPTuQ0pBPz4sX5Vay6tLy43DStzcFQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.774.0': + resolution: {integrity: sha512-iurWGQColf52HpHeHCQs/LnSjZ0Ufq3VtSQx/6QdZwIhmgbbqvGMAaBJg41SQjWhpqdufE96HzcaCJw/lnCefQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.774.0': + resolution: {integrity: sha512-+AsJOX9pGsnGPAC8wQw7LAO8ZfXzjXTjJxSP1fvg04PX7OBk4zwhVaryH6pu5raan+9cVbfEO1Z7EEMdkweGQA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.774.0': + resolution: {integrity: sha512-/t+TNhHNW6BNyf7Lgv6I0NUfFk6/dz4+6dUjopRxpDVJtp1YvNza0Zhl25ffRkqX4CKmuXyJYusDbbObcsncUA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.774.0': + resolution: {integrity: sha512-lycBRY1NeWa46LefN258m1MRVUPQgvf6TPA6ZYajyq6/dCr6BPeuUoUAyrzePTPlxV/M25YXNiyORHjjwlK0ug==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.774.0': + resolution: {integrity: sha512-j7vbGCWF6dVpd9qiT0PQGzY4NKf8KUa86sSoosGGbtu0dV9T/Y0s/fvPZ0F8ZyuPIKUMJaBpIJYZ/ECZRfT2mg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.774.0': + resolution: {integrity: sha512-kuE5Hdqm9xXdrYBWCU6l2aM3W3HBtZrIBgyf0y41LulJHwld1nvIySus/lILdzbipmUAv9FI07B8TF5y7p/aFA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-bucket-endpoint@3.734.0': + resolution: {integrity: sha512-etC7G18aF7KdZguW27GE/wpbrNmYLVT755EsFc8kXpZj8D6AFKxc7OuveinJmiy0bYXAMspJUWsF6CrGpOw6CQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-expect-continue@3.734.0': + resolution: {integrity: sha512-P38/v1l6HjuB2aFUewt7ueAW5IvKkFcv5dalPtbMGRhLeyivBOHwbCyuRKgVs7z7ClTpu9EaViEGki2jEQqEsQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.774.0': + resolution: {integrity: sha512-S0vs+U7sEZkRRnjf05KCbEHDduyxGgNPq+ZeaiyWbs5yTZ8wzSYrSzMAKcbCqAseNVYQbpGMXDh8tnzx6H/ihw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.774.0': + resolution: {integrity: sha512-7QHA0ZyEBVfyJqmIc0FW4MUtPdrWhDsHQudsvBCHFS+mqP5fhpU/o4e5RQ+0M7tQqDE65+8MrZRniRa+Txz3xA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-location-constraint@3.734.0': + resolution: {integrity: sha512-EJEIXwCQhto/cBfHdm3ZOeLxd2NlJD+X2F+ZTOxzokuhBtY0IONfC/91hOo5tWQweerojwshSMHRCKzRv1tlwg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.734.0': + resolution: {integrity: sha512-mUMFITpJUW3LcKvFok176eI5zXAUomVtahb9IQBwLzkqFYOrMJvWAvoV4yuxrJ8TlQBG8gyEnkb9SnhZvjg67w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.772.0': + resolution: {integrity: sha512-zg0LjJa4v7fcLzn5QzZvtVS+qyvmsnu7oQnb86l6ckduZpWDCDC9+A0ZzcXTrxblPCJd3JqkoG1+Gzi4S4Ny/Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.774.0': + resolution: {integrity: sha512-iMEaOj+S8LZfg7fZaSfXQ8YDtEfOSBiQUllyxzaVhSYlM7IeNDbpBdCWnRi34VrI1J1AuryMdX/foU9JNSTLXg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-ssec@3.734.0': + resolution: {integrity: sha512-d4yd1RrPW/sspEXizq2NSOUivnheac6LPeLSLnaeTbBG9g1KqIqvCzP1TfXEqv2CrWfHEsWtJpX7oyjySSPvDQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.774.0': + resolution: {integrity: sha512-SVDeBV6DESgc9zex1Wk5XYbUqRI1tmJYQor47uKqD18r6UaCpvzVOBP4x8l/6hteAYxsWER6ZZmsjBQkenEuFQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.774.0': + resolution: {integrity: sha512-00+UiYvxiZaDFVzn87kPpiZ/GiEWNaTNzC82C+bIyXt1M9AnAR6PAnnvMErTFwyG+Un6n2ai/I81wvJ1ftFmeQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/region-config-resolver@3.734.0': + resolution: {integrity: sha512-Lvj1kPRC5IuJBr9DyJ9T9/plkh+EfKLy+12s/mykOy1JaKHDpvj+XGy2YO6YgYVOb8JFtaqloid+5COtje4JTQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.774.0': + resolution: {integrity: sha512-vQwATjZfl5vxfO+BDUH7nUnhfKoIJMnBmOxmUh4N10PWlz3WWwkT/YtH79nVpr+y1eM6GQUSGuNa4Reda6SaFA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/token-providers@3.774.0': + resolution: {integrity: sha512-DDERwCduWFFXj7gx3qvnaB8GlnCUpQ8ZA03qI4QFokWu3EyHNK+hjp3nN5Dg81fI0Z82LRe30Q2uDsLBwNCZDg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.734.0': + resolution: {integrity: sha512-o11tSPTT70nAkGV1fN9wm/hAIiLPyWX6SuGf+9JyTp7S/rC2cFWhR26MvA69nplcjNaXVzB0f+QFrLXXjOqCrg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.723.0': + resolution: {integrity: sha512-ZhEfvUwNliOQROcAk34WJWVYTlTa4694kSVhDSjW6lE1bMataPnIN8A0ycukEzBXmd8ZSoBcQLn6lKGl7XIJ5w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.743.0': + resolution: {integrity: sha512-sN1l559zrixeh5x+pttrnd0A3+r34r0tmPkJ/eaaMaAzXqsmKU/xYre9K3FNnsSS1J1k4PEfk/nHDTVUgFYjnw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.723.0': + resolution: {integrity: sha512-Yf2CS10BqK688DRsrKI/EO6B8ff5J86NXe4C+VCysK7UOgN0l1zOTeTukZ3H8Q9tYYX3oaF1961o8vRkFm7Nmw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-user-agent-browser@3.734.0': + resolution: {integrity: sha512-xQTCus6Q9LwUuALW+S76OL0jcWtMOVu14q+GoLnWPUM7QeUw963oQcLhF7oq0CtaLLKyl4GOUfcwc773Zmwwng==} + + '@aws-sdk/util-user-agent-node@3.774.0': + resolution: {integrity: sha512-kFmnK4sf5Wco8mkzO2PszqDXEwtQ5H896tUxqWDQhk67NtOLsHYfg98ymOBWWudth2POaldiIx6KFXtg0DvLLQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/xml-builder@3.734.0': + resolution: {integrity: sha512-Zrjxi5qwGEcUsJ0ru7fRtW74WcTS0rbLcehoFB+rN1GRi2hbLcFaYs4PwVA5diLeAJH0gszv3x4Hr/S87MfbKQ==} + engines: {node: '>=18.0.0'} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.27.0': + resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.0': + resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.27.0': + resolution: {integrity: sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.27.0': + resolution: {integrity: sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.27.0': + resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.27.0': + resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-static-block@7.14.5': + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-private-property-in-object@7.14.5': + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.26.8': + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.27.0': + resolution: {integrity: sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-display-name@7.25.9': + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-development@7.25.9': + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.25.9': + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.27.0': + resolution: {integrity: sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-runtime@7.26.10': + resolution: {integrity: sha512-NWaL2qG6HRpONTnj4JvDU6th4jYeZOJgu3QhmFTCihib0ermtOJqktA5BduGm3suhhVe9EMP9c9+mfJ/I9slqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.27.0': + resolution: {integrity: sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typescript@7.27.0': + resolution: {integrity: sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.26.3': + resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-typescript@7.27.0': + resolution: {integrity: sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.27.0': + resolution: {integrity: sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.27.0': + resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.27.0': + resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.0': + resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/color-helpers@5.0.2': + resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.2': + resolution: {integrity: sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.8': + resolution: {integrity: sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@discoveryjs/json-ext@0.6.3': + resolution: {integrity: sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==} + engines: {node: '>=14.17.0'} + + '@emnapi/core@1.3.1': + resolution: {integrity: sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@emnapi/wasi-threads@1.0.1': + resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + + '@emotion/babel-plugin@11.13.5': + resolution: {integrity: sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==} + + '@emotion/cache@11.14.0': + resolution: {integrity: sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==} + + '@emotion/hash@0.9.2': + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} + + '@emotion/is-prop-valid@1.3.1': + resolution: {integrity: sha512-/ACwoqx7XQi9knQs/G0qKvv5teDMhD7bXYns9N/wM8ah8iNb8jZ2uNO0YOgiq2o2poIvVtJS2YALasQuMSQ7Kw==} + + '@emotion/memoize@0.9.0': + resolution: {integrity: sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==} + + '@emotion/react@11.14.0': + resolution: {integrity: sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==} + peerDependencies: + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/serialize@1.3.3': + resolution: {integrity: sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==} + + '@emotion/sheet@1.4.0': + resolution: {integrity: sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==} + + '@emotion/styled@11.14.0': + resolution: {integrity: sha512-XxfOnXFffatap2IyCeJyNov3kiDQWoR08gPUQxvbL7fxKryGBKUZUkG6Hz48DZwVrJSVh9sJboyV1Ds4OW6SgA==} + peerDependencies: + '@emotion/react': ^11.0.0-rc.0 + '@types/react': '*' + react: '>=16.8.0' + peerDependenciesMeta: + '@types/react': + optional: true + + '@emotion/unitless@0.10.0': + resolution: {integrity: sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0': + resolution: {integrity: sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==} + peerDependencies: + react: '>=16.8.0' + + '@emotion/utils@1.4.2': + resolution: {integrity: sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==} + + '@emotion/weak-memoize@0.4.0': + resolution: {integrity: sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==} + + '@esbuild/aix-ppc64@0.25.1': + resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.1': + resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.1': + resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.1': + resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.1': + resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.1': + resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.1': + resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.1': + resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.1': + resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.1': + resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.1': + resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.1': + resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.1': + resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.1': + resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.1': + resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.1': + resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.1': + resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.1': + resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.1': + resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.1': + resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.1': + resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.25.1': + resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.1': + resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.1': + resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.1': + resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.5.1': + resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.2': + resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.0': + resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.12.0': + resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.23.0': + resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.7': + resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@floating-ui/core@1.6.9': + resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==} + + '@floating-ui/dom@1.6.13': + resolution: {integrity: sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@graphql-tools/utils@10.8.6': + resolution: {integrity: sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ==} + engines: {node: '>=16.0.0'} + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@grpc/grpc-js@1.13.1': + resolution: {integrity: sha512-z5nNuIs75S73ZULjPDe5QCNTiCv7FyBZXEVWOyAHtcebnuJf0g1SuueI3U1/z/KK39XyAQRUC+C9ZQJOtgHynA==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.2': + resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + engines: {node: '>=18.18'} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@inquirer/checkbox@4.1.4': + resolution: {integrity: sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.8': + resolution: {integrity: sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/core@10.1.9': + resolution: {integrity: sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/editor@4.2.9': + resolution: {integrity: sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/expand@4.0.11': + resolution: {integrity: sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/figures@1.0.11': + resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} + engines: {node: '>=18'} + + '@inquirer/input@4.1.8': + resolution: {integrity: sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/number@3.0.11': + resolution: {integrity: sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/password@4.0.11': + resolution: {integrity: sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/prompts@7.4.0': + resolution: {integrity: sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/rawlist@4.0.11': + resolution: {integrity: sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/search@3.0.11': + resolution: {integrity: sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/select@4.1.0': + resolution: {integrity: sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/type@3.0.5': + resolution: {integrity: sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@ioredis/commands@1.2.0': + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.7.0': + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.7.0': + resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.7.0': + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.7.0': + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.7.0': + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.7.0': + resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.7.0': + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.7.0': + resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.3': + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.7.0': + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.7.0': + resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.7.0': + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.3': + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@jsonjoy.com/base64@1.1.2': + resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/json-pack@1.2.0': + resolution: {integrity: sha512-io1zEbbYcElht3tdlqEOFxZ0dMTYrHz9iMf0gqn1pPjZFTCgM5R4R5IMA20Chb2UPYYsxjzs8CgZ7Nb5n2K2rA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@jsonjoy.com/util@1.5.0': + resolution: {integrity: sha512-ojoNsrIuPI9g6o8UxhraZQSyF2ByJanAY4cTFbc8Mf2AXEF4aQRGY1dJxyJpuyav8r9FGflEt/Ff3u5Nt6YMPA==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + '@keyv/serialize@1.0.3': + resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@leichtgewicht/ip-codec@2.0.5': + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + + '@lukeed/csprng@1.1.0': + resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==} + engines: {node: '>=8'} + + '@mongodb-js/saslprep@1.2.0': + resolution: {integrity: sha512-+ywrb0AqkfaYuhHs6LxKWgqbh3I72EpEgESCw37o+9qPx9WTCkgDm2B+eMrwehGtHBWHFU4GXvnSCNiFhhausg==} + + '@mui/core-downloads-tracker@6.4.8': + resolution: {integrity: sha512-vjP4+A1ybyCRhDZC7r5EPWu/gLseFZxaGyPdDl94vzVvk6Yj6gahdaqcjbhkaCrJjdZj90m3VioltWPAnWF/zw==} + + '@mui/material@6.4.8': + resolution: {integrity: sha512-5S9UTjKZZBd9GfbcYh/nYfD9cv6OXmj5Y7NgKYfk7JcSoshp8/pW5zP4wecRiroBSZX8wcrywSgogpVNO+5W0Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@mui/material-pigment-css': ^6.4.8 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@mui/material-pigment-css': + optional: true + '@types/react': + optional: true + + '@mui/private-theming@6.4.8': + resolution: {integrity: sha512-sWwQoNSn6elsPTAtSqCf+w5aaGoh7AASURNmpy+QTTD/zwJ0Jgwt0ZaaP6mXq2IcgHxYnYloM/+vJgHPMkRKTQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/styled-engine@6.4.8': + resolution: {integrity: sha512-oyjx1b1FvUCI85ZMO4trrjNxGm90eLN3Ohy0AP/SqK5gWvRQg1677UjNf7t6iETOKAleHctJjuq0B3aXO2gtmw==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.4.1 + '@emotion/styled': ^11.3.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + + '@mui/system@6.4.8': + resolution: {integrity: sha512-gV7iBHoqlsIenU2BP0wq14BefRoZcASZ/4LeyuQglayBl+DfLX5rEd3EYR3J409V2EZpR0NOM1LATAGlNk2cyA==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@emotion/react': ^11.5.0 + '@emotion/styled': ^11.3.0 + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/react': + optional: true + '@emotion/styled': + optional: true + '@types/react': + optional: true + + '@mui/types@7.2.24': + resolution: {integrity: sha512-3c8tRt/CbWZ+pEg7QpSwbdxOk36EfmhbKf6AGZsD1EcLDLTSZoxxJ86FVtcjxvjuhdyBiWKSTGZFaXCnidO2kw==} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@mui/utils@6.4.8': + resolution: {integrity: sha512-C86gfiZ5BfZ51KqzqoHi1WuuM2QdSKoFhbkZeAfQRB+jCc4YNhhj11UXFVMMsqBgZ+Zy8IHNJW3M9Wj/LOwRXQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + '@types/react': ^17.0.0 || ^18.0.0 || ^19.0.0 + react: ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + '@napi-rs/wasm-runtime@0.2.7': + resolution: {integrity: sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==} + + '@nestjs/common@11.0.12': + resolution: {integrity: sha512-6PXxmDe2iYmb57xacnxzpW1NAxRZ7Gf+acMT7/hmRB/4KpZiFU/cNvLWwgbM2BL5QSzQulOwY6ny5bbKnPpB+A==} + peerDependencies: + class-transformer: '*' + class-validator: '*' + reflect-metadata: ^0.1.12 || ^0.2.0 + rxjs: ^7.1.0 + peerDependenciesMeta: + class-transformer: + optional: true + class-validator: + optional: true + + '@next/env@15.2.4': + resolution: {integrity: sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==} + + '@next/swc-darwin-arm64@15.2.4': + resolution: {integrity: sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.2.4': + resolution: {integrity: sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.2.4': + resolution: {integrity: sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.2.4': + resolution: {integrity: sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.2.4': + resolution: {integrity: sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.2.4': + resolution: {integrity: sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.2.4': + resolution: {integrity: sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.2.4': + resolution: {integrity: sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.scandir@4.0.1': + resolution: {integrity: sha512-vAkI715yhnmiPupY+dq+xenu5Tdf2TBQ66jLvBIcCddtz+5Q8LbMKaf9CIJJreez8fQ8fgaY+RaywQx8RJIWpw==} + engines: {node: '>=18.18.0'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@4.0.0': + resolution: {integrity: sha512-ctr6bByzksKRCV0bavi8WoQevU6plSp2IkllIsEqaiKe2mwNNnaluhnRhcsgGZHrrHk57B3lf95MkLMO3STYcg==} + engines: {node: '>=18.18.0'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@3.0.1': + resolution: {integrity: sha512-nIh/M6Kh3ZtOmlY00DaUYB4xeeV6F3/ts1l29iwl3/cfyY/OuCfUx+v08zgx8TKPTifXRcjjqVQ4KB2zOYSbyw==} + engines: {node: '>=18.18.0'} + + '@npmcli/fs@4.0.0': + resolution: {integrity: sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==} + engines: {node: ^18.17.0 || >=20.5.0} + + '@octokit/auth-token@5.1.2': + resolution: {integrity: sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw==} + engines: {node: '>= 18'} + + '@octokit/core@6.1.4': + resolution: {integrity: sha512-lAS9k7d6I0MPN+gb9bKDt7X8SdxknYqAMh44S5L+lNqIN2NuV8nvv3g8rPp7MuRxcOpxpUIATWprO0C34a8Qmg==} + engines: {node: '>= 18'} + + '@octokit/endpoint@10.1.3': + resolution: {integrity: sha512-nBRBMpKPhQUxCsQQeW+rCJ/OPSMcj3g0nfHn01zGYZXuNDvvXudF/TYY6APj5THlurerpFN4a/dQAIAaM6BYhA==} + engines: {node: '>= 18'} + + '@octokit/graphql@8.2.1': + resolution: {integrity: sha512-n57hXtOoHrhwTWdvhVkdJHdhTv0JstjDbDRhJfwIRNfFqmSo1DaK/mD2syoNUoLCyqSjBpGAKOG0BuwF392slw==} + engines: {node: '>= 18'} + + '@octokit/openapi-types@24.2.0': + resolution: {integrity: sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==} + + '@octokit/plugin-paginate-rest@11.6.0': + resolution: {integrity: sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-request-log@5.3.1': + resolution: {integrity: sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/plugin-rest-endpoint-methods@13.5.0': + resolution: {integrity: sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw==} + engines: {node: '>= 18'} + peerDependencies: + '@octokit/core': '>=6' + + '@octokit/request-error@6.1.7': + resolution: {integrity: sha512-69NIppAwaauwZv6aOzb+VVLwt+0havz9GT5YplkeJv7fG7a40qpLt/yZKyiDxAhgz0EtgNdNcb96Z0u+Zyuy2g==} + engines: {node: '>= 18'} + + '@octokit/request@9.2.2': + resolution: {integrity: sha512-dZl0ZHx6gOQGcffgm1/Sf6JfEpmh34v3Af2Uci02vzUYz6qEN6zepoRtmybWXIGXFIK8K9ylE3b+duCWqhArtg==} + engines: {node: '>= 18'} + + '@octokit/rest@21.1.1': + resolution: {integrity: sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg==} + engines: {node: '>= 18'} + + '@octokit/types@13.10.0': + resolution: {integrity: sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==} + + '@opentelemetry/api-logs@0.200.0': + resolution: {integrity: sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/core@2.0.0': + resolution: {integrity: sha512-SLX36allrcnVaPYG3R78F/UZZsBsvbc7lMCLx37LyH5MJ1KAAZ2E3mW9OAD3zGz0G8q/BtoS5VUrjzDydhD6LQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation@0.200.0': + resolution: {integrity: sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/semantic-conventions@1.30.0': + resolution: {integrity: sha512-4VlGgo32k2EQ2wcCY3vEU28A0O13aOtHz3Xt2/2U5FAh9EfhD6t6DqL5Z6yAnRCntbTFDU4YfbpyzSlHNWycPw==} + engines: {node: '>=14'} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.2.0': + resolution: {integrity: sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@pnpm/config.env-replace@1.1.0': + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + + '@pnpm/network.ca-file@1.0.2': + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} + + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} + + '@popperjs/core@2.11.8': + resolution: {integrity: sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==} + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@radix-ui/react-compose-refs@1.1.1': + resolution: {integrity: sha512-Y9VzoRDSJtgFMUCoiZBDVo084VQ5hfpXxVE+NgkdNsjiDBByiImMZKKhxMwCbdHvhlENG6a833CbFkOQvTricw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-slot@1.1.2': + resolution: {integrity: sha512-YAKxaiGsSQJ38VzKH86/BPRC4rh+b1Jpa+JneA5LRE7skmLPNAyeG8kPJj/oo4STLvlrs8vkf/iYyc3A5stYCQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.37.0': + resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.37.0': + resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.37.0': + resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.37.0': + resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.37.0': + resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.37.0': + resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.37.0': + resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.37.0': + resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.37.0': + resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.37.0': + resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} + cpu: [x64] + os: [win32] + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sinclair/typebox@0.34.31': + resolution: {integrity: sha512-qQ71T9DsITbX3dVCrcBERbs11YuSMg3wZPnT472JhqhWGPdiLgyvihJXU8m+ADJtJvRdjATIiACJD22dEknBrQ==} + + '@sindresorhus/is@7.0.1': + resolution: {integrity: sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.3.0': + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + + '@smithy/abort-controller@4.0.2': + resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader-native@4.0.0': + resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader@5.0.0': + resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.1.0': + resolution: {integrity: sha512-8smPlwhga22pwl23fM5ew4T9vfLUCeFXlcqNOCD5M5h8VmNPNUE9j6bQSuRXpDSV11L/E/SwEBQuW8hr6+nS1A==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.2.0': + resolution: {integrity: sha512-k17bgQhVZ7YmUvA8at4af1TDpl0NDMBuBKJl8Yg0nrefwmValU+CnA5l/AriVdQNthU/33H3nK71HrLgqOPr1Q==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.2': + resolution: {integrity: sha512-32lVig6jCaWBHnY+OEQ6e6Vnt5vDHaLiydGrwYMW9tPqO688hPGTYRamYJ1EptxEC2rAwJrHWmPoKRBl4iTa8w==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@4.0.2': + resolution: {integrity: sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.0.2': + resolution: {integrity: sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.1.0': + resolution: {integrity: sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.0.2': + resolution: {integrity: sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.0.2': + resolution: {integrity: sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.2': + resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-blob-browser@4.0.2': + resolution: {integrity: sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.2': + resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-stream-node@4.0.2': + resolution: {integrity: sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.2': + resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/md5-js@4.0.2': + resolution: {integrity: sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.2': + resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.1.0': + resolution: {integrity: sha512-xhLimgNCbCzsUppRTGXWkZywksuTThxaIB0HwbpsVLY5sceac4e1TZ/WKYqufQLaUy+gUSJGNdwD2jo3cXL0iA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.1.0': + resolution: {integrity: sha512-2zAagd1s6hAaI/ap6SXi5T3dDwBOczOMCSkkYzktqN1+tzbk1GAsHNAdo/1uzxz3Ky02jvZQwbi/vmDA6z4Oyg==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.3': + resolution: {integrity: sha512-rfgDVrgLEVMmMn0BI8O+8OVr6vXzjV7HZj57l0QxslhzbvVfikZbVfBVthjLHqib4BW44QhcIgJpvebHlRaC9A==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.2': + resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.0.2': + resolution: {integrity: sha512-WgCkILRZfJwJ4Da92a6t3ozN/zcvYyJGUTmfGbgS/FkCcoCjl7G4FJaCDN1ySdvLvemnQeo25FdkyMSTSwulsw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.4': + resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.2': + resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@5.1.0': + resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.2': + resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.2': + resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.2': + resolution: {integrity: sha512-LA86xeFpTKn270Hbkixqs5n73S+LVM0/VZco8dqd+JT75Dyx3Lcw/MraL7ybjmz786+160K8rPOmhsq0SocoJQ==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.2': + resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@5.0.2': + resolution: {integrity: sha512-Mz+mc7okA73Lyz8zQKJNyr7lIcHLiPYp0+oiqiMNc/t7/Kf2BENs5d63pEj7oPqdjaum6g0Fc8wC78dY1TgtXw==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.2.0': + resolution: {integrity: sha512-Qs65/w30pWV7LSFAez9DKy0Koaoh3iHhpcpCCJ4waj/iqwsuSzJna2+vYwq46yBaqO5ZbP9TjUsATUNxrKeBdw==} + engines: {node: '>=18.0.0'} + + '@smithy/types@4.2.0': + resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.2': + resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.8': + resolution: {integrity: sha512-ZTypzBra+lI/LfTYZeop9UjoJhhGRTg3pxrNpfSTQLd3AJ37r2z4AXTKpq1rFXiiUIJsYyFgNJdjWRGP/cbBaQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.8': + resolution: {integrity: sha512-Rgk0Jc/UDfRTzVthye/k2dDsz5Xxs9LZaKCNPgJTRyoyBoeiNCnHsYGOyu1PKN+sDyPnJzMOz22JbwxzBp9NNA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.2': + resolution: {integrity: sha512-6QSutU5ZyrpNbnd51zRTL7goojlcnuOB55+F9VBD+j8JpRY50IGamsjlycrmpn8PQkmJucFW8A0LSfXj7jjtLQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@4.0.2': + resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.2': + resolution: {integrity: sha512-Qryc+QG+7BCpvjloFLQrmlSd0RsVRHejRXd78jNO3+oREueCjwG1CCEH1vduw/ZkM1U9TztwIKVIi3+8MJScGg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.2.0': + resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.0.3': + resolution: {integrity: sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==} + engines: {node: '>=18.0.0'} + + '@socket.io/component-emitter@3.1.2': + resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + + '@swc/core-darwin-arm64@1.11.13': + resolution: {integrity: sha512-loSERhLaQ9XDS+5Kdx8cLe2tM1G0HLit8MfehipAcsdctpo79zrRlkW34elOf3tQoVPKUItV0b/rTuhjj8NtHg==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.11.13': + resolution: {integrity: sha512-uSA4UwgsDCIysUPfPS8OrQTH2h9spO7IYFd+1NB6dJlVGUuR6jLKuMBOP1IeLeax4cGHayvkcwSJ3OvxHwgcZQ==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.11.13': + resolution: {integrity: sha512-boVtyJzS8g30iQfe8Q46W5QE/cmhKRln/7NMz/5sBP/am2Lce9NL0d05NnFwEWJp1e2AMGHFOdRr3Xg1cDiPKw==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.11.13': + resolution: {integrity: sha512-+IK0jZ84zHUaKtwpV+T+wT0qIUBnK9v2xXD03vARubKF+eUqCsIvcVHXmLpFuap62dClMrhCiwW10X3RbXNlHw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.11.13': + resolution: {integrity: sha512-+ukuB8RHD5BHPCUjQwuLP98z+VRfu+NkKQVBcLJGgp0/+w7y0IkaxLY/aKmrAS5ofCNEGqKL+AOVyRpX1aw+XA==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.11.13': + resolution: {integrity: sha512-q9H3WI3U3dfJ34tdv60zc8oTuWvSd5fOxytyAO9Pc5M82Hic3jjWaf2xBekUg07ubnMZpyfnv+MlD+EbUI3Llw==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.11.13': + resolution: {integrity: sha512-9aaZnnq2pLdTbAzTSzy/q8dr7Woy3aYIcQISmw1+Q2/xHJg5y80ZzbWSWKYca/hKonDMjIbGR6dp299I5J0aeA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.11.13': + resolution: {integrity: sha512-n3QZmDewkHANcoHvtwvA6yJbmS4XJf0MBMmwLZoKDZ2dOnC9D/jHiXw7JOohEuzYcpLoL5tgbqmjxa3XNo9Oow==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.11.13': + resolution: {integrity: sha512-wM+Nt4lc6YSJFthCx3W2dz0EwFNf++j0/2TQ0Js9QLJuIxUQAgukhNDVCDdq8TNcT0zuA399ALYbvj5lfIqG6g==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.11.13': + resolution: {integrity: sha512-+X5/uW3s1L5gK7wAo0E27YaAoidJDo51dnfKSfU7gF3mlEUuWH8H1bAy5OTt2mU4eXtfsdUMEVXSwhDlLtQkuA==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.11.13': + resolution: {integrity: sha512-9BXdYz12Wl0zWmZ80PvtjBWeg2ncwJ9L5WJzjhN6yUTZWEV/AwAdVdJnIEp4pro3WyKmAaMxcVOSbhuuOZco5g==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '*' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.15': + resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==} + + '@swc/types@0.1.20': + resolution: {integrity: sha512-/rlIpxwKrhz4BIplXf6nsEHtqlhzuNN34/k3kMAXH4/lvVoA3cdq+60aqVNnyvw2uITEaCi0WV3pxBe4dQqoXQ==} + + '@szmarczak/http-timer@5.0.1': + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/react@16.2.0': + resolution: {integrity: sha512-2cSskAvA1QNtKc8Y9VJQRv0tm3hLVgxRGDB+KYhIaPQJ1I+RHbhIXcM+zClKXzMes/wshsMVzf4B9vS4IZpqDQ==} + engines: {node: '>=18'} + peerDependencies: + '@testing-library/dom': ^10.0.0 + '@types/react': ^18.0.0 || ^19.0.0 + '@types/react-dom': ^18.0.0 || ^19.0.0 + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@tokenizer/inflate@0.2.7': + resolution: {integrity: sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg==} + engines: {node: '>=18'} + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/body-parser@1.19.5': + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + + '@types/bonjour@3.5.13': + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + + '@types/connect-history-api-fallback@1.5.4': + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/cookie@0.6.0': + resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} + + '@types/cors@2.8.17': + resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + + '@types/eslint-scope@3.7.7': + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@4.17.21': + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + + '@types/graceful-fs@4.1.9': + resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + + '@types/html-minifier-terser@6.1.0': + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + + '@types/http-cache-semantics@4.0.4': + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + + '@types/http-errors@2.0.4': + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/istanbul-lib-coverage@2.0.6': + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + + '@types/istanbul-lib-report@3.0.3': + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + + '@types/istanbul-reports@3.0.4': + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node-forge@1.3.11': + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} + + '@types/node@22.13.13': + resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/parse-json@4.0.2': + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + + '@types/prop-types@15.7.14': + resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==} + + '@types/qs@6.9.18': + resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + + '@types/range-parser@1.2.7': + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + + '@types/react-transition-group@4.4.12': + resolution: {integrity: sha512-8TV6R3h2j7a91c+1DXdJi3Syo69zzIZbz7Lg5tORM5LEJG7X/E6a1V3drRyBRZq7/utz7A+c4OgYLiLcYGHG6w==} + peerDependencies: + '@types/react': '*' + + '@types/react@19.0.12': + resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} + + '@types/readable-stream@4.0.18': + resolution: {integrity: sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==} + + '@types/retry@0.12.2': + resolution: {integrity: sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-index@1.9.4': + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} + + '@types/serve-static@1.15.7': + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + + '@types/sockjs@0.3.36': + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} + + '@types/stack-utils@2.0.3': + resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/trusted-types@2.0.7': + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + + '@types/use-sync-external-store@0.0.6': + resolution: {integrity: sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==} + + '@types/webidl-conversions@7.0.3': + resolution: {integrity: sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==} + + '@types/whatwg-url@11.0.5': + resolution: {integrity: sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==} + + '@types/ws@8.18.0': + resolution: {integrity: sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==} + + '@types/yargs-parser@21.0.3': + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + + '@typescript-eslint/eslint-plugin@8.28.0': + resolution: {integrity: sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/parser@8.28.0': + resolution: {integrity: sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/scope-manager@8.28.0': + resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.28.0': + resolution: {integrity: sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/types@8.28.0': + resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@8.28.0': + resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/utils@8.28.0': + resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.9.0' + + '@typescript-eslint/visitor-keys@8.28.0': + resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@unrs/rspack-resolver-binding-darwin-arm64@1.2.2': + resolution: {integrity: sha512-i7z0B+C0P8Q63O/5PXJAzeFtA1ttY3OR2VSJgGv18S+PFNwD98xHgAgPOT1H5HIV6jlQP8Avzbp09qxJUdpPNw==} + cpu: [arm64] + os: [darwin] + + '@unrs/rspack-resolver-binding-darwin-x64@1.2.2': + resolution: {integrity: sha512-YEdFzPjIbDUCfmehC6eS+AdJYtFWY35YYgWUnqqTM2oe/N58GhNy5yRllxYhxwJ9GcfHoNc6Ubze1yjkNv+9Qg==} + cpu: [x64] + os: [darwin] + + '@unrs/rspack-resolver-binding-freebsd-x64@1.2.2': + resolution: {integrity: sha512-TU4ntNXDgPN2giQyyzSnGWf/dVCem5lvwxg0XYvsvz35h5H19WrhTmHgbrULMuypCB3aHe1enYUC9rPLDw45mA==} + cpu: [x64] + os: [freebsd] + + '@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2': + resolution: {integrity: sha512-ik3w4/rU6RujBvNWiDnKdXi1smBhqxEDhccNi/j2rHaMjm0Fk49KkJ6XKsoUnD2kZ5xaMJf9JjailW/okfUPIw==} + cpu: [arm] + os: [linux] + + '@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2': + resolution: {integrity: sha512-fp4Azi8kHz6TX8SFmKfyScZrMLfp++uRm2srpqRjsRZIIBzH74NtSkdEUHImR4G7f7XJ+sVZjCc6KDDK04YEpQ==} + cpu: [arm64] + os: [linux] + + '@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2': + resolution: {integrity: sha512-gMiG3DCFioJxdGBzhlL86KcFgt9HGz0iDhw0YVYPsShItpN5pqIkNrI+L/Q/0gfDiGrfcE0X3VANSYIPmqEAlQ==} + cpu: [arm64] + os: [linux] + + '@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2': + resolution: {integrity: sha512-n/4n2CxaUF9tcaJxEaZm+lqvaw2gflfWQ1R9I7WQgYkKEKbRKbpG/R3hopYdUmLSRI4xaW1Cy0Bz40eS2Yi4Sw==} + cpu: [x64] + os: [linux] + + '@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2': + resolution: {integrity: sha512-cHyhAr6rlYYbon1L2Ag449YCj3p6XMfcYTP0AQX+KkQo025d1y/VFtPWvjMhuEsE2lLvtHm7GdJozj6BOMtzVg==} + cpu: [x64] + os: [linux] + + '@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2': + resolution: {integrity: sha512-eogDKuICghDLGc32FtP+WniG38IB1RcGOGz0G3z8406dUdjJvxfHGuGs/dSlM9YEp/v0lEqhJ4mBu6X2nL9pog==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2': + resolution: {integrity: sha512-7sWRJumhpXSi2lccX8aQpfFXHsSVASdWndLv8AmD8nDRA/5PBi8IplQVZNx2mYRx6+Bp91Z00kuVqpXO9NfCTg==} + cpu: [arm64] + os: [win32] + + '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2': + resolution: {integrity: sha512-hewo/UMGP1a7O6FG/ThcPzSJdm/WwrYDNkdGgWl6M18H6K6MSitklomWpT9MUtT5KGj++QJb06va/14QBC4pvw==} + cpu: [x64] + os: [win32] + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@webassemblyjs/ast@1.14.1': + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} + + '@webassemblyjs/floating-point-hex-parser@1.13.2': + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} + + '@webassemblyjs/helper-api-error@1.13.2': + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} + + '@webassemblyjs/helper-buffer@1.14.1': + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} + + '@webassemblyjs/helper-numbers@1.13.2': + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} + + '@webassemblyjs/helper-wasm-section@1.14.1': + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} + + '@webassemblyjs/ieee754@1.13.2': + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} + + '@webassemblyjs/leb128@1.13.2': + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} + + '@webassemblyjs/utf8@1.13.2': + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} + + '@webassemblyjs/wasm-edit@1.14.1': + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} + + '@webassemblyjs/wasm-gen@1.14.1': + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} + + '@webassemblyjs/wasm-opt@1.14.1': + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} + + '@webassemblyjs/wasm-parser@1.14.1': + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} + + '@webassemblyjs/wast-printer@1.14.1': + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} + + '@webpack-cli/configtest@3.0.1': + resolution: {integrity: sha512-u8d0pJ5YFgneF/GuvEiDA61Tf1VDomHHYMjv/wc9XzYj7nopltpG96nXN5dJRstxZhcNpV1g+nT6CydO7pHbjA==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + + '@webpack-cli/info@3.0.1': + resolution: {integrity: sha512-coEmDzc2u/ffMvuW9aCjoRzNSPDl/XLuhPdlFRpT9tZHmJ/039az33CE7uH+8s0uL1j5ZNtfdv0HkfaKRBGJsQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + + '@webpack-cli/serve@3.0.1': + resolution: {integrity: sha512-sbgw03xQaCLiT6gcY/6u3qBDn01CWw/nbaXl3gTdTFuJJ75Gffv3E3DBpgvY2fkkrdS1fpjaXNOmJlnbtKauKg==} + engines: {node: '>=18.12.0'} + peerDependencies: + webpack: ^5.82.0 + webpack-cli: 6.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + + '@whatwg-node/promise-helpers@1.3.0': + resolution: {integrity: sha512-486CouizxHXucj8Ky153DDragfkMcHtVEToF5Pn/fInhUUSiCmt9Q4JVBa6UK5q4RammFBtGQ4C9qhGlXU9YbA==} + engines: {node: '>=16.0.0'} + + '@xtuc/ieee754@1.2.0': + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + + '@xtuc/long@4.2.2': + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + + JSONStream@1.3.5: + resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} + hasBin: true + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abbrev@3.0.0: + resolution: {integrity: sha512-+/kfrslGQ7TNV2ecmQwMJj/B65g5KVq1/L3SGVZ3tCYGqlzFuFCGBZJtMP99wH3NpEUyAjn0zPdPUg0D+DwrOA==} + engines: {node: ^18.17.0 || >=20.5.0} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.5.16: + resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} + engines: {node: '>=12.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + ajv-formats@2.1.1: + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-keywords@5.1.0: + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} + + ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + + ansi-regex@2.1.1: + resolution: {integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==} + engines: {node: '>=0.10.0'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + + ansi-styles@2.2.1: + resolution: {integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==} + engines: {node: '>=0.10.0'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + + array-flatten@3.0.0: + resolution: {integrity: sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@3.0.1: + resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==} + engines: {node: '>=12'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrify@3.0.0: + resolution: {integrity: sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw==} + engines: {node: '>=12'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-types@0.14.2: + resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} + engines: {node: '>=4'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + atomically@2.0.3: + resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} + + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + aws-sdk@2.1692.0: + resolution: {integrity: sha512-x511uiJ/57FIsbgUe5csJ13k3uzu25uWQE+XqfBis/sB0SFoiElJWXRkgEAUh0U6n40eT3ay5Ue4oPkRMu1LYw==} + engines: {node: '>= 10.0.0'} + + axe-core@4.10.3: + resolution: {integrity: sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==} + engines: {node: '>=4'} + + axios@1.6.2: + resolution: {integrity: sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-code-frame@6.26.0: + resolution: {integrity: sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==} + + babel-core@6.26.3: + resolution: {integrity: sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==} + + babel-generator@6.26.1: + resolution: {integrity: sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==} + + babel-helpers@6.24.1: + resolution: {integrity: sha512-n7pFrqQm44TCYvrCDb0MqabAF+JUBq+ijBvNMUxpkLjJaAu32faIexewMumrH5KLLJ1HDyT0PTEqRyAe/GwwuQ==} + + babel-jest@29.7.0: + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-loader@10.0.0: + resolution: {integrity: sha512-z8jt+EdS61AMw22nSfoNJAZ0vrtmhPRVi6ghL3rCeRZI8cdNYFiV5xeV3HbE7rlZZNmGH8BVccwWt8/ED0QOHA==} + engines: {node: ^18.20.0 || ^20.10.0 || >=22.0.0} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: '>=5.61.0' + + babel-messages@6.23.0: + resolution: {integrity: sha512-Bl3ZiA+LjqaMtNYopA9TYE9HP1tQ+E5dLxE0XrAzcIJeK2UqF0/EaqXwBn9esd4UmTfEab+P+UYQ1GnioFIb/w==} + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-istanbul@7.0.0: + resolution: {integrity: sha512-C5OzENSx/A+gt7t4VH1I2XsflxyPUmXRFPKBxt33xncdOmq7oROVM3bZv9Ysjjkv8OJYDMa+tKuKMvqU/H3xdw==} + engines: {node: '>=12'} + + babel-plugin-jest-hoist@29.6.3: + resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-macros@3.1.0: + resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} + engines: {node: '>=10', npm: '>=6'} + + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.6.3: + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-register@6.26.0: + resolution: {integrity: sha512-veliHlHX06wjaeY8xNITbveXSiI+ASFnOqvne/LaIJIqOWi2Ogmj91KOugEz/hoh/fwMhXNBJPCv8Xaz5CyM4A==} + + babel-runtime@6.26.0: + resolution: {integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==} + + babel-template@6.26.0: + resolution: {integrity: sha512-PCOcLFW7/eazGUKIoqH97sO9A2UYMahsn/yRQ7uOk37iutwjq7ODtcTNF+iFDSHNfkctqsLRjLP7URnOx0T1fg==} + + babel-traverse@6.26.0: + resolution: {integrity: sha512-iSxeXx7apsjCHe9c7n8VtRXGzI2Bk1rBSOJgCCjfyXb6v1aCqE1KSEpq/8SXuVN8Ka/Rh1WDTF0MDzkvTA4MIA==} + + babel-types@6.26.0: + resolution: {integrity: sha512-zhe3V/26rCWsEZK8kZN+HaQj5yQ1CilTObixFzKW1UWjqG7618Twz6YEsCnjfg5gBcJh02DrpCkS9h98ZqDY+g==} + + babylon@6.18.0: + resolution: {integrity: sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==} + hasBin: true + + bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@3.0.1: + resolution: {integrity: sha512-vjtV3hiLqYDNRoiAv0zC4QaGAMPomEoq83PRmYIofPswwZurCeWR5LByXm7SyoL0Zh5+2z0+HC7jG8gSZJUh0w==} + engines: {node: '>= 16'} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + base64id@2.0.0: + resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} + engines: {node: ^4.5.0 || >= 5.9} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + before-after-hook@3.0.2: + resolution: {integrity: sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==} + + big.js@6.2.2: + resolution: {integrity: sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ==} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + binary-extensions@3.0.0: + resolution: {integrity: sha512-X0RfwMgXPEesg6PCXzytQZt9Unh9gtc4SfeTNJvKifUL//Oegcc/Yf31z6hThNZ8dnD3Ir3wkHVN0eWrTvP5ww==} + engines: {node: '>=18.20'} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bl@6.1.0: + resolution: {integrity: sha512-ClDyJGQkc8ZtzdAAbAwBmhMSpwN/sC9HA8jxdYm6nVUbCfZbe2mgza4qh7AuEYyEPB/c4Kznf9s66bnsKMQDjw==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + bonjour-service@1.3.0: + resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + boxen@8.0.1: + resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} + engines: {node: '>=18'} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + brace-expansion@4.0.0: + resolution: {integrity: sha512-l/mOwLWs7BQIgOKrL46dIAbyCKvPV7YJPDspkuc88rHsZRlg3hptUGdU7Trv0VFP4d3xnSGBQrKu5ZvGB7UeIw==} + engines: {node: '>= 18'} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + bson@6.10.3: + resolution: {integrity: sha512-MTxGsqgYTwfshYWTRdmZRC+M7FnG1b4y7RO7p2k3X24Wq0yv1m77Wsj0BzlPzd/IowgESfsruQCUToa7vbOpPQ==} + engines: {node: '>=16.20.1'} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer@4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} + + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@19.0.1: + resolution: {integrity: sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + cache-content-type@1.0.1: + resolution: {integrity: sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==} + engines: {node: '>= 6.0.0'} + + cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + + cacheable-request@12.0.1: + resolution: {integrity: sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==} + engines: {node: '>=18'} + + cacheable@1.8.9: + resolution: {integrity: sha512-FicwAUyWnrtnd4QqYAoRlNs44/a1jTL7XDKqm5gJ90wz1DQPlC7U2Rd1Tydpv+E7WAr4sQHuw8Q8M3nZMAyecQ==} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + callsites@4.2.0: + resolution: {integrity: sha512-kfzR4zzQtAE9PC7CzZsjl3aBNbXWuXiSeOCdLcPpBfGW8YuCqQHcRPFDbr/BPVmd3EEPVpuFzLyuT/cUhPr4OQ==} + engines: {node: '>=12.20'} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelcase@8.0.0: + resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==} + engines: {node: '>=16'} + + caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + + caniuse-lite@1.0.30001707: + resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chalk@1.1.3: + resolution: {integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==} + engines: {node: '>=0.10.0'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + char-regex@2.0.2: + resolution: {integrity: sha512-cbGOjAptfM2LVmWhwRFHEKTPkLwNddVmuqYZQt895yXwAsWsXObCG+YN4DGQ/JBtT4GP1a1lPPdio2z413LmTg==} + engines: {node: '>=12.20'} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + ci-info@4.2.0: + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + engines: {node: '>=8'} + + cjs-module-lexer@1.4.3: + resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} + + cjs-module-lexer@2.1.0: + resolution: {integrity: sha512-UX0OwmYRYQQetfrLEZeewIFFI+wSTofC+pMBLNuH3RUuu/xzG1oz84UCEDOSoQlN3fZ4+AzmV50ZYvGqkMh9yA==} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} + + clean-stack@5.2.0: + resolution: {integrity: sha512-TyUIUJgdFnCISzG5zu3291TAsE77ddchd0bepon1VVQrKLGKFED4iXFEDQ24mIPdPBbyE16PK3F8MYE1CmcBEQ==} + engines: {node: '>=14.16'} + + cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-spinners@3.2.0: + resolution: {integrity: sha512-pXftdQloMZzjCr3pCTIRniDcys6dDzgpgVhAHHk6TKBDbRuP1MkuetTF5KSv4YUutbOPa7+7ZrAJ2kVtbMqyXA==} + engines: {node: '>=18.20'} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@4.0.0: + resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} + engines: {node: '>=18'} + + cli-width@4.1.0: + resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} + engines: {node: '>= 12'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + + clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clone@2.1.2: + resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + collect-v8-coverage@1.0.2: + resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-convert@3.0.1: + resolution: {integrity: sha512-5kQah2eolfQV7HCrxtsBBArPfT5dwaKYMCXeMQsdRO7ihTO/cuNLGjd50ITCDn+ZU/YbS0Go64SjP9154eopxg==} + engines: {node: '>=14.6'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-name@2.0.0: + resolution: {integrity: sha512-SbtvAMWvASO5TE2QP07jHBMXKafgdZz8Vrsrn96fiL+O92/FN/PLARzUW5sKt013fjAprK2d2iCn2hk2Xb5oow==} + engines: {node: '>=12.20'} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color-string@2.0.1: + resolution: {integrity: sha512-5z9FbYTZPAo8iKsNEqRNv+OlpBbDcoE+SY9GjLfDUHEfcNNV7tS9eSAlFHEaub/r5tBL9LtskAeq1l9SaoZ5tQ==} + engines: {node: '>=18'} + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + color@5.0.0: + resolution: {integrity: sha512-16BlyiuyLq3MLxpRWyOTiWsO3ii/eLQLJUQXBSNcxMBBSnyt1ee9YUdaozQp03ifwm5woztEZGDbk9RGVuCsdw==} + engines: {node: '>=18'} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + + common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + + component-emitter@2.0.0: + resolution: {integrity: sha512-4m5s3Me2xxlVKG9PkZpQqHQR7bgpnN7joDMJ4yvVkVXngjoITG76IaZmzmywSeRTeTpc6N6r3H3+KyUurV8OYw==} + engines: {node: '>=18'} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.0: + resolution: {integrity: sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-map@0.0.2: + resolution: {integrity: sha512-xGo3rY/AH8WxqkYSvsNV9yB79sN2oNVOXnmSMYLx28CVFBsXiEFCkcf6WIiWjk5VWKr4/1fV+KG5I4442xE2hg==} + + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + configstore@7.0.0: + resolution: {integrity: sha512-yk7/5PN5im4qwz0WFZW3PXnzHgPu9mX29Y8uZ3aefe2lBPC1FYttWZRcaW9fKkT0pBCJyuQ2HfbmPVaODi9jcQ==} + engines: {node: '>=18'} + + connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + + connect@3.7.0: + resolution: {integrity: sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==} + engines: {node: '>= 0.10.0'} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + cookie-parser@1.4.7: + resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} + engines: {node: '>= 0.8.0'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookie@1.0.2: + resolution: {integrity: sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==} + engines: {node: '>=18'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + + copy-anything@2.0.6: + resolution: {integrity: sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==} + + core-js-compat@3.41.0: + resolution: {integrity: sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A==} + + core-js@2.6.12: + resolution: {integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==} + deprecated: core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js. + + core-js@3.41.0: + resolution: {integrity: sha512-SJ4/EHwS36QMJd6h/Rg+GyR4A5xE0FSI3eZ+iBVpfqf1x0eTSg1smWLHrA+2jQThZSh97fmSgFSU8B61nxosxA==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + create-jest@29.7.0: + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-fetch@4.1.0: + resolution: {integrity: sha512-uKm5PU+MHTootlWEY+mZ4vvXoCn4fLQxT9dSc1sXVMSFkINTJVN8cAQROpwcKm8bJ/c7rgZVIBWzH5T78sNZZw==} + + cross-inspect@1.0.1: + resolution: {integrity: sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A==} + engines: {node: '>=16.0.0'} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} + + css-declaration-sorter@7.2.0: + resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + + css-loader@7.1.2: + resolution: {integrity: sha512-6WvYYn7l/XEGN8Xu2vWFt9nVzrCn39vKyTEFf/ExEyoksJjjSZV/0/35XPlMbpnr6VGhZIUg5yJrL8tGfes/FA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.27.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssnano-preset-default@7.0.6: + resolution: {integrity: sha512-ZzrgYupYxEvdGGuqL+JKOY70s7+saoNlHSCK/OGn1vB2pQK8KSET8jvenzItcY+kA7NoWvfbb/YhlzuzNKjOhQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano-utils@5.0.0: + resolution: {integrity: sha512-Uij0Xdxc24L6SirFr25MlwC2rCFX6scyUmuKpzI+JQ7cyqDEwD42fJ0xfB3yLfOnRDU5LKGgjQ9FA6LYh76GWQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + cssnano@7.0.6: + resolution: {integrity: sha512-54woqx8SCbp8HwvNZYn68ZFAepuouZW4lTwiMVnBErM3VkO7/Sd4oTOt3Zz3bPx3kxQ36aISppyXj2Md4lg8bw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + cssstyle@4.3.0: + resolution: {integrity: sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==} + engines: {node: '>=18'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-format@3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + + d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + + d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-fns@4.1.0: + resolution: {integrity: sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==} + + date-format@4.0.14: + resolution: {integrity: sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==} + engines: {node: '>=4.0'} + + dateformat@5.0.3: + resolution: {integrity: sha512-Kvr6HmPXUMerlLcLF+Pwq3K7apHpYmGDVqrxcDasBg86UcKeTSNWbEzU8bwdXnxnR44FtMhJAxI4Bov6Y/KUfA==} + engines: {node: '>=12.20'} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decamelize@6.0.0: + resolution: {integrity: sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decode-uri-component@0.4.1: + resolution: {integrity: sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==} + engines: {node: '>=14.16'} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + decompress-response@9.0.0: + resolution: {integrity: sha512-6I7smNZulDaes/5onVuVXJ5WleFu62mcjW5A8YJkPxe3FyJ17NpADIXRB41hYXlU4VDMsqhke2K1SnXIxc8ozw==} + engines: {node: '>=18'} + + dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + defaults@3.0.0: + resolution: {integrity: sha512-RsqXDEAALjfRTro+IFNKpcPCt0/Cy2FqHSIlnomiJp9YGadpQnrtbRpSgN2+np21qHcIKiva4fiOQGjS9/qR/A==} + engines: {node: '>=18'} + + defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + + detect-europe-js@0.1.2: + resolution: {integrity: sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==} + + detect-indent@4.0.0: + resolution: {integrity: sha512-BDKtmHlOzwI7iRuEkhzsnPoi5ypEhWAJB5RvHWe1kMr06js3uK5B3734i3ui5Yd+wOJV1cpE4JnivPD283GU/A==} + engines: {node: '>=0.10.0'} + + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dom-accessibility-api@0.7.0: + resolution: {integrity: sha512-LjjdFmd9AITAet3Hy6Y6rwB7Sq1+x5NiwbOpnkLHC1bCXJqJKiV9DyppSSWobuSKvjKXt9G2u3hW402MPt6m+g==} + + dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} + + dom-helpers@5.2.1: + resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + dompurify@3.2.4: + resolution: {integrity: sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dot-prop@9.0.0: + resolution: {integrity: sha512-1gxPBJpI/pcjQhKgIU91II6Wkay+dLcN3M6rf2uwP8hRur3HtQXjVrdAK3sjC0piaEuxzMwjXChcETiJl47lAQ==} + engines: {node: '>=18'} + + dotenv-expand@12.0.1: + resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==} + engines: {node: '>=12'} + + dotenv@16.4.7: + resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==} + engines: {node: '>=12'} + + dset@3.1.4: + resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==} + engines: {node: '>=4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + eastasianwidth@0.3.0: + resolution: {integrity: sha512-JqasYqGO32J2c91uYKdhu1vNmXGADaLB7OOgjAhjMvpjdvGb0tsYcuwn381MwqCg4YBQDtByQcNlFYuv2kmOug==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.123: + resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emittery@1.1.0: + resolution: {integrity: sha512-rsX7ktqARv/6UQDgMaLfIqUWAEzzbCQiVh7V9rhDXp6c37yoJcks12NVD+XPkgl4AEavmNhVfrhGoqYwIsMYYA==} + engines: {node: '>=14.16'} + + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + engine.io-client@6.6.3: + resolution: {integrity: sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==} + + engine.io-parser@5.2.3: + resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} + engines: {node: '>=10.0.0'} + + engine.io@6.6.4: + resolution: {integrity: sha512-ZCkIjSYNDyGn0R6ewHDtXgns/Zre/NT6Agvq1/WobF7JXgFff4SeDroKiCO3fNJreU9YG429Sc81o4w5ok/W5g==} + engines: {node: '>=10.2.0'} + + enhanced-resolve@5.18.1: + resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} + engines: {node: '>=10.13.0'} + + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + env-paths@3.0.0: + resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + envinfo@7.14.0: + resolution: {integrity: sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==} + engines: {node: '>=4'} + hasBin: true + + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + errno@0.1.8: + resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} + hasBin: true + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + error-stack-parser@2.1.4: + resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} + + es-abstract@1.23.9: + resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-iterator-helpers@1.2.1: + resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} + engines: {node: '>= 0.4'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + esbuild@0.25.1: + resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@10.1.1: + resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@4.2.3: + resolution: {integrity: sha512-trG0f6LY+g7CJCV8AN6O+cU5B13tONNDF9ZcnxDtUQQqvufNFDn3zcb/EIslXHwl1IjloZoVvOOcKtBaO9HlBw==} + engines: {node: ^16.17.0 || >=18.6.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-jest@28.11.0: + resolution: {integrity: sha512-QAfipLcNCWLVocVbZW8GimKn5p5iiMcgGbRzz8z/P5q7xw+cNEpYqyzFMtIF/ZgF2HLOyy+dYBut+DoYolvqig==} + engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-prettier@5.2.5: + resolution: {integrity: sha512-IKKP8R87pJyMl7WWamLgPkloB16dagPIdd2FjBDbyRYPKo93wS/NbCOPh6gH+ieNLC+XZrhJt/kWj0PS/DFdmg==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + '@types/eslint': '>=8.0.0' + eslint: '>=8.0.0' + eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' + prettier: '>=3.0.0' + peerDependenciesMeta: + '@types/eslint': + optional: true + eslint-config-prettier: + optional: true + + eslint-plugin-promise@7.2.1: + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 + + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + + eslint-plugin-react@7.37.4: + resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.23.0: + resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + event-target-shim@6.0.2: + resolution: {integrity: sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==} + engines: {node: '>=10.13.0'} + + eventemitter2@6.4.9: + resolution: {integrity: sha512-JEPTiaOt9f04oa6NOkc4aH+nVp5I3wEjpHbIPqfgCdD5v5bUzy7xQqwcVO2aDQgOWhI28da57HksMrzK9HlRxg==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@1.1.1: + resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==} + engines: {node: '>=0.4.x'} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + + execa@9.5.2: + resolution: {integrity: sha512-EHlpxMCpHWSAh1dgS6bVeoLAXGnJNdR93aabr4QCGbzOM73o5XmRfM/e5FUqsw3aagP8S8XEWUWFAxnRBnAF0Q==} + engines: {node: ^18.19.0 || >=20.5.0} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} + + extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + extsprintf@1.4.1: + resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==} + engines: {'0': node >=0.6.0} + + fast-content-type-parse@2.0.1: + resolution: {integrity: sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-levenshtein@3.0.0: + resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-uri@3.0.6: + resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + fast-xml-parser@5.0.9: + resolution: {integrity: sha512-2mBwCiuW3ycKQQ6SOesSB8WeF+fIGb6I/GG5vU5/XEptwFFhp9PE8b9O7fbs2dpq9fXn4ULR3UsfydNUCntf5A==} + hasBin: true + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + + faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fdir@6.4.3: + resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + fflate@0.8.2: + resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + + figlet@1.8.0: + resolution: {integrity: sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw==} + engines: {node: '>= 0.4.0'} + hasBin: true + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@10.0.7: + resolution: {integrity: sha512-txsf5fu3anp2ff3+gOJJzRImtrtm/oa9tYLN0iTuINZ++EyVR/nRrg2fKYwvG/pXDofcrvvb0scEbX3NyW/COw==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-type@20.4.1: + resolution: {integrity: sha512-hw9gNZXUfZ02Jo0uafWLaFVPter5/k2rfcrjFJJHX/77xtSDOfJuEFb6oKlFV86FLP1SuyHMW1PSk0U9M5tKkQ==} + engines: {node: '>=18'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@10.1.6: + resolution: {integrity: sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==} + engines: {node: '>= 10.4.0'} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + filter-obj@5.1.0: + resolution: {integrity: sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==} + engines: {node: '>=14.16'} + + finalhandler@1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} + + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + find-cache-dir@5.0.0: + resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} + engines: {node: '>=16'} + + find-root@1.1.0: + resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==} + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + find-up@7.0.0: + resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} + engines: {node: '>=18'} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@6.1.7: + resolution: {integrity: sha512-qwZ4xf1v1m7Rc9XiORly31YaChvKt6oNVHuqqZcoED/7O+ToyNVGobKsIAopY9ODcWpEDKEBAbrSOCBHtNQvew==} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flat@6.0.1: + resolution: {integrity: sha512-/3FfIa8mbrg3xE7+wAhWeV+bd7L2Mof+xtZb5dRDKZ+wDvYJK4WDYeIOuOhre5Yv5aQObZrlbRmk3RTSiuQBtw==} + engines: {node: '>=18'} + hasBin: true + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + + foreground-child@3.3.1: + resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} + engines: {node: '>=14'} + + form-data-encoder@4.0.2: + resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} + engines: {node: '>= 18'} + + form-data@4.0.2: + resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + engines: {node: '>= 6'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + formidable@3.5.2: + resolution: {integrity: sha512-Jqc1btCy3QzRbJaICGwKcBfGWuLADRerLzDqi2NwSt/UkXLsHJw2TVResiaoBufHVHy9aSgClOHCeJsSsFLTbg==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fraction.js@5.2.1: + resolution: {integrity: sha512-Ah6t/7YCYjrPUFUFsOsRLMXAdnYM+aQwmojD2Ayb/Ezr82SwES0vuyQ8qZ3QO8n9j7W14VJuVZZet8U3bhSdQQ==} + engines: {node: '>= 12'} + + framer-motion@12.6.0: + resolution: {integrity: sha512-91XLZ3VwDlXe9u2ABhTzYBiFQ/qdoiqyTiTCQDDJ4es5/5lzp76hdB+WG7gcNklcQlOmfDZQqVO48tqzY9Z/bQ==} + peerDependencies: + '@emotion/is-prop-valid': '*' + react: ^18.0.0 || ^19.0.0 + react-dom: ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@emotion/is-prop-valid': + optional: true + react: + optional: true + react-dom: + optional: true + + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@8.1.0: + resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} + engines: {node: '>=6 <7 || >=8'} + + fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gaxios@6.7.1: + resolution: {integrity: sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==} + engines: {node: '>=14'} + + gcp-metadata@6.1.1: + resolution: {integrity: sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==} + engines: {node: '>=14'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-east-asian-width@1.3.0: + resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + engines: {node: '>=18'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.10.0: + resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + + get-value@4.0.1: + resolution: {integrity: sha512-QTDzwunK3V+VlJJlL0BlCzebAaE8OSlUC+UVd80PiekTw1gpzQSb3cfEQB2LYFWr1lbWfbdqL4pjAoJDPCLxhQ==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + global-directory@4.0.1: + resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==} + engines: {node: '>=18'} + + global-prefix@4.0.0: + resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==} + engines: {node: '>=16'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@16.0.0: + resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} + engines: {node: '>=18'} + + globals@9.18.0: + resolution: {integrity: sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==} + engines: {node: '>=0.10.0'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + + google-auth-library@9.15.1: + resolution: {integrity: sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==} + engines: {node: '>=14'} + + google-logging-utils@0.0.2: + resolution: {integrity: sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==} + engines: {node: '>=14'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + got@14.4.6: + resolution: {integrity: sha512-rnhwfM/PhMNJ1i17k3DuDqgj0cKx3IHxBKVv/WX1uDKqrhi2Gv3l7rhPThR/Cc6uU++dD97W9c8Y0qyw9x0jag==} + engines: {node: '>=20'} + + graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql@16.10.0: + resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + + handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-ansi@2.0.0: + resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==} + engines: {node: '>=0.10.0'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-flag@5.0.1: + resolution: {integrity: sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==} + engines: {node: '>=12'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + hexoid@2.0.0: + resolution: {integrity: sha512-qlspKUK7IlSQv2o+5I7yhUd7TxlOG2Vr5LTa3ve2XSNVKAL/n/u/7KLvKmFNimomDIKvZFXWHv0T12mv7rT8Aw==} + engines: {node: '>=8'} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + + home-or-tmp@2.0.0: + resolution: {integrity: sha512-ycURW7oUxE2sNiPVw1HVEFsW+ecOpJ5zaj7eC0RlwhibhRBod20muUN8qu/gzx956YrLolVvs1MTXwKgC2rVEg==} + engines: {node: '>=0.10.0'} + + hookified@1.8.1: + resolution: {integrity: sha512-GrO2l93P8xCWBSTBX9l2BxI78VU/MAAYag+pG8curS3aBGy0++ZlxrQ7PdUOUVMbn5BwkGb6+eRrnf43ipnFEA==} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + + hosted-git-info@8.0.2: + resolution: {integrity: sha512-sYKnA7eGln5ov8T8gnYlkSOxFJvywzEx9BueN6xo/GKO8PGiI6uK6xx+DIGe45T3bdVjLAQDQW1aicT8z8JwQg==} + engines: {node: ^18.17.0 || >=20.5.0} + + hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-entities@2.5.3: + resolution: {integrity: sha512-D3AfvN7SjhTgBSA8L1BN4FpPzuEd06uy4lHwSoRWr0lndi9BKaNzPLKGOWZ2ocSGguozr08TTb2jhCLHaemruw==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + + html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true + + html-webpack-plugin@5.6.3: + resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: ^5.20.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + + http-errors@1.8.1: + resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} + engines: {node: '>= 0.6'} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-parser-js@0.5.9: + resolution: {integrity: sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true + + http-proxy-middleware@3.0.3: + resolution: {integrity: sha512-usY0HG5nyDUwtqpiZdETNbmKtw3QQ1jwYFZ9wi5iHzX2BcILwQKtYDJPo7XHTsu5Z0B2Hj3W9NNnbd+AjFWjqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} + engines: {node: '>=0.10'} + + http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + + human-signals@8.0.0: + resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} + engines: {node: '>=18.18.0'} + + husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + + hyperdyperid@1.2.0: + resolution: {integrity: sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==} + engines: {node: '>=10.18'} + + i18next@24.2.3: + resolution: {integrity: sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==} + peerDependencies: + typescript: ^5 + peerDependenciesMeta: + typescript: + optional: true + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + icss-utils@5.1.0: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + ieee754@1.1.13: + resolution: {integrity: sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + ignore@7.0.3: + resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + engines: {node: '>= 4'} + + image-size@0.5.5: + resolution: {integrity: sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + image-size@2.0.1: + resolution: {integrity: sha512-NI6NK/2zchlZopsQrcVIS7jxA0/rtIy74B+/rx5s7rKQyFebmQjZVhzxXgRZJROk+WhhOq+S6sUaODxp0L5hfg==} + engines: {node: '>=16.x'} + hasBin: true + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immer@10.1.1: + resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} + + immutable@5.0.3: + resolution: {integrity: sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==} + + import-fresh@3.3.1: + resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} + engines: {node: '>=6'} + + import-in-the-middle@1.13.1: + resolution: {integrity: sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA==} + + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + index-to-position@1.0.0: + resolution: {integrity: sha512-sCO7uaLVhRJ25vz1o8s9IFM3nVS4DkuQnyjMwiQPKvQuBYBDmb8H7zx8ki7nVh4HJQOdVWebyvLE0qt+clruxA==} + engines: {node: '>=18'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@4.1.1: + resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ini@5.0.0: + resolution: {integrity: sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==} + engines: {node: ^18.17.0 || >=20.5.0} + + inquirer@12.5.0: + resolution: {integrity: sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + interpret@3.1.1: + resolution: {integrity: sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==} + engines: {node: '>=10.13.0'} + + invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + + ioredis@5.6.0: + resolution: {integrity: sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg==} + engines: {node: '>=12.22.0'} + + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} + engines: {node: '>= 12'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-binary-path@3.0.0: + resolution: {integrity: sha512-eSkpSYbqKip82Uw4z0iBK/5KmVzL2pf36kNKRtu6+mKvrow9sqF4w5hocQ9yV5v+9+wzHt620x3B7Wws/8lsGg==} + engines: {node: '>=18.20'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-ci@4.1.0: + resolution: {integrity: sha512-Ab9bQDQ11lWootZUI5qxgN2ZXwxNI5hTwnsvOc1wyxQ7zQ8OkEDw79mI0+9jI3x432NfwbVRru+3noJfXF6lSQ==} + hasBin: true + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + + is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-finite@1.1.0: + resolution: {integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==} + engines: {node: '>=0.10.0'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-fullwidth-code-point@4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + + is-fullwidth-code-point@5.0.0: + resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + engines: {node: '>=18'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-fn@3.0.0: + resolution: {integrity: sha512-Kn+4AXo1HHewGjikHNfxCFv58+XGeXAalWE5Ci1bgm/DkmDte9zFyqMn6xrzQKCgyhefxz9I8rseWUGI0jSecQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-in-ci@1.0.0: + resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} + engines: {node: '>=18'} + hasBin: true + + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + + is-installed-globally@1.0.0: + resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==} + engines: {node: '>=18'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-network-error@1.1.0: + resolution: {integrity: sha512-tUdRRAnhT+OtCZR/LxZelH/C7QtjtFrTu5tXCA8pl55eTUElUHT+GPYV8MBMBvea/j+NxQqVt3LbWMRir7Gx9g==} + engines: {node: '>=16'} + + is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-inside@4.0.0: + resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==} + engines: {node: '>=12'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-primitive@3.0.1: + resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==} + engines: {node: '>=0.10.0'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-standalone-pwa@0.1.1: + resolution: {integrity: sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-what@3.14.1: + resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} + + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + + isobject@4.0.0: + resolution: {integrity: sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA==} + engines: {node: '>=0.10.0'} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + iterare@1.2.1: + resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==} + engines: {node: '>=6'} + + iterator.prototype@1.1.5: + resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} + engines: {node: '>= 0.4'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + + jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.7.0: + resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.7.0: + resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.7.0: + resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': '*' + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.7.0: + resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.7.0: + resolution: {integrity: sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-leak-detector@29.7.0: + resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.7.0: + resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.7.0: + resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.3: + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.7.0: + resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} + + jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.7.0: + resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + jose@6.0.10: + resolution: {integrity: sha512-skIAxZqcMkOrSwjJvplIPYrlXGpxTPnro2/QWTDCxAdWQrSTV5/KqspMWmi5WAx5+ULswASJiZ0a+1B/Lxt9cw==} + + jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + + js-cookie@3.0.5: + resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} + engines: {node: '>=14'} + + js-tokens@3.0.2: + resolution: {integrity: sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@1.3.0: + resolution: {integrity: sha512-Mke0DA0QjUWuJlhsE0ZPPhYiJkRap642SmI/4ztCFaUs6V2AiH1sfecc+57NgaryfAA2VR3v6O+CSjC1jZJKOA==} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-better-errors@1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@4.0.0: + resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json5@0.5.1: + resolution: {integrity: sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==} + hasBin: true + + json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} + + jsonfile@4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonparse@1.3.1: + resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} + engines: {'0': node >= 0.2.0} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + + jwt-decode@4.0.0: + resolution: {integrity: sha512-+KJGIyHgkGuIq3IEBNftfhW/LfWhXUIY6OmyVWjliu5KH1y0fw7VQ8YndE2O4qZdMSd9SqbnC8GOcZEy0Om7sA==} + engines: {node: '>=18'} + + kareem@2.6.3: + resolution: {integrity: sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==} + engines: {node: '>=12.0.0'} + + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + keyv@5.3.2: + resolution: {integrity: sha512-Lji2XRxqqa5Wg+CHLVfFKBImfJZ4pCSccu9eVWK6w4c2SDFLd8JAn1zqTuSFnsxb7ope6rMsnIHfp+eBbRBRZQ==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa-convert@2.0.0: + resolution: {integrity: sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==} + engines: {node: '>= 10'} + + koa@2.16.0: + resolution: {integrity: sha512-Afhqq0Vq3W7C+/rW6IqHVBDLzqObwZ07JaUNUEF8yCQ6afiyFE3RAy+i7V0E46XOWlH7vPWn/x0vsZwNy6PWxw==} + engines: {node: ^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + ky@1.7.5: + resolution: {integrity: sha512-HzhziW6sc5m0pwi5M196+7cEBtbt0lCYi67wNsiwMUmz833wloE0gbzJPWKs1gliFKQb34huItDQX97LyOdPdA==} + engines: {node: '>=18'} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + latest-version@9.0.0: + resolution: {integrity: sha512-7W0vV3rqv5tokqkBAFV1LbR7HPOWzXQDpDgEuib/aJ1jsZZx6x3c2mBI+TJhJzOhkGeaLbCKEHXEXLfirtG2JA==} + engines: {node: '>=18'} + + launch-editor@2.10.0: + resolution: {integrity: sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + less-loader@12.2.0: + resolution: {integrity: sha512-MYUxjSQSBUQmowc0l5nPieOYwMzGPUaTzB6inNW/bdPEG9zOL3eAAD1Qw5ZxSPk7we5dMojHwNODYMV1hq4EVg==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + less: ^3.5.0 || ^4.0.0 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + less@4.2.2: + resolution: {integrity: sha512-tkuLHQlvWUTeQ3doAqnHbNn8T6WX1KA8yvbKG9x4VtKtIjHsVKQZCH11zRgAfbDAXC2UNIg/K9BYAAcEzUIrNg==} + engines: {node: '>=6'} + hasBin: true + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + lint-staged@15.5.0: + resolution: {integrity: sha512-WyCzSbfYGhK7cU+UuDDkzUiytbfbi0ZdPy2orwtM75P3WTtQBzmG40cCxIa8Ii2+XjfxzLH6Be46tUfWS85Xfg==} + engines: {node: '>=18.12.0'} + hasBin: true + + listr2@8.2.5: + resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==} + engines: {node: '>=18.0.0'} + + load-json-file@7.0.1: + resolution: {integrity: sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + loader-runner@4.3.0: + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + engines: {node: '>=6.11.5'} + + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isequal@4.5.0: + resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead. + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + + log-symbols@7.0.0: + resolution: {integrity: sha512-zrc91EDk2M+2AXo/9BTvK91pqb7qrPg2nX/Hy+u8a5qQlbaOflCKO+6SqgZ+M+xUFxGdKTgwnGiL96b1W3ikRA==} + engines: {node: '>=18'} + + log-update@6.1.0: + resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} + engines: {node: '>=18'} + + log4js@6.9.1: + resolution: {integrity: sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==} + engines: {node: '>=8.0'} + + logform@2.7.0: + resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} + engines: {node: '>= 12.0.0'} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + long@5.3.1: + resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + luxon@3.6.0: + resolution: {integrity: sha512-WE7p0p7W1xji9qxkLYsvcIxZyfP48GuFrWIBQZIsbjCyf65dG1rv4n83HcOyEyhvzxJCrUoObCRNFgRNIQ5KNA==} + engines: {node: '>=12'} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + make-dir@2.1.0: + resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} + engines: {node: '>=6'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-dir@5.0.0: + resolution: {integrity: sha512-G0yBotnlWVonPClw+tq+xi4K7DZC9n96HjGTBDdHkstAVsDkfZhi1sTvZypXLpyQTbISBkDtK0E5XlUqDsShQg==} + engines: {node: '>=18'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + map-obj@5.0.2: + resolution: {integrity: sha512-K6K2NgKnTXimT3779/4KxSvobxOtMmx1LBZ3NwRxT/MDIR3Br/fQ4Q+WCX5QxjyUR8zg5+RV9Tbf2c5pAWTD2A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + + marked@15.0.7: + resolution: {integrity: sha512-dgLIeKGLx5FwziAnsk4ONoGwHwGPJzselimvlVskE9XLN4Orv9u2VA3GWw/lYUqjfA0rUT/6fqKwfZJapP9BEg==} + engines: {node: '>= 18'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdn-data@2.18.0: + resolution: {integrity: sha512-gtCy1yim/vpHF/tq3B4Z43x3zKWpYeb4IM3d/Mf4oMYcNuoXOYEaqtoFlLHw9zd7+WNN3jNh6/WXyUrD3OIiwQ==} + + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memfs@4.17.0: + resolution: {integrity: sha512-4eirfZ7thblFmqFjywlTmuWVSvccHAJbn1r8qQLzmTO11qcqpohOjmY2mFce6x7x7WtskzRqApPD0hv+Oa74jg==} + engines: {node: '>= 4.0.0'} + + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@4.0.6: + resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} + engines: {node: '>=16'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^5.0.0 + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@10.0.1: + resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + engines: {node: 20 || >=22} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@2.0.1: + resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==} + engines: {node: '>=16 || 14 >=14.17'} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.0.1: + resolution: {integrity: sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==} + engines: {node: '>= 18'} + + mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mocha@11.1.0: + resolution: {integrity: sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + + moment@2.30.1: + resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==} + + mongodb-connection-string-url@3.0.2: + resolution: {integrity: sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==} + + mongodb@6.15.0: + resolution: {integrity: sha512-ifBhQ0rRzHDzqp9jAQP6OwHSH7dbYIQjD3SbJs9YYk9AikKEettW/9s/tbSFDTpXcRbF+u1aLrhHxDFaYtZpFQ==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 || ^2.0.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mongoose@8.13.0: + resolution: {integrity: sha512-e/iYV1mPeOkg+SWAMHzt3t42/EZyER3OB1H2pjP9C3vQ+Qb5DMeV9Kb+YCUycKgScA3fbwL7dKG4EpinGlg21g==} + engines: {node: '>=16.20.1'} + + morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} + + motion-dom@12.6.0: + resolution: {integrity: sha512-1s/+/V0ny/gfhocSSf0qhkspZK2da7jrwGw7xHzgiQPcimdHaPRcRCoJ3OxEZYBNzy3ma1ERUD+eUStk6a9pQw==} + + motion-utils@12.5.0: + resolution: {integrity: sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==} + + mpath@0.9.0: + resolution: {integrity: sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==} + engines: {node: '>=4.0.0'} + + mquery@5.0.0: + resolution: {integrity: sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==} + engines: {node: '>=14.0.0'} + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + multer@1.4.5-lts.2: + resolution: {integrity: sha512-VzGiVigcG9zUAoCNU+xShztrlr1auZOlurXynNvO9GiWD1/mTBbUljOKY+qMeazBqXgRnjzeEgJI/wyjJUHg9A==} + engines: {node: '>= 6.0.0'} + + multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + nan@2.22.2: + resolution: {integrity: sha512-DANghxFkS1plDdRsX0X9pm0Z6SJNN6gBdtXfanwoZ8hooC5gosGFSBGRYHUVPz1asKA/kMRqDRdHrluZ61SpBQ==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@5.1.5: + resolution: {integrity: sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==} + engines: {node: ^18 || >=20} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + + negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + next@15.2.4: + resolution: {integrity: sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==} + engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + babel-plugin-react-compiler: '*' + react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + nice-try@3.0.1: + resolution: {integrity: sha512-Fge6ClHO5v/z/tN31B2wlCPfRm289/ag1O2oi+EWNdAhxOZqGW1fWsisROvUuXaE7UEAYdd+upiAMvz57bK2MQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + + node-addon-api@8.3.1: + resolution: {integrity: sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==} + engines: {node: ^18 || ^20 || >= 21} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + nodemailer@6.10.0: + resolution: {integrity: sha512-SQ3wZCExjeSatLE/HBaXS5vqUOQk6GtBdIIKxiFdmm01mOQZX/POJkO3SUX1wDiYcwUOJwT23scFSC9fY2H8IA==} + engines: {node: '>=6.0.0'} + + nodemon@3.1.9: + resolution: {integrity: sha512-hdr1oIb2p6ZSxu3PB2JWWYS7ZQ0qvaZsc3hK8DR8f02kRzc8rjYmxAIvdz+aYC+8F2IjNaB7HMcSDg8nQpJxyg==} + engines: {node: '>=10'} + hasBin: true + + nopt@8.1.0: + resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + + normalize-package-data@7.0.0: + resolution: {integrity: sha512-k6U0gKRIuNCTkwHGZqblCfLfBRh+w1vI6tBo+IeJwq2M8FUiOqhX7GH+GArQGScA7azd1WfyRCvxoXDO3hQDIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + + npm-package-arg@12.0.2: + resolution: {integrity: sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + npm@11.2.0: + resolution: {integrity: sha512-PcnFC6gTo9VDkxVaQ1/mZAS3JoWrDjAI+a6e2NgfYQSGDwftJlbdV0jBMi2V8xQPqbGcWaa7p3UP0SKF+Bhm2g==} + engines: {node: ^20.17.0 || >=22.9.0} + hasBin: true + bundledDependencies: + - '@isaacs/string-locale-compare' + - '@npmcli/arborist' + - '@npmcli/config' + - '@npmcli/fs' + - '@npmcli/map-workspaces' + - '@npmcli/package-json' + - '@npmcli/promise-spawn' + - '@npmcli/redact' + - '@npmcli/run-script' + - '@sigstore/tuf' + - abbrev + - archy + - cacache + - chalk + - ci-info + - cli-columns + - fastest-levenshtein + - fs-minipass + - glob + - graceful-fs + - hosted-git-info + - ini + - init-package-json + - is-cidr + - json-parse-even-better-errors + - libnpmaccess + - libnpmdiff + - libnpmexec + - libnpmfund + - libnpmorg + - libnpmpack + - libnpmpublish + - libnpmsearch + - libnpmteam + - libnpmversion + - make-fetch-happen + - minimatch + - minipass + - minipass-pipeline + - ms + - node-gyp + - nopt + - normalize-package-data + - npm-audit-report + - npm-install-checks + - npm-package-arg + - npm-pick-manifest + - npm-profile + - npm-registry-fetch + - npm-user-validate + - p-map + - pacote + - parse-conflict-json + - proc-log + - qrcode-terminal + - read + - semver + - spdx-expression-parse + - ssri + - supports-color + - tar + - text-table + - tiny-relative-date + - treeverse + - validate-npm-package-name + - which + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nwsapi@2.2.19: + resolution: {integrity: sha512-94bcyI3RsqiZufXjkr3ltkI86iEl+I7uiHVDtcq9wJUTwYQJ5odHDeSzkkrRzi80jJ8MaeZgqKjH1bAWAFw9bA==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.entries@1.1.9: + resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + only@0.0.2: + resolution: {integrity: sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==} + + open@10.1.0: + resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==} + engines: {node: '>=18'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + + os-homedir@1.0.2: + resolution: {integrity: sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==} + engines: {node: '>=0.10.0'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-cancelable@4.0.1: + resolution: {integrity: sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==} + engines: {node: '>=14.16'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-limit@6.2.0: + resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} + engines: {node: '>=18'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + + p-retry@6.2.1: + resolution: {integrity: sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==} + engines: {node: '>=16.17'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + p-try@3.0.0: + resolution: {integrity: sha512-nD1xrH3cV2epQsO8pv6p28i/TdrzJQ5g73c41a+fu+3uhABdf7xujY58ebIuSrOQYxNb8WqNDpX6HjYl8P0KfQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + + package-json@10.0.1: + resolution: {integrity: sha512-ua1L4OgXSBdsu1FPb7F3tYH0F48a6kxvod4pLUlGY9COeJAJQNX/sNH2IiEmsxw7lqYiAwrdHMjz1FctOsyDQg==} + engines: {node: '>=18'} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + pako@2.1.0: + resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-json@8.2.0: + resolution: {integrity: sha512-eONBZy4hm2AgxjNFd8a4nyDJnzUAH0g34xSQAwWEVGCjdZ4ZL7dKZBfq267GWP/JaS9zW62Xs2FeAdDvpHHJGQ==} + engines: {node: '>=18'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse-node-version@1.0.1: + resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} + engines: {node: '>= 0.10'} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + path@0.12.7: + resolution: {integrity: sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + peek-readable@7.0.0: + resolution: {integrity: sha512-nri2TO5JE3/mRryik9LlHFT53cgHfRK0Lt0BAZQXku/AW3E6XLt2GaY8siWi7dvW/m1z0ecn+J+bpDa9ZN3IsQ==} + engines: {node: '>=18'} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + + pg-connection-string@2.7.0: + resolution: {integrity: sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-pool@3.8.0: + resolution: {integrity: sha512-VBw3jiVm6ZOdLBTIcXLNdSotb6Iy3uOCwDGFAksZCXmi10nyRvnP2v3jl4d+IsLYRyXf6o9hIm/ZtUzlByNUdw==} + peerDependencies: + pg: '>=8.0' + + pg-protocol@1.8.0: + resolution: {integrity: sha512-jvuYlEkL03NRvOoyoRktBK7+qU5kOvlAwvmrH8sr3wbLrOdVWsRxQfz8mMy9sZFsqJ1hEWNfdWKI4SAmoL+j7g==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg@8.14.1: + resolution: {integrity: sha512-0TdbqfjwIun9Fm/r89oB7RFQ0bLgduAhiIqIXOsyKoiC/L54DbuAAzIEN/9Op0f1Po9X7iCPXGoa/Ah+2aI8Xw==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + + pify@6.1.0: + resolution: {integrity: sha512-KocF8ve28eFjjuBKKGvzOBGzG8ew2OqOOSxTTZhirkzH7h3BI1vyzqlR0qbfcDBve1Yzo3FVlWUAtCRrbVN8Fw==} + engines: {node: '>=14.16'} + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.6.0: + resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} + hasBin: true + + pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} + + pkg-dir@8.0.0: + resolution: {integrity: sha512-4peoBq4Wks0riS0z8741NVv+/8IiTvqnZAr8QGgtdifrtpdXbNw/FxRS1l6NFqm4EMzuS0EDqNNx4XGaz8cuyQ==} + engines: {node: '>=18'} + + playwright-core@1.51.1: + resolution: {integrity: sha512-/crRMj8+j/Nq5s8QcvegseuyeZPxpQCZb6HNk3Sos3BlZyAknRjoyJPFWkpNn8v0+P3WiwqFF8P+zQo4eqiNuw==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.51.1: + resolution: {integrity: sha512-kkx+MB2KQRkyxjYPc3a0wLZZoDczmppyGJIvQ43l+aZihkaVvmu/21kiyaHeHjiFxjxNNFnUncKmcGIyOojsaw==} + engines: {node: '>=18'} + hasBin: true + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + pnpm@10.6.5: + resolution: {integrity: sha512-zfko/KIIMs1Z7FOCZJK33CXcUk1DcLa0rb9lgD0y76psHIgUfArk6NV5psnuxxV1e1DU+jXuoXnYaOraTtBDrw==} + engines: {node: '>=18.12'} + hasBin: true + + polished@4.3.1: + resolution: {integrity: sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==} + engines: {node: '>=10'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-calc@10.1.1: + resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==} + engines: {node: ^18.12 || ^20.9 || >=22.0} + peerDependencies: + postcss: ^8.4.38 + + postcss-colormin@7.0.2: + resolution: {integrity: sha512-YntRXNngcvEvDbEjTdRWGU606eZvB5prmHG4BF0yLmVpamXbpsRJzevyy6MZVyuecgzI2AWAlvFi8DAeCqwpvA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-convert-values@7.0.4: + resolution: {integrity: sha512-e2LSXPqEHVW6aoGbjV9RsSSNDO3A0rZLCBxN24zvxF25WknMPpX8Dm9UxxThyEbaytzggRuZxaGXqaOhxQ514Q==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-comments@7.0.3: + resolution: {integrity: sha512-q6fjd4WU4afNhWOA2WltHgCbkRhZPgQe7cXF74fuVB/ge4QbM9HEaOIzGSiMvM+g/cOsNAUGdf2JDzqA2F8iLA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-duplicates@7.0.1: + resolution: {integrity: sha512-oZA+v8Jkpu1ct/xbbrntHRsfLGuzoP+cpt0nJe5ED2FQF8n8bJtn7Bo28jSmBYwqgqnqkuSXJfSUEE7if4nClQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-empty@7.0.0: + resolution: {integrity: sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-discard-overridden@7.0.0: + resolution: {integrity: sha512-GmNAzx88u3k2+sBTZrJSDauR0ccpE24omTQCVmaTTZFz1du6AasspjaUPMJ2ud4RslZpoFKyf+6MSPETLojc6w==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-import@16.1.0: + resolution: {integrity: sha512-7hsAZ4xGXl4MW+OKEWCnF6T5jqBw80/EE9aXg1r2yyn1RsVEU8EtKXbijEODa+rg7iih4bKf7vlvTGYR4CnPNg==} + engines: {node: '>=18.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-loader@8.1.1: + resolution: {integrity: sha512-0IeqyAsG6tYiDRCYKQJLAmgQr47DX6N7sFSWvQxt6AcupX8DIdmykuk/o/tx0Lze3ErGHJEp5OSRxrelC6+NdQ==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true + + postcss-merge-longhand@7.0.4: + resolution: {integrity: sha512-zer1KoZA54Q8RVHKOY5vMke0cCdNxMP3KBfDerjH/BYHh4nCIh+1Yy0t1pAEQF18ac/4z3OFclO+ZVH8azjR4A==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-merge-rules@7.0.4: + resolution: {integrity: sha512-ZsaamiMVu7uBYsIdGtKJ64PkcQt6Pcpep/uO90EpLS3dxJi6OXamIobTYcImyXGoW0Wpugh7DSD3XzxZS9JCPg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-font-values@7.0.0: + resolution: {integrity: sha512-2ckkZtgT0zG8SMc5aoNwtm5234eUx1GGFJKf2b1bSp8UflqaeFzR50lid4PfqVI9NtGqJ2J4Y7fwvnP/u1cQog==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-gradients@7.0.0: + resolution: {integrity: sha512-pdUIIdj/C93ryCHew0UgBnL2DtUS3hfFa5XtERrs4x+hmpMYGhbzo6l/Ir5de41O0GaKVpK1ZbDNXSY6GkXvtg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-params@7.0.2: + resolution: {integrity: sha512-nyqVLu4MFl9df32zTsdcLqCFfE/z2+f8GE1KHPxWOAmegSo6lpV2GNy5XQvrzwbLmiU7d+fYay4cwto1oNdAaQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-minify-selectors@7.0.4: + resolution: {integrity: sha512-JG55VADcNb4xFCf75hXkzc1rNeURhlo7ugf6JjiiKRfMsKlDzN9CXHZDyiG6x/zGchpjQS+UAgb1d4nqXqOpmA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-modules-extract-imports@3.1.0: + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-local-by-default@4.2.0: + resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-scope@3.2.1: + resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-modules-values@4.0.0: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + + postcss-nested@7.0.2: + resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-normalize-charset@7.0.0: + resolution: {integrity: sha512-ABisNUXMeZeDNzCQxPxBCkXexvBrUHV+p7/BXOY+ulxkcjUZO0cp8ekGBwvIh2LbCwnWbyMPNJVtBSdyhM2zYQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-display-values@7.0.0: + resolution: {integrity: sha512-lnFZzNPeDf5uGMPYgGOw7v0BfB45+irSRz9gHQStdkkhiM0gTfvWkWB5BMxpn0OqgOQuZG/mRlZyJxp0EImr2Q==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-positions@7.0.0: + resolution: {integrity: sha512-I0yt8wX529UKIGs2y/9Ybs2CelSvItfmvg/DBIjTnoUSrPxSV7Z0yZ8ShSVtKNaV/wAY+m7bgtyVQLhB00A1NQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-repeat-style@7.0.0: + resolution: {integrity: sha512-o3uSGYH+2q30ieM3ppu9GTjSXIzOrRdCUn8UOMGNw7Af61bmurHTWI87hRybrP6xDHvOe5WlAj3XzN6vEO8jLw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-string@7.0.0: + resolution: {integrity: sha512-w/qzL212DFVOpMy3UGyxrND+Kb0fvCiBBujiaONIihq7VvtC7bswjWgKQU/w4VcRyDD8gpfqUiBQ4DUOwEJ6Qg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-timing-functions@7.0.0: + resolution: {integrity: sha512-tNgw3YV0LYoRwg43N3lTe3AEWZ66W7Dh7lVEpJbHoKOuHc1sLrzMLMFjP8SNULHaykzsonUEDbKedv8C+7ej6g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-unicode@7.0.2: + resolution: {integrity: sha512-ztisabK5C/+ZWBdYC+Y9JCkp3M9qBv/XFvDtSw0d/XwfT3UaKeW/YTm/MD/QrPNxuecia46vkfEhewjwcYFjkg==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-url@7.0.0: + resolution: {integrity: sha512-+d7+PpE+jyPX1hDQZYG+NaFD+Nd2ris6r8fPTBAjE8z/U41n/bib3vze8x7rKs5H1uEw5ppe9IojewouHk0klQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-normalize-whitespace@7.0.0: + resolution: {integrity: sha512-37/toN4wwZErqohedXYqWgvcHUGlT8O/m2jVkAfAe9Bd4MzRqlBmXrJRePH0e9Wgnz2X7KymTgTOaaFizQe3AQ==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-ordered-values@7.0.1: + resolution: {integrity: sha512-irWScWRL6nRzYmBOXReIKch75RRhNS86UPUAxXdmW/l0FcAsg0lvAXQCby/1lymxn/o0gVa6Rv/0f03eJOwHxw==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-initial@7.0.2: + resolution: {integrity: sha512-pOnu9zqQww7dEKf62Nuju6JgsW2V0KRNBHxeKohU+JkHd/GAH5uvoObqFLqkeB2n20mr6yrlWDvo5UBU5GnkfA==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-reduce-transforms@7.0.0: + resolution: {integrity: sha512-pnt1HKKZ07/idH8cpATX/ujMbtOGhUfE+m8gbqwJE05aTaNw8gbo34a2e3if0xc0dlu75sUOiqvwCGY3fzOHew==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-svgo@7.0.1: + resolution: {integrity: sha512-0WBUlSL4lhD9rA5k1e5D8EN5wCEyZD6HJk0jIvRxl+FDVOMlJ7DePHYWGGVc5QRqrJ3/06FTXM0bxjmJpmTPSA==} + engines: {node: ^18.12.0 || ^20.9.0 || >= 18} + peerDependencies: + postcss: ^8.4.31 + + postcss-unique-selectors@7.0.3: + resolution: {integrity: sha512-J+58u5Ic5T1QjP/LDV9g3Cx4CNOgB5vz+kM6+OxHHhFACdcDeKhBXjQmB7fnIZM12YSTvsL0Opwco83DmacW2g==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + engines: {node: ^10 || ^12 || >=14} + + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + + pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + prismjs@1.30.0: + resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} + engines: {node: '>=6'} + + private@0.1.8: + resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} + engines: {node: '>= 0.6'} + + proc-log@5.0.0: + resolution: {integrity: sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@4.0.1: + resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + promise@8.3.0: + resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + property-expr@2.0.6: + resolution: {integrity: sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + prr@1.0.1: + resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + + punycode@1.3.2: + resolution: {integrity: sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} + + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + query-string@9.1.1: + resolution: {integrity: sha512-MWkCOVIcJP9QSKU52Ngow6bsAWAPlPK2MludXvcrS2bGZSl+T1qX9MZvRIkqUIkGLJquMJHWfsT6eRqUpp4aWg==} + engines: {node: '>=18'} + + querystring@0.2.0: + resolution: {integrity: sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + + raf@3.4.1: + resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==} + + ramda@0.30.1: + resolution: {integrity: sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.0.0: + resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} + peerDependencies: + react: ^19.0.0 + + react-hook-form@7.54.2: + resolution: {integrity: sha512-eHpAUgUjWbZocoQYUHposymRb4ZP6d0uwUnooL2uOybA9/3tPUvoAKqEWK1WaSiTxxOfTpffNZP7QwlnM3/gEg==} + engines: {node: '>=18.0.0'} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 || ^19 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} + + react-is@19.0.0: + resolution: {integrity: sha512-H91OHcwjZsbq3ClIDHMzBShc1rotbfACdWENsmEf0IFvZ3FgGPtdHMcsv45bQ1hAbgdfiA8SnxTKfDS+x/8m2g==} + + react-redux@9.2.0: + resolution: {integrity: sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==} + peerDependencies: + '@types/react': ^18.2.25 || ^19 + react: ^18.0 || ^19 + redux: ^5.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + redux: + optional: true + + react-refresh@0.16.0: + resolution: {integrity: sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A==} + engines: {node: '>=0.10.0'} + + react-router-dom@7.4.0: + resolution: {integrity: sha512-VlksBPf3n2bijPvnA7nkTsXxMAKOj+bWp4R9c3i+bnwlSOFAGOkJkKhzy/OsRkWaBMICqcAl1JDzh9ZSOze9CA==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + + react-router@7.4.0: + resolution: {integrity: sha512-Y2g5ObjkvX3VFeVt+0CIPuYd9PpgqCslG7ASSIdN73LwA1nNWzcMLaoMRJfP3prZFI92svxFwbn7XkLJ+UPQ6A==} + engines: {node: '>=20.0.0'} + peerDependencies: + react: '>=18' + react-dom: '>=18' + peerDependenciesMeta: + react-dom: + optional: true + + react-transition-group@4.4.5: + resolution: {integrity: sha512-pZcd1MCJoiKiBR2NRxeCRg13uCXbydPnmB4EOeRrY7480qNWO8IIgQG6zlDkm6uRMsURXPuKq0GWtiM59a5Q6g==} + peerDependencies: + react: '>=16.6.0' + react-dom: '>=16.6.0' + + react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + recast@0.23.11: + resolution: {integrity: sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==} + engines: {node: '>= 4'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + rechoir@0.8.0: + resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==} + engines: {node: '>= 10.13.0'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redent@4.0.0: + resolution: {integrity: sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==} + engines: {node: '>=12'} + + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + + redux-thunk@3.1.0: + resolution: {integrity: sha512-NW2r5T6ksUKXCabzhL9z+h206HQw/NJkcLm1GPImRQ8IzfXwRGqjVhKJGauHirT0DAuyy6hjdnMZaRoAcy0Klw==} + peerDependencies: + redux: ^5.0.0 + + redux@5.0.1: + resolution: {integrity: sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==} + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.11.1: + resolution: {integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + registry-auth-token@5.1.0: + resolution: {integrity: sha512-GdekYuwLXLxMuFTwAPg5UKGLW/UXzQrZvH/Zj791BQif5T05T0RsaLfHc9q3ZOKi7n+BoprPD9mJ0O0k4xzUlw==} + engines: {node: '>=14'} + + registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + + repeating@2.0.1: + resolution: {integrity: sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==} + engines: {node: '>=0.10.0'} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-in-the-middle@7.5.2: + resolution: {integrity: sha512-gAZ+kLqBdHarXB64XpAe2VCjB7rIRv+mU8tfRWziHRJ5umKsIHN2tLLv6EtMw7WCdP19S0ERVMldNvxYCHnhSQ==} + engines: {node: '>=8.6.0'} + + require-main-filename@2.0.0: + resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + reselect@5.1.1: + resolution: {integrity: sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==} + + resize-observer-polyfill@1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + + resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.3: + resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} + + rimraf@5.0.10: + resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + rollup@4.37.0: + resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + rspack-resolver@1.2.2: + resolution: {integrity: sha512-Fwc19jMBA3g+fxDJH2B4WxwZjE0VaaOL7OX/A4Wn5Zv7bOD/vyPZhzXfaO73Xc2GAlfi96g5fGUa378WbIGfFw==} + + run-applescript@7.0.0: + resolution: {integrity: sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==} + engines: {node: '>=18'} + + run-async@3.0.0: + resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + rxjs@7.8.2: + resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.5.0: + resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + sass-loader@16.0.5: + resolution: {integrity: sha512-oL+CMBXrj6BZ/zOq4os+UECPL+bWqt6OAC6DWS8Ln8GZRcMDjlJ4JC3FBDuHJdYaFWIdKNIBYmtZtK2MaMkNIw==} + engines: {node: '>= 18.12.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + sass-embedded: '*' + webpack: ^5.0.0 + peerDependenciesMeta: + '@rspack/core': + optional: true + node-sass: + optional: true + sass: + optional: true + sass-embedded: + optional: true + webpack: + optional: true + + sass@1.86.0: + resolution: {integrity: sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.2.1: + resolution: {integrity: sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==} + + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + scheduler@0.25.0: + resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} + + schema-utils@4.3.0: + resolution: {integrity: sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==} + engines: {node: '>= 10.13.0'} + + select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + + selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} + + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + semver@7.7.1: + resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + engines: {node: '>=10'} + hasBin: true + + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} + + send@1.1.0: + resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==} + engines: {node: '>= 18'} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} + + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-cookie-parser@2.7.1: + resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + set-value@4.1.0: + resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} + engines: {node: '>=11.0'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shebang-regex@4.0.0: + resolution: {integrity: sha512-YSKeSljCliLkWidW84GWL1HCguI0iEqhnBOLhrVXw/fN9he9ngekCy8zqJ1jXTPYmJ3Xkf3gLuNDVHQWdRqinw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + shell-quote@1.8.2: + resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} + engines: {node: '>= 0.4'} + + shelljs@0.9.2: + resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} + engines: {node: '>=18'} + hasBin: true + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + sift@17.1.3: + resolution: {integrity: sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-git@3.27.0: + resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@1.0.0: + resolution: {integrity: sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==} + engines: {node: '>=0.10.0'} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + + slice-ansi@7.1.0: + resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + engines: {node: '>=18'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + socket.io-adapter@2.5.5: + resolution: {integrity: sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==} + + socket.io-client@4.8.1: + resolution: {integrity: sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==} + engines: {node: '>=10.0.0'} + + socket.io-parser@4.2.4: + resolution: {integrity: sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==} + engines: {node: '>=10.0.0'} + + socket.io@4.8.1: + resolution: {integrity: sha512-oZ7iUCxph8WYRHHcjBEc9unw3adt5CmSNlppj/5Q4k2RIrhl8Z5yY2Xr4j9zj0+wzVZ0bxmYoGSzKJnRl6A4yg==} + engines: {node: '>=10.2.0'} + + sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} + + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.4.18: + resolution: {integrity: sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-expression-parse@4.0.0: + resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} + + spdx-license-ids@3.0.21: + resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==} + + spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + + spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + + split-on-first@3.0.0: + resolution: {integrity: sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==} + engines: {node: '>=12'} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@12.0.0: + resolution: {integrity: sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + stable-hash@0.0.5: + resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackframe@1.3.4: + resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==} + + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + + statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + streamroller@3.1.5: + resolution: {integrity: sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==} + engines: {node: '>=8.0'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + streamx@2.22.0: + resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + + string-argv@0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-length@6.0.0: + resolution: {integrity: sha512-1U361pxZHEQ+FeSjzqRpV+cu2vTzYeWeafXFLykiFlv4Vc0n3njgU8HrMbyik5uwm77naWMuVG8fhEF+Ovb1Kg==} + engines: {node: '>=16'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} + + string.prototype.matchall@4.0.12: + resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} + engines: {node: '>= 0.4'} + + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + strip-ansi@3.0.1: + resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==} + engines: {node: '>=0.10.0'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-bom@5.0.0: + resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==} + engines: {node: '>=12'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strip-json-comments@5.0.1: + resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==} + engines: {node: '>=14.16'} + + strnum@1.1.2: + resolution: {integrity: sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==} + + strnum@2.0.5: + resolution: {integrity: sha512-YAT3K/sgpCUxhxNMrrdhtod3jckkpYwH6JAuwmUdXZsmzH1wUyzTMrrK2wYCEEqlKwrWDd35NeuUkbBy/1iK+Q==} + + strtok3@10.2.2: + resolution: {integrity: sha512-Xt18+h4s7Z8xyZ0tmBoRmzxcop97R4BAh+dXouUDCYn+Em+1P3qpkUfI5ueWLT8ynC5hZ+q4iPEmGG1urvQGBg==} + engines: {node: '>=18'} + + stubborn-fs@1.2.5: + resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} + + style-loader@4.0.0: + resolution: {integrity: sha512-1V4WqhhZZgjVAVJyt7TdDPZoPBPNHbekX4fWnCJL1yQukhCeZhJySUL+gL9y6sNdN95uEOS83Y55SqHcP7MzLA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.27.0 + + styled-jsx@5.1.6: + resolution: {integrity: sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true + + stylehacks@7.0.4: + resolution: {integrity: sha512-i4zfNrGMt9SB4xRK9L83rlsFCgdGANfeDAYacO1pkqcE7cRHPdWHwnKZVz7WY17Veq/FvyYsRAU++Ga+qDFIww==} + engines: {node: ^18.12.0 || ^20.9.0 || >=22.0} + peerDependencies: + postcss: ^8.4.31 + + stylis@4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + superagent@10.2.0: + resolution: {integrity: sha512-IKeoGox6oG9zyDeizaezkJ2/aK0wc5la9st7WsAKyrAkfJ56W3whVbVtF68k6wuc87/y9T85NyON5FLz7Mrzzw==} + engines: {node: '>=14.18.0'} + + supports-color@10.0.0: + resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} + engines: {node: '>=18'} + + supports-color@2.0.0: + resolution: {integrity: sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==} + engines: {node: '>=0.8.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + synckit@0.10.3: + resolution: {integrity: sha512-R1urvuyiTaWfeCggqEvpDJwAlDVdsT9NM+IP//Tk2x7qHCkSvBk/fwFgw/TLAHzZlrAnnazMcRw0ZD8HlYFTEQ==} + engines: {node: ^14.18.0 || >=16.0.0} + + tailwind-merge@3.0.2: + resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} + + tailwindcss@4.0.16: + resolution: {integrity: sha512-i/SbG7ThTIcLshcFJL+je7hCv9dPis4Xl4XNeel6iZNX42pp/BZ+la+SbZIPoYE+PN8zhKbnHblpQ/lhOWwIeQ==} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + + terser-webpack-plugin@5.3.14: + resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + + terser@5.39.0: + resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thingies@1.21.0: + resolution: {integrity: sha512-hsqsJsFMsV+aD4s3CWKk85ep/3I9XzYV/IXaSouJMYIoDlgyi11cBhsqYe9/geRfB0YIikBQg6raRaM+nIMP9g==} + engines: {node: '>=10.18'} + peerDependencies: + tslib: ^2 + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + through2@4.0.2: + resolution: {integrity: sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + + tiny-case@1.0.3: + resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + + tinyglobby@0.2.12: + resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==} + engines: {node: '>=12.0.0'} + + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + + tldts@6.1.85: + resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + hasBin: true + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-fast-properties@1.0.3: + resolution: {integrity: sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==} + engines: {node: '>=0.10.0'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-types@6.0.0: + resolution: {integrity: sha512-lbDrTLVsHhOMljPscd0yitpozq7Ga2M5Cvez5AjGg8GASBjtt6iERCAJ93yommPmz62fb45oFIXHEZ3u9bfJEA==} + engines: {node: '>=14.16'} + + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + + touch@3.1.1: + resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} + hasBin: true + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tr46@5.1.0: + resolution: {integrity: sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==} + engines: {node: '>=18'} + + tree-dump@1.0.2: + resolution: {integrity: sha512-dpev9ABuLWdEubk+cIaI9cHwRNNDjkBBLXTwI4UCUFdQ5xXKqNXoK4FEciw/vxf+NQ7Cb7sGUyeUtORvHIdRXQ==} + engines: {node: '>=10.0'} + peerDependencies: + tslib: '2' + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + trim-right@1.0.1: + resolution: {integrity: sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==} + engines: {node: '>=0.10.0'} + + triple-beam@1.4.1: + resolution: {integrity: sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==} + engines: {node: '>= 14.0.0'} + + trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: '>=4.8.4' + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.3.0: + resolution: {integrity: sha512-4bfGBX7Gd1Aqz3SyeDS9O276wEU/BInZxskPrbhZLyv+c1wskDCqDFMJQJLWrIr/fKoAH4GE5dKUlrdyvo+39A==} + engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: '>=4.3 <6' + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/transform': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-loader@9.5.2: + resolution: {integrity: sha512-Qo4piXvOTWcMGIgRiuFa6nHNm+54HbYaZCKqc9eeZCLRy3XqafQgwX2F7mofrbJG3g7EEb+lkiR+z2Lic2s3Zw==} + engines: {node: '>=12.0.0'} + peerDependencies: + typescript: '*' + webpack: ^5.0.0 + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': '*' + typescript: '>=2.7' + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.38.0: + resolution: {integrity: sha512-2dBz5D5ycHIoliLYLi0Q2V7KRaDlH0uWIvmk7TYlAg5slqwiPv1ezJdZm1QEM0xgk29oYWMCbIG7E6gHpvChlg==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray-to-buffer@4.0.0: + resolution: {integrity: sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typedarray@0.0.7: + resolution: {integrity: sha512-ueeb9YybpjhivjbHP2LdFDAjbS948fGEPj+ACAMs4xCMmh72OCOMQWBQKlaN4ZNQ04yfLSDLSx1tGRIoWimObQ==} + + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} + engines: {node: '>=14.17'} + hasBin: true + + ua-is-frozen@0.1.2: + resolution: {integrity: sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==} + + ua-parser-js@2.0.3: + resolution: {integrity: sha512-LZyXZdNttONW8LjzEH3Z8+6TE7RfrEiJqDKyh0R11p/kxvrV2o9DrT2FGZO+KVNs3k+drcIQ6C3En6wLnzJGpw==} + hasBin: true + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + uid@2.0.2: + resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==} + engines: {node: '>=8'} + + uint8array-extras@1.4.0: + resolution: {integrity: sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ==} + engines: {node: '>=18'} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + + undici@6.21.2: + resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} + engines: {node: '>=18.17'} + + undici@7.5.0: + resolution: {integrity: sha512-NFQG741e8mJ0fLQk90xKxFdaSM7z4+IQpAgsFI36bCDY9Z2+aXXZjVy2uUksMouWfMI9+w5ejOq5zYYTBCQJDQ==} + engines: {node: '>=20.18.1'} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} + + unique-filename@4.0.0: + resolution: {integrity: sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + unique-slug@5.0.0: + resolution: {integrity: sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==} + engines: {node: ^18.17.0 || >=20.5.0} + + unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} + + unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + + unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} + + unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + + unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} + + universal-user-agent@7.0.2: + resolution: {integrity: sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==} + + universalify@0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-notifier@7.3.1: + resolution: {integrity: sha512-+dwUY4L35XFYEzE+OAL3sarJdUioVovq+8f7lcIJ7wnmnYQV5UD1Y/lcwaMSyaQ6Bj3JMj1XSTjZbNLHn/19yA==} + engines: {node: '>=18'} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@5.0.0: + resolution: {integrity: sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + url@0.10.3: + resolution: {integrity: sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==} + + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + + use-sync-external-store@1.4.0: + resolution: {integrity: sha512-9WXSPC5fMv61vaupRkCKCxsPxBocVnwakBEkMIHHpkTTg6icbJtg6jzgtLDm4bl3cSHAca52rYWih0k4K3PfHw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.10.4: + resolution: {integrity: sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + + utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@8.0.0: + resolution: {integrity: sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@6.0.0: + resolution: {integrity: sha512-d7KLgL1LD3U3fgnvWEY1cQXoO/q6EQ1BSz48Sa149V/5zVTAbgmZIpyI8TRi6U9/JNyeYLlTKsEMPtLC27RFUg==} + engines: {node: ^18.17.0 || >=20.5.0} + + validator@13.15.0: + resolution: {integrity: sha512-36B2ryl4+oL5QxZ3AzD0t5SsMNGvTtQHpjgFO5tbNxfXbMFkY822ktCDe1MnlqV3301QQI9SLHDNJokDI+Z9pA==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + verror@1.10.1: + resolution: {integrity: sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==} + engines: {node: '>=0.6.0'} + + vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + + vite@6.2.3: + resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} + engines: {node: '>=10.13.0'} + + wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} + + web-vitals@4.2.4: + resolution: {integrity: sha512-r4DIlprAGwJ7YM11VZp4R884m0Vmgr6EAKe3P+kO0PPj3Unqyvv59rczf6UiGcb9Z8QxZVcqKNwv/g0WNdWwsw==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-cli@6.0.1: + resolution: {integrity: sha512-MfwFQ6SfwinsUVi0rNJm7rHZ31GyTcpVE5pgVA3hwFRb7COD4TzjUUwhGWKfO50+xdc2MQPuEBBJoqIMGt3JDw==} + engines: {node: '>=18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.82.0 + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + + webpack-dev-middleware@7.4.2: + resolution: {integrity: sha512-xOO8n6eggxnwYpy1NlzUKpvrjfJTvae5/D6WOK0S2LSo7vjmo5gCM1DbLUmFqrMTJP+W/0YZNctm7jasWvLuBA==} + engines: {node: '>= 18.12.0'} + peerDependencies: + webpack: ^5.0.0 + peerDependenciesMeta: + webpack: + optional: true + + webpack-dev-server@5.2.0: + resolution: {integrity: sha512-90SqqYXA2SK36KcT6o1bvwvZfJFcmoamqeJY7+boioffX9g9C0wjjJRGUrQIuh43pb0ttX7+ssavmj/WN2RHtA==} + engines: {node: '>= 18.12.0'} + hasBin: true + peerDependencies: + webpack: ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true + + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack@5.98.0: + resolution: {integrity: sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + + websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + + websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + when-exit@2.1.4: + resolution: {integrity: sha512-4rnvd3A1t16PWzrBUcSDZqcAmsUIy4minDXT/CZ8F2mVDgd65i4Aalimgz1aQkRGU0iH5eT5+6Rx2TK8o443Pg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + widest-line@5.0.0: + resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==} + engines: {node: '>=18'} + + wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} + + winston-transport@4.9.0: + resolution: {integrity: sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==} + engines: {node: '>= 12.0.0'} + + winston@3.17.0: + resolution: {integrity: sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==} + engines: {node: '>= 12.0.0'} + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrap-ansi@9.0.0: + resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + engines: {node: '>=18'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + write-file-atomic@6.0.0: + resolution: {integrity: sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==} + engines: {node: ^18.17.0 || >=20.5.0} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.1: + resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlbuilder@15.1.1: + resolution: {integrity: sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==} + engines: {node: '>=8.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xmlhttprequest-ssl@2.1.2: + resolution: {integrity: sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==} + engines: {node: '>=0.4.0'} + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.7.0: + resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} + engines: {node: '>= 14'} + hasBin: true + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + ylru@1.4.0: + resolution: {integrity: sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==} + engines: {node: '>= 4.0.0'} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yn@5.0.0: + resolution: {integrity: sha512-+l37+9TyGEsyxGLaTg6QgYy5KnOp74ZZl4dPFLQpBWSkO99uBC5jnS0pOGwXFViPbiaEtWbParH2KrgWWF2duQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yocto-queue@1.2.1: + resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} + engines: {node: '>=12.20'} + + yoctocolors-cjs@2.1.2: + resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + engines: {node: '>=18'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + yup@1.6.1: + resolution: {integrity: sha512-JED8pB50qbA4FOkDol0bYF/p60qSEDQqBD0/qeIrUCG1KbPBIQ776fCUNb9ldbPcSTxA69g/47XTo4TqWiuXOA==} + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + + zod@3.24.2: + resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} + + zone.js@0.15.0: + resolution: {integrity: sha512-9oxn0IIjbCZkJ67L+LkhYWRyAy7axphb3VgE2MBDlOqnmHMPWGYMxJxBYFueFq/JGY2GMwS0rU+UCLunEmy5UA==} + +snapshots: + + '@adobe/css-tools@4.4.2': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@angular-devkit/core@19.2.4(chokidar@4.0.3)': + dependencies: + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + jsonc-parser: 3.3.1 + picomatch: 4.0.2 + rxjs: 7.8.1 + source-map: 0.7.4 + optionalDependencies: + chokidar: 4.0.3 + + '@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2)': + dependencies: + '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@angular/compiler@19.2.3': + dependencies: + tslib: 2.8.1 + + '@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)': + dependencies: + rxjs: 7.8.2 + tslib: 2.8.1 + zone.js: 0.15.0 + + '@angular/forms@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) + '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@angular/platform-browser-dynamic@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/compiler@19.2.3)(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))': + dependencies: + '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) + '@angular/compiler': 19.2.3 + '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) + tslib: 2.8.1 + + '@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))': + dependencies: + '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) + '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + tslib: 2.8.1 + + '@angular/router@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(@angular/platform-browser@19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)))(rxjs@7.8.2)': + dependencies: + '@angular/common': 19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2) + '@angular/core': 19.2.3(rxjs@7.8.2)(zone.js@0.15.0) + '@angular/platform-browser': 19.2.3(@angular/common@19.2.3(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0))(rxjs@7.8.2))(@angular/core@19.2.3(rxjs@7.8.2)(zone.js@0.15.0)) + rxjs: 7.8.2 + tslib: 2.8.1 + + '@asamuzakjp/css-color@3.1.1': + dependencies: + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-locate-window': 3.723.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.734.0 + tslib: 2.8.1 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-s3@3.774.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-node': 3.774.0 + '@aws-sdk/middleware-bucket-endpoint': 3.734.0 + '@aws-sdk/middleware-expect-continue': 3.734.0 + '@aws-sdk/middleware-flexible-checksums': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-location-constraint': 3.734.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-sdk-s3': 3.774.0 + '@aws-sdk/middleware-ssec': 3.734.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/signature-v4-multi-region': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@aws-sdk/xml-builder': 3.734.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/eventstream-serde-browser': 4.0.2 + '@smithy/eventstream-serde-config-resolver': 4.1.0 + '@smithy/eventstream-serde-node': 4.0.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-blob-browser': 4.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/hash-stream-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/md5-js': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.3 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-node': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sts@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-node': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.774.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/core': 3.2.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + fast-xml-parser: 4.4.1 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-env@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/credential-provider-env': 3.774.0 + '@aws-sdk/credential-provider-http': 3.774.0 + '@aws-sdk/credential-provider-process': 3.774.0 + '@aws-sdk/credential-provider-sso': 3.774.0 + '@aws-sdk/credential-provider-web-identity': 3.774.0 + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.774.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.774.0 + '@aws-sdk/credential-provider-http': 3.774.0 + '@aws-sdk/credential-provider-ini': 3.774.0 + '@aws-sdk/credential-provider-process': 3.774.0 + '@aws-sdk/credential-provider-sso': 3.774.0 + '@aws-sdk/credential-provider-web-identity': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.774.0': + dependencies: + '@aws-sdk/client-sso': 3.774.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/token-providers': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/middleware-bucket-endpoint@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.774.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.774.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-location-constraint@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-recursion-detection@3.772.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-sdk-s3@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-arn-parser': 3.723.0 + '@smithy/core': 3.2.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.774.0': + dependencies: + '@aws-sdk/core': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@smithy/core': 3.2.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/nested-clients@3.774.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.774.0 + '@aws-sdk/middleware-host-header': 3.774.0 + '@aws-sdk/middleware-logger': 3.734.0 + '@aws-sdk/middleware-recursion-detection': 3.772.0 + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/region-config-resolver': 3.734.0 + '@aws-sdk/types': 3.734.0 + '@aws-sdk/util-endpoints': 3.743.0 + '@aws-sdk/util-user-agent-browser': 3.734.0 + '@aws-sdk/util-user-agent-node': 3.774.0 + '@smithy/config-resolver': 4.1.0 + '@smithy/core': 3.2.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-retry': 4.1.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.8 + '@smithy/util-defaults-mode-node': 4.0.8 + '@smithy/util-endpoints': 3.0.2 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/region-config-resolver@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + + '@aws-sdk/signature-v4-multi-region@3.774.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.774.0': + dependencies: + '@aws-sdk/nested-clients': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.734.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/util-arn-parser@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.743.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.2 + tslib: 2.8.1 + + '@aws-sdk/util-locate-window@3.723.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.734.0': + dependencies: + '@aws-sdk/types': 3.734.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-node@3.774.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.774.0 + '@aws-sdk/types': 3.734.0 + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.734.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/core@7.26.10(supports-color@10.0.0)': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helpers': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + '@babel/types': 7.27.0 + convert-source-map: 2.0.0 + debug: 4.4.0(supports-color@10.0.0) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.27.0': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.27.0 + + '@babel/helper-compilation-targets@7.27.0': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9(supports-color@10.0.0) + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + '@babel/traverse': 7.27.0(supports-color@10.0.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 + + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + debug: 4.4.0(supports-color@10.0.0) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9(supports-color@10.0.0)': + dependencies: + '@babel/traverse': 7.27.0(supports-color@10.0.0) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9(supports-color@10.0.0)': + dependencies: + '@babel/traverse': 7.27.0(supports-color@10.0.0) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.27.0 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9(supports-color@10.0.0) + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-member-expression-to-functions': 7.25.9(supports-color@10.0.0) + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9(supports-color@10.0.0)': + dependencies: + '@babel/traverse': 7.27.0(supports-color@10.0.0) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9(supports-color@10.0.0)': + dependencies: + '@babel/template': 7.27.0 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.27.0': + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/parser@7.27.0': + dependencies: + '@babel/types': 7.27.0 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/traverse': 7.27.0(supports-color@10.0.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.27.0 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.27.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/types': 7.27.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-runtime@7.26.10(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typescript@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9(supports-color@10.0.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-create-regexp-features-plugin': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-compilation-targets': 7.27.0 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-block-scoping': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-regenerator': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-typeof-symbol': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10(supports-color@10.0.0)) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + core-js-compat: 3.41.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10(supports-color@10.0.0))': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/types': 7.27.0 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + transitivePeerDependencies: + - supports-color + + '@babel/preset-typescript@7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + '@babel/plugin-transform-typescript': 7.27.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@babel/runtime@7.27.0': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.27.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@babel/traverse@7.27.0(supports-color@10.0.0)': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.27.0 + '@babel/parser': 7.27.0 + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + debug: 4.4.0(supports-color@10.0.0) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.27.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@bcoe/v8-coverage@0.2.3': {} + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + + '@csstools/color-helpers@5.0.2': {} + + '@csstools/css-calc@2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.8(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.2 + '@csstools/css-calc': 2.1.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@discoveryjs/json-ext@0.6.3': {} + + '@emnapi/core@1.3.1': + dependencies: + '@emnapi/wasi-threads': 1.0.1 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.1': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/babel-plugin@11.13.5(supports-color@10.0.0)': + dependencies: + '@babel/helper-module-imports': 7.25.9(supports-color@10.0.0) + '@babel/runtime': 7.27.0 + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/serialize': 1.3.3 + babel-plugin-macros: 3.1.0 + convert-source-map: 1.9.0 + escape-string-regexp: 4.0.0 + find-root: 1.1.0 + source-map: 0.5.7 + stylis: 4.2.0 + transitivePeerDependencies: + - supports-color + + '@emotion/cache@11.14.0': + dependencies: + '@emotion/memoize': 0.9.0 + '@emotion/sheet': 1.4.0 + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + stylis: 4.2.0 + + '@emotion/hash@0.9.2': {} + + '@emotion/is-prop-valid@1.3.1': + dependencies: + '@emotion/memoize': 0.9.0 + + '@emotion/memoize@0.9.0': {} + + '@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@emotion/babel-plugin': 11.13.5(supports-color@10.0.0) + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + '@emotion/weak-memoize': 0.4.0 + hoist-non-react-statics: 3.3.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 19.0.12 + transitivePeerDependencies: + - supports-color + + '@emotion/serialize@1.3.3': + dependencies: + '@emotion/hash': 0.9.2 + '@emotion/memoize': 0.9.0 + '@emotion/unitless': 0.10.0 + '@emotion/utils': 1.4.2 + csstype: 3.1.3 + + '@emotion/sheet@1.4.0': {} + + '@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0)': + dependencies: + '@babel/runtime': 7.27.0 + '@emotion/babel-plugin': 11.13.5(supports-color@10.0.0) + '@emotion/is-prop-valid': 1.3.1 + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@emotion/serialize': 1.3.3 + '@emotion/use-insertion-effect-with-fallbacks': 1.2.0(react@18.3.1) + '@emotion/utils': 1.4.2 + react: 18.3.1 + optionalDependencies: + '@types/react': 19.0.12 + transitivePeerDependencies: + - supports-color + + '@emotion/unitless@0.10.0': {} + + '@emotion/use-insertion-effect-with-fallbacks@1.2.0(react@18.3.1)': + dependencies: + react: 18.3.1 + + '@emotion/utils@1.4.2': {} + + '@emotion/weak-memoize@0.4.0': {} + + '@esbuild/aix-ppc64@0.25.1': + optional: true + + '@esbuild/android-arm64@0.25.1': + optional: true + + '@esbuild/android-arm@0.25.1': + optional: true + + '@esbuild/android-x64@0.25.1': + optional: true + + '@esbuild/darwin-arm64@0.25.1': + optional: true + + '@esbuild/darwin-x64@0.25.1': + optional: true + + '@esbuild/freebsd-arm64@0.25.1': + optional: true + + '@esbuild/freebsd-x64@0.25.1': + optional: true + + '@esbuild/linux-arm64@0.25.1': + optional: true + + '@esbuild/linux-arm@0.25.1': + optional: true + + '@esbuild/linux-ia32@0.25.1': + optional: true + + '@esbuild/linux-loong64@0.25.1': + optional: true + + '@esbuild/linux-mips64el@0.25.1': + optional: true + + '@esbuild/linux-ppc64@0.25.1': + optional: true + + '@esbuild/linux-riscv64@0.25.1': + optional: true + + '@esbuild/linux-s390x@0.25.1': + optional: true + + '@esbuild/linux-x64@0.25.1': + optional: true + + '@esbuild/netbsd-arm64@0.25.1': + optional: true + + '@esbuild/netbsd-x64@0.25.1': + optional: true + + '@esbuild/openbsd-arm64@0.25.1': + optional: true + + '@esbuild/openbsd-x64@0.25.1': + optional: true + + '@esbuild/sunos-x64@0.25.1': + optional: true + + '@esbuild/win32-arm64@0.25.1': + optional: true + + '@esbuild/win32-ia32@0.25.1': + optional: true + + '@esbuild/win32-x64@0.25.1': + optional: true + + '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))': + dependencies: + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.2(supports-color@10.0.0)': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.0(supports-color@10.0.0) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.0': {} + + '@eslint/core@0.12.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1(supports-color@10.0.0)': + dependencies: + ajv: 6.12.6 + debug: 4.4.0(supports-color@10.0.0) + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.23.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.7': + dependencies: + '@eslint/core': 0.12.0 + levn: 0.4.1 + + '@floating-ui/core@1.6.9': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.6.13': + dependencies: + '@floating-ui/core': 1.6.9 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@graphql-tools/utils@10.8.6(graphql@16.10.0)': + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.10.0) + '@whatwg-node/promise-helpers': 1.3.0 + cross-inspect: 1.0.1 + dset: 3.1.4 + graphql: 16.10.0 + tslib: 2.8.1 + + '@graphql-typed-document-node/core@3.2.0(graphql@16.10.0)': + dependencies: + graphql: 16.10.0 + + '@grpc/grpc-js@1.13.1': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.1 + protobufjs: 7.4.0 + yargs: 17.7.2 + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.2': {} + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.3.1 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@inquirer/checkbox@4.1.4(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.13) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/confirm@5.1.8(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/core@10.1.9(@types/node@22.13.13)': + dependencies: + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.13) + ansi-escapes: 4.3.2 + cli-width: 4.1.0 + mute-stream: 2.0.0 + signal-exit: 4.1.0 + wrap-ansi: 6.2.0 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/editor@4.2.9(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + external-editor: 3.1.0 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/expand@4.0.11(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/figures@1.0.11': {} + + '@inquirer/input@4.1.8(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/number@3.0.11(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/password@4.0.11(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + ansi-escapes: 4.3.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/prompts@7.4.0(@types/node@22.13.13)': + dependencies: + '@inquirer/checkbox': 4.1.4(@types/node@22.13.13) + '@inquirer/confirm': 5.1.8(@types/node@22.13.13) + '@inquirer/editor': 4.2.9(@types/node@22.13.13) + '@inquirer/expand': 4.0.11(@types/node@22.13.13) + '@inquirer/input': 4.1.8(@types/node@22.13.13) + '@inquirer/number': 3.0.11(@types/node@22.13.13) + '@inquirer/password': 4.0.11(@types/node@22.13.13) + '@inquirer/rawlist': 4.0.11(@types/node@22.13.13) + '@inquirer/search': 3.0.11(@types/node@22.13.13) + '@inquirer/select': 4.1.0(@types/node@22.13.13) + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/rawlist@4.0.11(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/search@3.0.11(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.13) + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/select@4.1.0(@types/node@22.13.13)': + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.5(@types/node@22.13.13) + ansi-escapes: 4.3.2 + yoctocolors-cjs: 2.1.2 + optionalDependencies: + '@types/node': 22.13.13 + + '@inquirer/type@3.0.5(@types/node@22.13.13)': + optionalDependencies: + '@types/node': 22.13.13 + + '@ioredis/commands@1.2.0': {} + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 + + '@jest/core@29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2))': + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0(supports-color@10.0.0) + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.9.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-resolve-dependencies: 29.7.0(supports-color@10.0.0) + jest-runner: 29.7.0(supports-color@10.0.0) + jest-runtime: 29.7.0(supports-color@10.0.0) + jest-snapshot: 29.7.0(supports-color@10.0.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + jest-watcher: 29.7.0 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.7.0': + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-mock: 29.7.0 + + '@jest/expect-utils@29.7.0': + dependencies: + jest-get-type: 29.6.3 + + '@jest/expect@29.7.0(supports-color@10.0.0)': + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.7.0': + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 22.13.13 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + '@jest/globals@29.7.0(supports-color@10.0.0)': + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.7.0(supports-color@10.0.0)': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 22.13.13 + chalk: 4.1.2 + collect-v8-coverage: 1.0.2 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 6.0.3(supports-color@10.0.0) + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1(supports-color@10.0.0) + istanbul-reports: 3.1.7 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.3': + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.7.0': + dependencies: + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + collect-v8-coverage: 1.0.2 + + '@jest/test-sequencer@29.7.0': + dependencies: + '@jest/test-result': 29.7.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + slash: 3.0.0 + + '@jest/transform@29.7.0(supports-color@10.0.0)': + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1(supports-color@10.0.0) + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + micromatch: 4.0.8 + pirates: 4.0.6 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.3': + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 22.13.13 + '@types/yargs': 17.0.33 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@js-sdsl/ordered-map@4.4.2': {} + + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@jsonjoy.com/json-pack@1.2.0(tslib@2.8.1)': + dependencies: + '@jsonjoy.com/base64': 1.1.2(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + hyperdyperid: 1.2.0 + thingies: 1.21.0(tslib@2.8.1) + tslib: 2.8.1 + + '@jsonjoy.com/util@1.5.0(tslib@2.8.1)': + dependencies: + tslib: 2.8.1 + + '@keyv/serialize@1.0.3': + dependencies: + buffer: 6.0.3 + + '@kwsites/file-exists@1.1.1(supports-color@10.0.0)': + dependencies: + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@leichtgewicht/ip-codec@2.0.5': {} + + '@lukeed/csprng@1.1.0': {} + + '@mongodb-js/saslprep@1.2.0': + dependencies: + sparse-bitfield: 3.0.3 + + '@mui/core-downloads-tracker@6.4.8': {} + + '@mui/material@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@mui/core-downloads-tracker': 6.4.8 + '@mui/system': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1) + '@mui/types': 7.2.24(@types/react@19.0.12) + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) + '@popperjs/core': 2.11.8 + '@types/react-transition-group': 4.4.12(@types/react@19.0.12) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + react-is: 19.0.0 + react-transition-group: 4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@types/react': 19.0.12 + + '@mui/private-theming@6.4.8(@types/react@19.0.12)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@types/react': 19.0.12 + + '@mui/styled-engine@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@emotion/cache': 11.14.0 + '@emotion/serialize': 1.3.3 + '@emotion/sheet': 1.4.0 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + + '@mui/system@6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@mui/private-theming': 6.4.8(@types/react@19.0.12)(react@18.3.1) + '@mui/styled-engine': 6.4.8(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@emotion/styled@11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(react@18.3.1) + '@mui/types': 7.2.24(@types/react@19.0.12) + '@mui/utils': 6.4.8(@types/react@19.0.12)(react@18.3.1) + clsx: 2.1.1 + csstype: 3.1.3 + prop-types: 15.8.1 + react: 18.3.1 + optionalDependencies: + '@emotion/react': 11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@emotion/styled': 11.14.0(@emotion/react@11.14.0(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0))(@types/react@19.0.12)(react@18.3.1)(supports-color@10.0.0) + '@types/react': 19.0.12 + + '@mui/types@7.2.24(@types/react@19.0.12)': + optionalDependencies: + '@types/react': 19.0.12 + + '@mui/utils@6.4.8(@types/react@19.0.12)(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@mui/types': 7.2.24(@types/react@19.0.12) + '@types/prop-types': 15.7.14 + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-is: 19.0.0 + optionalDependencies: + '@types/react': 19.0.12 + + '@napi-rs/wasm-runtime@0.2.7': + dependencies: + '@emnapi/core': 1.3.1 + '@emnapi/runtime': 1.3.1 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@nestjs/common@11.0.12(reflect-metadata@0.2.2)(rxjs@7.8.2)': + dependencies: + iterare: 1.2.1 + reflect-metadata: 0.2.2 + rxjs: 7.8.2 + tslib: 2.8.1 + uid: 2.0.2 + + '@next/env@15.2.4': {} + + '@next/swc-darwin-arm64@15.2.4': + optional: true + + '@next/swc-darwin-x64@15.2.4': + optional: true + + '@next/swc-linux-arm64-gnu@15.2.4': + optional: true + + '@next/swc-linux-arm64-musl@15.2.4': + optional: true + + '@next/swc-linux-x64-gnu@15.2.4': + optional: true + + '@next/swc-linux-x64-musl@15.2.4': + optional: true + + '@next/swc-win32-arm64-msvc@15.2.4': + optional: true + + '@next/swc-win32-x64-msvc@15.2.4': + optional: true + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.scandir@4.0.1': + dependencies: + '@nodelib/fs.stat': 4.0.0 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.stat@4.0.0': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.19.1 + + '@nodelib/fs.walk@3.0.1': + dependencies: + '@nodelib/fs.scandir': 4.0.1 + fastq: 1.19.1 + + '@npmcli/fs@4.0.0': + dependencies: + semver: 7.7.1 + + '@octokit/auth-token@5.1.2': {} + + '@octokit/core@6.1.4': + dependencies: + '@octokit/auth-token': 5.1.2 + '@octokit/graphql': 8.2.1 + '@octokit/request': 9.2.2 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.10.0 + before-after-hook: 3.0.2 + universal-user-agent: 7.0.2 + + '@octokit/endpoint@10.1.3': + dependencies: + '@octokit/types': 13.10.0 + universal-user-agent: 7.0.2 + + '@octokit/graphql@8.2.1': + dependencies: + '@octokit/request': 9.2.2 + '@octokit/types': 13.10.0 + universal-user-agent: 7.0.2 + + '@octokit/openapi-types@24.2.0': {} + + '@octokit/plugin-paginate-rest@11.6.0(@octokit/core@6.1.4)': + dependencies: + '@octokit/core': 6.1.4 + '@octokit/types': 13.10.0 + + '@octokit/plugin-request-log@5.3.1(@octokit/core@6.1.4)': + dependencies: + '@octokit/core': 6.1.4 + + '@octokit/plugin-rest-endpoint-methods@13.5.0(@octokit/core@6.1.4)': + dependencies: + '@octokit/core': 6.1.4 + '@octokit/types': 13.10.0 + + '@octokit/request-error@6.1.7': + dependencies: + '@octokit/types': 13.10.0 + + '@octokit/request@9.2.2': + dependencies: + '@octokit/endpoint': 10.1.3 + '@octokit/request-error': 6.1.7 + '@octokit/types': 13.10.0 + fast-content-type-parse: 2.0.1 + universal-user-agent: 7.0.2 + + '@octokit/rest@21.1.1': + dependencies: + '@octokit/core': 6.1.4 + '@octokit/plugin-paginate-rest': 11.6.0(@octokit/core@6.1.4) + '@octokit/plugin-request-log': 5.3.1(@octokit/core@6.1.4) + '@octokit/plugin-rest-endpoint-methods': 13.5.0(@octokit/core@6.1.4) + + '@octokit/types@13.10.0': + dependencies: + '@octokit/openapi-types': 24.2.0 + + '@opentelemetry/api-logs@0.200.0': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/core@2.0.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.30.0 + + '@opentelemetry/instrumentation@0.200.0(@opentelemetry/api@1.9.0)(supports-color@10.0.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.200.0 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.13.1 + require-in-the-middle: 7.5.2(supports-color@10.0.0) + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/semantic-conventions@1.30.0': {} + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.1 + 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 + optional: true + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@pkgr/core@0.2.0': {} + + '@pnpm/config.env-replace@1.1.0': {} + + '@pnpm/network.ca-file@1.0.2': + dependencies: + graceful-fs: 4.2.10 + + '@pnpm/npm-conf@2.3.1': + dependencies: + '@pnpm/config.env-replace': 1.1.0 + '@pnpm/network.ca-file': 1.0.2 + config-chain: 1.1.13 + + '@popperjs/core@2.11.8': {} + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@radix-ui/react-compose-refs@1.1.1(@types/react@19.0.12)(react@18.3.1)': + dependencies: + react: 18.3.1 + optionalDependencies: + '@types/react': 19.0.12 + + '@radix-ui/react-slot@1.1.2(@types/react@19.0.12)(react@18.3.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.1(@types/react@19.0.12)(react@18.3.1) + react: 18.3.1 + optionalDependencies: + '@types/react': 19.0.12 + + '@rollup/pluginutils@5.1.4(rollup@4.37.0)': + dependencies: + '@types/estree': 1.0.7 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.37.0 + + '@rollup/rollup-android-arm-eabi@4.37.0': + optional: true + + '@rollup/rollup-android-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.37.0': + optional: true + + '@rollup/rollup-darwin-x64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-arm64@4.37.0': + optional: true + + '@rollup/rollup-freebsd-x64@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.37.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.37.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.37.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.37.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.37.0': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@sec-ant/readable-stream@0.4.1': {} + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@sinclair/typebox@0.27.8': {} + + '@sinclair/typebox@0.34.31': {} + + '@sindresorhus/is@7.0.1': {} + + '@sindresorhus/merge-streams@2.3.0': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.3.0': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@smithy/abort-controller@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader-native@4.0.0': + dependencies: + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader@5.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/config-resolver@4.1.0': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + + '@smithy/core@3.2.0': + dependencies: + '@smithy/middleware-serde': 4.0.3 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/credential-provider-imds@4.0.2': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + tslib: 2.8.1 + + '@smithy/eventstream-codec@4.0.2': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.2': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.1.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.2': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.2': + dependencies: + '@smithy/eventstream-codec': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-blob-browser@4.0.2': + dependencies: + '@smithy/chunked-blob-reader': 5.0.0 + '@smithy/chunked-blob-reader-native': 4.0.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/hash-stream-node@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/md5-js@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/middleware-endpoint@4.1.0': + dependencies: + '@smithy/core': 3.2.0 + '@smithy/middleware-serde': 4.0.3 + '@smithy/node-config-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-middleware': 4.0.2 + tslib: 2.8.1 + + '@smithy/middleware-retry@4.1.0': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/service-error-classification': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.2 + tslib: 2.8.1 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.3': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/middleware-stack@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/node-config-provider@4.0.2': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/node-http-handler@4.0.4': + dependencies: + '@smithy/abort-controller': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/property-provider@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/protocol-http@5.1.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/querystring-builder@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + + '@smithy/shared-ini-file-loader@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/signature-v4@5.0.2': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.2.0': + dependencies: + '@smithy/core': 3.2.0 + '@smithy/middleware-endpoint': 4.1.0 + '@smithy/middleware-stack': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + + '@smithy/types@4.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/url-parser@4.0.2': + dependencies: + '@smithy/querystring-parser': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.8': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.8.1 + + '@smithy/util-defaults-mode-node@4.0.8': + dependencies: + '@smithy/config-resolver': 4.1.0 + '@smithy/credential-provider-imds': 4.0.2 + '@smithy/node-config-provider': 4.0.2 + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-endpoints@3.0.2': + dependencies: + '@smithy/node-config-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-retry@4.0.2': + dependencies: + '@smithy/service-error-classification': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/util-stream@4.2.0': + dependencies: + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-waiter@4.0.3': + dependencies: + '@smithy/abort-controller': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@socket.io/component-emitter@3.1.2': {} + + '@swc/core-darwin-arm64@1.11.13': + optional: true + + '@swc/core-darwin-x64@1.11.13': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.11.13': + optional: true + + '@swc/core-linux-arm64-gnu@1.11.13': + optional: true + + '@swc/core-linux-arm64-musl@1.11.13': + optional: true + + '@swc/core-linux-x64-gnu@1.11.13': + optional: true + + '@swc/core-linux-x64-musl@1.11.13': + optional: true + + '@swc/core-win32-arm64-msvc@1.11.13': + optional: true + + '@swc/core-win32-ia32-msvc@1.11.13': + optional: true + + '@swc/core-win32-x64-msvc@1.11.13': + optional: true + + '@swc/core@1.11.13(@swc/helpers@0.5.15)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.20 + optionalDependencies: + '@swc/core-darwin-arm64': 1.11.13 + '@swc/core-darwin-x64': 1.11.13 + '@swc/core-linux-arm-gnueabihf': 1.11.13 + '@swc/core-linux-arm64-gnu': 1.11.13 + '@swc/core-linux-arm64-musl': 1.11.13 + '@swc/core-linux-x64-gnu': 1.11.13 + '@swc/core-linux-x64-musl': 1.11.13 + '@swc/core-win32-arm64-msvc': 1.11.13 + '@swc/core-win32-ia32-msvc': 1.11.13 + '@swc/core-win32-x64-msvc': 1.11.13 + '@swc/helpers': 0.5.15 + + '@swc/counter@0.1.3': {} + + '@swc/helpers@0.5.15': + dependencies: + tslib: 2.8.1 + + '@swc/types@0.1.20': + dependencies: + '@swc/counter': 0.1.3 + + '@szmarczak/http-timer@5.0.1': + dependencies: + defer-to-connect: 2.0.1 + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.27.0 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.2 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/react@16.2.0(@testing-library/dom@10.4.0)(@types/react@19.0.12)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)': + dependencies: + '@babel/runtime': 7.27.0 + '@testing-library/dom': 10.4.0 + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + optionalDependencies: + '@types/react': 19.0.12 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@tokenizer/inflate@0.2.7(supports-color@10.0.0)': + dependencies: + debug: 4.4.0(supports-color@10.0.0) + fflate: 0.8.2 + token-types: 6.0.0 + transitivePeerDependencies: + - supports-color + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/once@2.0.0': {} + + '@trysound/sax@0.2.0': {} + + '@tsconfig/node10@1.0.11': {} + + '@tsconfig/node12@1.0.11': {} + + '@tsconfig/node14@1.0.3': {} + + '@tsconfig/node16@1.0.4': {} + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/aria-query@5.0.4': {} + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.27.0 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.27.0 + '@babel/types': 7.27.0 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.27.0 + + '@types/body-parser@1.19.5': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 22.13.13 + + '@types/bonjour@3.5.13': + dependencies: + '@types/node': 22.13.13 + + '@types/connect-history-api-fallback@1.5.4': + dependencies: + '@types/express-serve-static-core': 5.0.6 + '@types/node': 22.13.13 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 22.13.13 + + '@types/cookie@0.6.0': {} + + '@types/cors@2.8.17': + dependencies: + '@types/node': 22.13.13 + + '@types/eslint-scope@3.7.7': + dependencies: + '@types/eslint': 9.6.1 + '@types/estree': 1.0.7 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.6': {} + + '@types/estree@1.0.7': {} + + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 22.13.13 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express-serve-static-core@5.0.6': + dependencies: + '@types/node': 22.13.13 + '@types/qs': 6.9.18 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + + '@types/express@4.17.21': + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.18 + '@types/serve-static': 1.15.7 + + '@types/graceful-fs@4.1.9': + dependencies: + '@types/node': 22.13.13 + + '@types/html-minifier-terser@6.1.0': {} + + '@types/http-cache-semantics@4.0.4': {} + + '@types/http-errors@2.0.4': {} + + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 22.13.13 + + '@types/istanbul-lib-coverage@2.0.6': {} + + '@types/istanbul-lib-report@3.0.3': + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + + '@types/istanbul-reports@3.0.4': + dependencies: + '@types/istanbul-lib-report': 3.0.3 + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 22.13.13 + '@types/tough-cookie': 4.0.5 + parse5: 7.2.1 + + '@types/json-schema@7.0.15': {} + + '@types/json5@0.0.29': {} + + '@types/mime@1.3.5': {} + + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 22.13.13 + form-data: 4.0.2 + + '@types/node-forge@1.3.11': + dependencies: + '@types/node': 22.13.13 + + '@types/node@22.13.13': + dependencies: + undici-types: 6.20.0 + + '@types/normalize-package-data@2.4.4': {} + + '@types/parse-json@4.0.2': {} + + '@types/prop-types@15.7.14': {} + + '@types/qs@6.9.18': {} + + '@types/range-parser@1.2.7': {} + + '@types/react-transition-group@4.4.12(@types/react@19.0.12)': + dependencies: + '@types/react': 19.0.12 + + '@types/react@19.0.12': + dependencies: + csstype: 3.1.3 + + '@types/readable-stream@4.0.18': + dependencies: + '@types/node': 22.13.13 + safe-buffer: 5.1.2 + + '@types/retry@0.12.2': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 22.13.13 + + '@types/serve-index@1.9.4': + dependencies: + '@types/express': 4.17.21 + + '@types/serve-static@1.15.7': + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 22.13.13 + '@types/send': 0.17.4 + + '@types/shimmer@1.2.0': {} + + '@types/sockjs@0.3.36': + dependencies: + '@types/node': 22.13.13 + + '@types/stack-utils@2.0.3': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/triple-beam@1.3.5': {} + + '@types/trusted-types@2.0.7': + optional: true + + '@types/unist@3.0.3': {} + + '@types/use-sync-external-store@0.0.6': {} + + '@types/webidl-conversions@7.0.3': {} + + '@types/whatwg-url@11.0.5': + dependencies: + '@types/webidl-conversions': 7.0.3 + + '@types/ws@8.18.0': + dependencies: + '@types/node': 22.13.13 + + '@types/yargs-parser@21.0.3': {} + + '@types/yargs@17.0.33': + dependencies: + '@types/yargs-parser': 21.0.3 + + '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/type-utils': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.28.0 + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/typescript-estree': 8.28.0(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/visitor-keys': 8.28.0 + debug: 4.4.0(supports-color@10.0.0) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@8.28.0': + dependencies: + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 + + '@typescript-eslint/type-utils@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.28.0(supports-color@10.0.0)(typescript@5.8.2) + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + debug: 4.4.0(supports-color@10.0.0) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@8.28.0': {} + + '@typescript-eslint/typescript-estree@8.28.0(supports-color@10.0.0)(typescript@5.8.2)': + dependencies: + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/visitor-keys': 8.28.0 + debug: 4.4.0(supports-color@10.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.1 + ts-api-utils: 2.1.0(typescript@5.8.2) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2)': + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + '@typescript-eslint/scope-manager': 8.28.0 + '@typescript-eslint/types': 8.28.0 + '@typescript-eslint/typescript-estree': 8.28.0(supports-color@10.0.0)(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + typescript: 5.8.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@8.28.0': + dependencies: + '@typescript-eslint/types': 8.28.0 + eslint-visitor-keys: 4.2.0 + + '@unrs/rspack-resolver-binding-darwin-arm64@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-darwin-x64@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-freebsd-x64@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-linux-arm-gnueabihf@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-linux-arm64-gnu@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-linux-arm64-musl@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-linux-x64-gnu@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-linux-x64-musl@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-wasm32-wasi@1.2.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.7 + optional: true + + '@unrs/rspack-resolver-binding-win32-arm64-msvc@1.2.2': + optional: true + + '@unrs/rspack-resolver-binding-win32-x64-msvc@1.2.2': + optional: true + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.27.0 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.3 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.8.2) + + '@vue/shared@3.5.13': {} + + '@webassemblyjs/ast@1.14.1': + dependencies: + '@webassemblyjs/helper-numbers': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + + '@webassemblyjs/helper-api-error@1.13.2': {} + + '@webassemblyjs/helper-buffer@1.14.1': {} + + '@webassemblyjs/helper-numbers@1.13.2': + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.13.2 + '@webassemblyjs/helper-api-error': 1.13.2 + '@xtuc/long': 4.2.2 + + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + + '@webassemblyjs/helper-wasm-section@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/wasm-gen': 1.14.1 + + '@webassemblyjs/ieee754@1.13.2': + dependencies: + '@xtuc/ieee754': 1.2.0 + + '@webassemblyjs/leb128@1.13.2': + dependencies: + '@xtuc/long': 4.2.2 + + '@webassemblyjs/utf8@1.13.2': {} + + '@webassemblyjs/wasm-edit@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/helper-wasm-section': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-opt': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + '@webassemblyjs/wast-printer': 1.14.1 + + '@webassemblyjs/wasm-gen@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wasm-opt@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-buffer': 1.14.1 + '@webassemblyjs/wasm-gen': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + + '@webassemblyjs/wasm-parser@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/helper-api-error': 1.13.2 + '@webassemblyjs/helper-wasm-bytecode': 1.13.2 + '@webassemblyjs/ieee754': 1.13.2 + '@webassemblyjs/leb128': 1.13.2 + '@webassemblyjs/utf8': 1.13.2 + + '@webassemblyjs/wast-printer@1.14.1': + dependencies: + '@webassemblyjs/ast': 1.14.1 + '@xtuc/long': 4.2.2 + + '@webpack-cli/configtest@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': + dependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + + '@webpack-cli/info@3.0.1(webpack-cli@6.0.1)(webpack@5.98.0)': + dependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + + '@webpack-cli/serve@3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.98.0)': + dependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + optionalDependencies: + webpack-dev-server: 5.2.0(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) + + '@whatwg-node/promise-helpers@1.3.0': + dependencies: + tslib: 2.8.1 + + '@xtuc/ieee754@1.2.0': {} + + '@xtuc/long@4.2.2': {} + + JSONStream@1.3.5: + dependencies: + jsonparse: 1.3.1 + through: 2.3.8 + + abab@2.0.6: {} + + abbrev@3.0.0: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@1.3.8: + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 + + acorn-globals@7.0.1: + dependencies: + acorn: 8.14.1 + acorn-walk: 8.3.4 + + acorn-import-attributes@1.9.5(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn-jsx@5.3.2(acorn@8.14.1): + dependencies: + acorn: 8.14.1 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.1 + + acorn@8.14.1: {} + + adm-zip@0.5.16: {} + + agent-base@6.0.2(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + agent-base@7.1.3: {} + + ajv-formats@2.1.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-keywords@5.1.0(ajv@8.17.1): + dependencies: + ajv: 8.17.1 + fast-deep-equal: 3.1.3 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.6 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + ansi-align@3.0.1: + dependencies: + string-width: 4.2.3 + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 + + ansi-html-community@0.0.8: {} + + ansi-regex@2.1.1: {} + + ansi-regex@5.0.1: {} + + ansi-regex@6.1.0: {} + + ansi-styles@2.2.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + append-field@1.0.0: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + arg@4.1.3: {} + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-flatten@1.1.1: {} + + array-flatten@3.0.0: {} + + array-includes@3.1.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + + array-union@3.0.1: {} + + array.prototype.findlast@1.2.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arrify@3.0.0: {} + + asap@2.0.6: {} + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-plus@1.0.0: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.7 + util: 0.12.5 + + assertion-error@2.0.1: {} + + assign-symbols@1.0.0: {} + + ast-types-flow@0.0.8: {} + + ast-types@0.14.2: + dependencies: + tslib: 2.8.1 + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + astral-regex@2.0.0: {} + + async-function@1.0.0: {} + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + async@3.2.6: {} + + asynckit@0.4.0: {} + + atob@2.1.2: {} + + atomic-sleep@1.0.0: {} + + atomically@2.0.3: + dependencies: + stubborn-fs: 1.2.5 + when-exit: 2.1.4 + + autoprefixer@10.4.21(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001707 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + aws-sdk@2.1692.0: + dependencies: + buffer: 4.9.2 + events: 1.1.1 + ieee754: 1.1.13 + jmespath: 0.16.0 + querystring: 0.2.0 + sax: 1.2.1 + url: 0.10.3 + util: 0.12.5 + uuid: 8.0.0 + xml2js: 0.6.2 + + axe-core@4.10.3: {} + + axios@1.6.2(debug@4.4.0(supports-color@10.0.0)): + dependencies: + follow-redirects: 1.15.9(debug@4.4.0(supports-color@10.0.0)) + form-data: 4.0.2 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axobject-query@4.1.0: {} + + b4a@1.6.7: {} + + babel-code-frame@6.26.0: + dependencies: + chalk: 1.1.3 + esutils: 2.0.3 + js-tokens: 3.0.2 + + babel-core@6.26.3(supports-color@10.0.0): + dependencies: + babel-code-frame: 6.26.0 + babel-generator: 6.26.1 + babel-helpers: 6.24.1(supports-color@10.0.0) + babel-messages: 6.23.0 + babel-register: 6.26.0(supports-color@10.0.0) + babel-runtime: 6.26.0 + babel-template: 6.26.0(supports-color@10.0.0) + babel-traverse: 6.26.0(supports-color@10.0.0) + babel-types: 6.26.0 + babylon: 6.18.0 + convert-source-map: 1.9.0 + debug: 2.6.9(supports-color@10.0.0) + json5: 0.5.1 + lodash: 4.17.21 + minimatch: 3.1.2 + path-is-absolute: 1.0.1 + private: 0.1.8 + slash: 1.0.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + + babel-generator@6.26.1: + dependencies: + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + detect-indent: 4.0.0 + jsesc: 1.3.0 + lodash: 4.17.21 + source-map: 0.5.7 + trim-right: 1.0.1 + + babel-helpers@6.24.1(supports-color@10.0.0): + dependencies: + babel-runtime: 6.26.0 + babel-template: 6.26.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1(supports-color@10.0.0) + babel-preset-jest: 29.6.3(@babel/core@7.26.10(supports-color@10.0.0)) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-loader@10.0.0(@babel/core@7.26.10(supports-color@10.0.0))(webpack@5.98.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + find-up: 5.0.0 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + babel-messages@6.23.0: + dependencies: + babel-runtime: 6.26.0 + + babel-plugin-istanbul@6.1.1(supports-color@10.0.0): + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1(supports-color@10.0.0) + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@7.0.0(supports-color@10.0.0): + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 6.0.3(supports-color@10.0.0) + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.6.3: + dependencies: + '@babel/template': 7.27.0 + '@babel/types': 7.27.0 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 + + babel-plugin-macros@3.1.0: + dependencies: + '@babel/runtime': 7.27.0 + cosmiconfig: 7.1.0 + resolve: 1.22.10 + + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + core-js-compat: 3.41.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.10(supports-color@10.0.0)): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10(supports-color@10.0.0)) + + babel-preset-jest@29.6.3(@babel/core@7.26.10(supports-color@10.0.0)): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) + + babel-register@6.26.0(supports-color@10.0.0): + dependencies: + babel-core: 6.26.3(supports-color@10.0.0) + babel-runtime: 6.26.0 + core-js: 2.6.12 + home-or-tmp: 2.0.0 + lodash: 4.17.21 + mkdirp: 0.5.6 + source-map-support: 0.4.18 + transitivePeerDependencies: + - supports-color + + babel-runtime@6.26.0: + dependencies: + core-js: 2.6.12 + regenerator-runtime: 0.11.1 + + babel-template@6.26.0(supports-color@10.0.0): + dependencies: + babel-runtime: 6.26.0 + babel-traverse: 6.26.0(supports-color@10.0.0) + babel-types: 6.26.0 + babylon: 6.18.0 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + + babel-traverse@6.26.0(supports-color@10.0.0): + dependencies: + babel-code-frame: 6.26.0 + babel-messages: 6.23.0 + babel-runtime: 6.26.0 + babel-types: 6.26.0 + babylon: 6.18.0 + debug: 2.6.9(supports-color@10.0.0) + globals: 9.18.0 + invariant: 2.2.4 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + + babel-types@6.26.0: + dependencies: + babel-runtime: 6.26.0 + esutils: 2.0.3 + lodash: 4.17.21 + to-fast-properties: 1.0.3 + + babylon@6.18.0: {} + + bail@2.0.2: {} + + balanced-match@1.0.2: {} + + balanced-match@3.0.1: {} + + bare-events@2.5.4: + optional: true + + base64-js@1.5.1: {} + + base64id@2.0.0: {} + + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + batch@0.6.1: {} + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + before-after-hook@3.0.2: {} + + big.js@6.2.2: {} + + bignumber.js@9.1.2: {} + + binary-extensions@2.3.0: {} + + binary-extensions@3.0.0: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bl@6.1.0: + dependencies: + '@types/readable-stream': 4.0.18 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.7.0 + + bluebird@3.7.2: {} + + bn.js@4.12.1: {} + + bn.js@5.2.1: {} + + body-parser@1.20.3(supports-color@10.0.0): + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9(supports-color@10.0.0) + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.13.0 + raw-body: 2.5.2 + type-is: 1.6.18 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + bonjour-service@1.3.0: + dependencies: + fast-deep-equal: 3.1.3 + multicast-dns: 7.2.5 + + boolbase@1.0.0: {} + + bowser@2.11.0: {} + + boxen@8.0.1: + dependencies: + ansi-align: 3.0.1 + camelcase: 8.0.0 + chalk: 5.4.1 + cli-boxes: 3.0.0 + string-width: 7.2.0 + type-fest: 4.38.0 + widest-line: 5.0.0 + wrap-ansi: 9.0.0 + + brace-expansion@1.1.11: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + brace-expansion@4.0.0: + dependencies: + balanced-match: 3.0.1 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + browser-stdout@1.3.1: {} + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001707 + electron-to-chromium: 1.5.123 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.24.4) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + bson@6.10.3: {} + + buffer-crc32@1.0.0: {} + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer@4.9.2: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-modules@5.0.0: {} + + bundle-name@4.1.0: + dependencies: + run-applescript: 7.0.0 + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + bytes@3.1.2: {} + + cac@6.7.14: {} + + cacache@19.0.1: + dependencies: + '@npmcli/fs': 4.0.0 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 10.4.3 + minipass: 7.1.2 + minipass-collect: 2.0.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 7.0.3 + ssri: 12.0.0 + tar: 7.4.3 + unique-filename: 4.0.0 + + cache-content-type@1.0.1: + dependencies: + mime-types: 2.1.35 + ylru: 1.4.0 + + cacheable-lookup@7.0.0: {} + + cacheable-request@12.0.1: + dependencies: + '@types/http-cache-semantics': 4.0.4 + get-stream: 9.0.1 + http-cache-semantics: 4.1.1 + keyv: 4.5.4 + mimic-response: 4.0.0 + normalize-url: 8.0.1 + responselike: 3.0.0 + + cacheable@1.8.9: + dependencies: + hookified: 1.8.1 + keyv: 5.3.2 + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + callsites@3.1.0: {} + + callsites@4.2.0: {} + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelcase@8.0.0: {} + + caniuse-api@3.0.0: + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001707 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + + caniuse-lite@1.0.30001707: {} + + caseless@0.12.0: {} + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + chalk@1.1.3: + dependencies: + ansi-styles: 2.2.1 + escape-string-regexp: 1.0.5 + has-ansi: 2.0.0 + strip-ansi: 3.0.1 + supports-color: 2.0.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@5.4.1: {} + + change-case@5.4.4: {} + + char-regex@1.0.2: {} + + char-regex@2.0.2: {} + + chardet@0.7.0: {} + + chardet@2.1.0: {} + + charenc@0.0.2: {} + + check-error@2.1.1: {} + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.2 + whatwg-mimetype: 4.0.0 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@3.0.0: {} + + chrome-trace-event@1.0.4: {} + + ci-info@3.9.0: {} + + ci-info@4.2.0: {} + + cjs-module-lexer@1.4.3: {} + + cjs-module-lexer@2.1.0: {} + + classnames@2.5.1: {} + + clean-css@5.3.3: + dependencies: + source-map: 0.6.1 + + clean-stack@5.2.0: + dependencies: + escape-string-regexp: 5.0.0 + + cli-boxes@3.0.0: {} + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + + cli-spinners@3.2.0: {} + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-truncate@4.0.0: + dependencies: + slice-ansi: 5.0.0 + string-width: 7.2.0 + + cli-width@4.1.0: {} + + client-only@0.0.1: {} + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@9.0.1: + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + clone-deep@4.0.1: + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + + clone@1.0.4: {} + + clone@2.1.2: {} + + clsx@2.1.1: {} + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + collect-v8-coverage@1.0.2: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-convert@3.0.1: + dependencies: + color-name: 2.0.0 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-name@2.0.0: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color-string@2.0.1: + dependencies: + color-name: 2.0.0 + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + color@5.0.0: + dependencies: + color-convert: 3.0.1 + color-string: 2.0.1 + + colord@2.9.3: {} + + colorette@2.0.20: {} + + colors@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@12.1.0: {} + + commander@13.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@7.2.0: {} + + commander@8.3.0: {} + + common-path-prefix@3.0.0: {} + + commondir@1.0.1: {} + + component-emitter@1.3.1: {} + + component-emitter@2.0.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.0(supports-color@10.0.0): + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9(supports-color@10.0.0) + negotiator: 0.6.4 + on-headers: 1.0.2 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + concat-map@0.0.2: {} + + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + configstore@7.0.0: + dependencies: + atomically: 2.0.3 + dot-prop: 9.0.0 + graceful-fs: 4.2.11 + xdg-basedir: 5.1.0 + + connect-history-api-fallback@2.0.0: {} + + connect@3.7.0(supports-color@10.0.0): + dependencies: + debug: 2.6.9(supports-color@10.0.0) + finalhandler: 1.1.2(supports-color@10.0.0) + parseurl: 1.3.3 + utils-merge: 1.0.1 + transitivePeerDependencies: + - supports-color + + consola@3.4.2: {} + + content-disposition@0.5.4: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + cookie-parser@1.4.7: + dependencies: + cookie: 0.7.2 + cookie-signature: 1.0.6 + + cookie-signature@1.0.6: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.1: {} + + cookie@0.7.2: {} + + cookie@1.0.2: {} + + cookiejar@2.1.4: {} + + cookies@0.9.1: + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + + copy-anything@2.0.6: + dependencies: + is-what: 3.14.1 + + core-js-compat@3.41.0: + dependencies: + browserslist: 4.24.4 + + core-js@2.6.12: {} + + core-js@3.41.0: {} + + core-util-is@1.0.2: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@7.1.0: + dependencies: + '@types/parse-json': 4.0.2 + import-fresh: 3.3.1 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + + cosmiconfig@9.0.0(typescript@5.8.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.1 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.8.2 + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + + create-jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + create-require@1.1.1: {} + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + + cross-fetch@4.1.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-inspect@1.0.1: + dependencies: + tslib: 2.8.1 + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 5.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + crypto-js@4.2.0: {} + + crypto-random-string@4.0.0: + dependencies: + type-fest: 1.4.0 + + css-declaration-sorter@7.2.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + css-loader@7.1.2(webpack@5.98.0): + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.33) + postcss-modules-local-by-default: 4.2.0(postcss@8.4.33) + postcss-modules-scope: 3.2.1(postcss@8.4.33) + postcss-modules-values: 4.0.0(postcss@8.4.33) + postcss-value-parser: 4.2.0 + semver: 7.7.1 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + cssnano-preset-default@7.0.6(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + css-declaration-sorter: 7.2.0(postcss@8.4.33) + cssnano-utils: 5.0.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-calc: 10.1.1(postcss@8.4.33) + postcss-colormin: 7.0.2(postcss@8.4.33) + postcss-convert-values: 7.0.4(postcss@8.4.33) + postcss-discard-comments: 7.0.3(postcss@8.4.33) + postcss-discard-duplicates: 7.0.1(postcss@8.4.33) + postcss-discard-empty: 7.0.0(postcss@8.4.33) + postcss-discard-overridden: 7.0.0(postcss@8.4.33) + postcss-merge-longhand: 7.0.4(postcss@8.4.33) + postcss-merge-rules: 7.0.4(postcss@8.4.33) + postcss-minify-font-values: 7.0.0(postcss@8.4.33) + postcss-minify-gradients: 7.0.0(postcss@8.4.33) + postcss-minify-params: 7.0.2(postcss@8.4.33) + postcss-minify-selectors: 7.0.4(postcss@8.4.33) + postcss-normalize-charset: 7.0.0(postcss@8.4.33) + postcss-normalize-display-values: 7.0.0(postcss@8.4.33) + postcss-normalize-positions: 7.0.0(postcss@8.4.33) + postcss-normalize-repeat-style: 7.0.0(postcss@8.4.33) + postcss-normalize-string: 7.0.0(postcss@8.4.33) + postcss-normalize-timing-functions: 7.0.0(postcss@8.4.33) + postcss-normalize-unicode: 7.0.2(postcss@8.4.33) + postcss-normalize-url: 7.0.0(postcss@8.4.33) + postcss-normalize-whitespace: 7.0.0(postcss@8.4.33) + postcss-ordered-values: 7.0.1(postcss@8.4.33) + postcss-reduce-initial: 7.0.2(postcss@8.4.33) + postcss-reduce-transforms: 7.0.0(postcss@8.4.33) + postcss-svgo: 7.0.1(postcss@8.4.33) + postcss-unique-selectors: 7.0.3(postcss@8.4.33) + + cssnano-utils@5.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + cssnano@7.0.6(postcss@8.4.33): + dependencies: + cssnano-preset-default: 7.0.6(postcss@8.4.33) + lilconfig: 3.1.3 + postcss: 8.4.33 + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + cssstyle@4.3.0: + dependencies: + '@asamuzakjp/css-color': 3.1.1 + rrweb-cssom: 0.8.0 + + csstype@3.1.3: {} + + d3-array@3.2.4: + dependencies: + internmap: 2.0.3 + + d3-color@3.1.0: {} + + d3-format@3.1.0: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-scale@4.0.2: + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + + d3-time-format@4.1.0: + dependencies: + d3-time: 3.1.0 + + d3-time@3.1.0: + dependencies: + d3-array: 3.2.4 + + damerau-levenshtein@1.0.8: {} + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + data-uri-to-buffer@4.0.1: {} + + data-uri-to-buffer@6.0.2: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + date-fns@4.1.0: {} + + date-format@4.0.14: {} + + dateformat@5.0.3: {} + + dayjs@1.11.13: {} + + debug@2.6.9(supports-color@10.0.0): + dependencies: + ms: 2.0.0 + optionalDependencies: + supports-color: 10.0.0 + + debug@3.2.7(supports-color@10.0.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.0.0 + + debug@4.3.7(supports-color@10.0.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.0.0 + + debug@4.4.0(supports-color@10.0.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 10.0.0 + + debug@4.4.0(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + debug@4.4.0(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@4.0.0: {} + + decamelize@6.0.0: {} + + decimal.js@10.4.3: {} + + decode-uri-component@0.4.1: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + decompress-response@9.0.0: + dependencies: + mimic-response: 4.0.0 + + dedent@1.5.3(babel-plugin-macros@3.1.0): + optionalDependencies: + babel-plugin-macros: 3.1.0 + + deep-eql@5.0.2: {} + + deep-equal@1.0.1: {} + + deep-equal@2.2.3: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + es-get-iterator: 1.1.3 + get-intrinsic: 1.3.0 + is-arguments: 1.2.0 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.1.0 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + defaults@3.0.0: {} + + defer-to-connect@2.0.1: {} + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@3.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + delayed-stream@1.0.0: {} + + delegates@1.0.0: {} + + denque@2.1.0: {} + + depd@1.1.2: {} + + depd@2.0.0: {} + + dequal@2.0.3: {} + + destroy@1.2.0: {} + + detect-europe-js@0.1.2: {} + + detect-indent@4.0.0: + dependencies: + repeating: 2.0.1 + + detect-indent@7.0.1: {} + + detect-libc@1.0.3: + optional: true + + detect-libc@2.0.3: {} + + detect-newline@3.1.0: {} + + detect-newline@4.0.1: {} + + detect-node@2.1.0: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + diff-sequences@29.6.3: {} + + diff@4.0.2: {} + + diff@5.2.0: {} + + diff@7.0.0: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dns-packet@5.6.1: + dependencies: + '@leichtgewicht/ip-codec': 2.0.5 + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.6.3: {} + + dom-accessibility-api@0.7.0: {} + + dom-converter@0.2.0: + dependencies: + utila: 0.4.0 + + dom-helpers@5.2.1: + dependencies: + '@babel/runtime': 7.27.0 + csstype: 3.1.3 + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + dompurify@3.2.4: + optionalDependencies: + '@types/trusted-types': 2.0.7 + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dot-prop@9.0.0: + dependencies: + type-fest: 4.38.0 + + dotenv-expand@12.0.1: + dependencies: + dotenv: 16.4.7 + + dotenv@16.4.7: {} + + dset@3.1.4: {} + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.2: {} + + eastasianwidth@0.2.0: {} + + eastasianwidth@0.3.0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + ee-first@1.1.1: {} + + ejs@3.1.10: + dependencies: + jake: 10.9.2 + + electron-to-chromium@1.5.123: {} + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + emittery@0.13.1: {} + + emittery@1.1.0: {} + + emoji-regex@10.4.0: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + + encodeurl@1.0.2: {} + + encodeurl@2.0.0: {} + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + engine.io-client@6.6.3(supports-color@10.0.0): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@10.0.0) + engine.io-parser: 5.2.3 + ws: 8.17.1 + xmlhttprequest-ssl: 2.1.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + engine.io-parser@5.2.3: {} + + engine.io@6.6.4(supports-color@10.0.0): + dependencies: + '@types/cors': 2.8.17 + '@types/node': 22.13.13 + accepts: 1.3.8 + base64id: 2.0.0 + cookie: 0.7.2 + cors: 2.8.5 + debug: 4.3.7(supports-color@10.0.0) + engine.io-parser: 5.2.3 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + enhanced-resolve@5.18.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + + entities@2.2.0: {} + + entities@4.5.0: {} + + entities@6.0.0: {} + + env-paths@2.2.1: {} + + env-paths@3.0.0: {} + + envinfo@7.14.0: {} + + environment@1.1.0: {} + + err-code@2.0.3: {} + + errno@0.1.8: + dependencies: + prr: 1.0.1 + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + error-stack-parser@2.1.4: + dependencies: + stackframe: 1.3.4 + + es-abstract@1.23.9: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + is-arguments: 1.2.0 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.1.1 + isarray: 2.0.5 + stop-iteration-iterator: 1.1.0 + + es-iterator-helpers@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-set-tostringtag: 2.1.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + iterator.prototype: 1.1.5 + safe-array-concat: 1.1.3 + + es-module-lexer@1.6.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es6-promise@4.2.8: {} + + esbuild@0.25.1: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.1 + '@esbuild/android-arm': 0.25.1 + '@esbuild/android-arm64': 0.25.1 + '@esbuild/android-x64': 0.25.1 + '@esbuild/darwin-arm64': 0.25.1 + '@esbuild/darwin-x64': 0.25.1 + '@esbuild/freebsd-arm64': 0.25.1 + '@esbuild/freebsd-x64': 0.25.1 + '@esbuild/linux-arm': 0.25.1 + '@esbuild/linux-arm64': 0.25.1 + '@esbuild/linux-ia32': 0.25.1 + '@esbuild/linux-loong64': 0.25.1 + '@esbuild/linux-mips64el': 0.25.1 + '@esbuild/linux-ppc64': 0.25.1 + '@esbuild/linux-riscv64': 0.25.1 + '@esbuild/linux-s390x': 0.25.1 + '@esbuild/linux-x64': 0.25.1 + '@esbuild/netbsd-arm64': 0.25.1 + '@esbuild/netbsd-x64': 0.25.1 + '@esbuild/openbsd-arm64': 0.25.1 + '@esbuild/openbsd-x64': 0.25.1 + '@esbuild/sunos-x64': 0.25.1 + '@esbuild/win32-arm64': 0.25.1 + '@esbuild/win32-ia32': 0.25.1 + '@esbuild/win32-x64': 0.25.1 + + escalade@3.2.0: {} + + escape-goat@4.0.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escape-string-regexp@5.0.0: {} + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)): + dependencies: + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + + eslint-import-resolver-node@0.3.9(supports-color@10.0.0): + dependencies: + debug: 3.2.7(supports-color@10.0.0) + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@4.2.3(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + get-tsconfig: 4.10.0 + is-bun-module: 2.0.0 + rspack-resolver: 1.2.2 + stable-hash: 0.0.5 + tinyglobby: 0.2.12 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.2.3)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9(supports-color@10.0.0))(eslint-import-resolver-typescript@4.2.3)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + debug: 3.2.7(supports-color@10.0.0) + optionalDependencies: + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + eslint-import-resolver-node: 0.3.9(supports-color@10.0.0) + eslint-import-resolver-typescript: 4.2.3(eslint-plugin-import@2.31.0)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-typescript@4.2.3)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7(supports-color@10.0.0) + doctrine: 2.1.0 + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + eslint-import-resolver-node: 0.3.9(supports-color@10.0.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9(supports-color@10.0.0))(eslint-import-resolver-typescript@4.2.3)(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(supports-color@10.0.0)(typescript@5.8.2): + dependencies: + '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(supports-color@10.0.0)(typescript@5.8.2) + jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + transitivePeerDependencies: + - supports-color + - typescript + + eslint-plugin-jsx-a11y@6.10.2(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)): + dependencies: + aria-query: 5.3.2 + array-includes: 3.1.8 + array.prototype.flatmap: 1.3.3 + ast-types-flow: 0.0.8 + axe-core: 4.10.3 + axobject-query: 4.1.0 + damerau-levenshtein: 1.0.8 + emoji-regex: 9.2.2 + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + language-tags: 1.0.9 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + safe-regex-test: 1.1.0 + string.prototype.includes: 2.0.1 + + eslint-plugin-prettier@5.2.5(@types/eslint@9.6.1)(eslint-config-prettier@10.1.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)))(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0))(prettier@3.5.3): + dependencies: + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + prettier: 3.5.3 + prettier-linter-helpers: 1.0.0 + synckit: 0.10.3 + optionalDependencies: + '@types/eslint': 9.6.1 + eslint-config-prettier: 10.1.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + + eslint-plugin-promise@7.2.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + + eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)): + dependencies: + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + + eslint-plugin-react@7.37.4(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)): + dependencies: + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 + array.prototype.flatmap: 1.3.3 + array.prototype.tosorted: 1.1.4 + doctrine: 2.1.0 + es-iterator-helpers: 1.2.1 + eslint: 9.23.0(jiti@2.4.2)(supports-color@10.0.0) + estraverse: 5.3.0 + hasown: 2.0.2 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.9 + object.fromentries: 2.0.8 + object.values: 1.2.1 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.12 + string.prototype.repeat: 1.0.0 + + eslint-scope@5.1.1: + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + + eslint-scope@8.3.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.0: {} + + eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0): + dependencies: + '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)(supports-color@10.0.0)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.2(supports-color@10.0.0) + '@eslint/config-helpers': 0.2.0 + '@eslint/core': 0.12.0 + '@eslint/eslintrc': 3.3.1(supports-color@10.0.0) + '@eslint/js': 9.23.0 + '@eslint/plugin-kit': 0.2.7 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.2 + '@types/estree': 1.0.7 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.0(supports-color@10.0.0) + escape-string-regexp: 4.0.0 + eslint-scope: 8.3.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.3.2 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 + transitivePeerDependencies: + - supports-color + + espree@10.3.0: + dependencies: + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) + eslint-visitor-keys: 4.2.0 + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.7 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-target-shim@5.0.1: {} + + event-target-shim@6.0.2: {} + + eventemitter2@6.4.9: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + events@1.1.1: {} + + events@3.3.0: {} + + execa@1.0.0: + dependencies: + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@8.0.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + + execa@9.5.2: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.0 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + exit@0.1.2: {} + + expect@29.7.0: + dependencies: + '@jest/expect-utils': 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + + express@4.21.2(supports-color@10.0.0): + dependencies: + accepts: 1.3.8 + array-flatten: 1.1.1 + body-parser: 1.20.3(supports-color@10.0.0) + content-disposition: 0.5.4 + content-type: 1.0.5 + cookie: 0.7.1 + cookie-signature: 1.0.6 + debug: 2.6.9(supports-color@10.0.0) + depd: 2.0.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 1.3.1(supports-color@10.0.0) + fresh: 0.5.2 + http-errors: 2.0.0 + merge-descriptors: 1.0.3 + methods: 1.1.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + path-to-regexp: 0.1.12 + proxy-addr: 2.0.7 + qs: 6.13.0 + range-parser: 1.2.1 + safe-buffer: 5.2.1 + send: 0.19.0(supports-color@10.0.0) + serve-static: 1.16.2(supports-color@10.0.0) + setprototypeof: 1.2.0 + statuses: 2.0.1 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + extend-shallow@3.0.2: + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.0.33 + + extsprintf@1.3.0: {} + + extsprintf@1.4.1: {} + + fast-content-type-parse@2.0.1: {} + + fast-deep-equal@3.1.3: {} + + fast-diff@1.3.0: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-levenshtein@3.0.0: + dependencies: + fastest-levenshtein: 1.0.16 + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-uri@3.0.6: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.1.2 + + fast-xml-parser@5.0.9: + dependencies: + strnum: 2.0.5 + + fastest-levenshtein@1.0.16: {} + + fastq@1.19.1: + dependencies: + reusify: 1.1.0 + + faye-websocket@0.11.4: + dependencies: + websocket-driver: 0.7.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fdir@6.4.3(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fecha@4.2.3: {} + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.3.3 + + fflate@0.8.2: {} + + figlet@1.8.0: {} + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@10.0.7: + dependencies: + flat-cache: 6.1.7 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-type@20.4.1(supports-color@10.0.0): + dependencies: + '@tokenizer/inflate': 0.2.7(supports-color@10.0.0) + strtok3: 10.2.2 + token-types: 6.0.0 + uint8array-extras: 1.4.0 + transitivePeerDependencies: + - supports-color + + file-uri-to-path@1.0.0: {} + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + filesize@10.1.6: {} + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + filter-obj@5.1.0: {} + + finalhandler@1.1.2(supports-color@10.0.0): + dependencies: + debug: 2.6.9(supports-color@10.0.0) + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + finalhandler@1.3.1(supports-color@10.0.0): + dependencies: + debug: 2.6.9(supports-color@10.0.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + unpipe: 1.0.0 + transitivePeerDependencies: + - supports-color + + finalhandler@2.1.0(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + find-cache-dir@5.0.0: + dependencies: + common-path-prefix: 3.0.0 + pkg-dir: 7.0.0 + + find-root@1.1.0: {} + + find-up-simple@1.0.1: {} + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + find-up@6.3.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + + find-up@7.0.0: + dependencies: + locate-path: 7.2.0 + path-exists: 5.0.0 + unicorn-magic: 0.1.0 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat-cache@6.1.7: + dependencies: + cacheable: 1.8.9 + flatted: 3.3.3 + hookified: 1.8.1 + + flat@5.0.2: {} + + flat@6.0.1: {} + + flatted@3.3.3: {} + + fn.name@1.1.0: {} + + follow-redirects@1.15.9(debug@4.4.0(supports-color@10.0.0)): + optionalDependencies: + debug: 4.4.0(supports-color@10.0.0) + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + for-in@1.0.2: {} + + foreground-child@3.3.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + form-data-encoder@4.0.2: {} + + form-data@4.0.2: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + mime-types: 2.1.35 + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + formidable@3.5.2: + dependencies: + dezalgo: 1.0.4 + hexoid: 2.0.0 + once: 1.4.0 + + forwarded@0.2.0: {} + + fraction.js@4.3.7: {} + + fraction.js@5.2.1: {} + + framer-motion@12.6.0(@emotion/is-prop-valid@1.3.1)(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + dependencies: + motion-dom: 12.6.0 + motion-utils: 12.5.0 + tslib: 2.8.1 + optionalDependencies: + '@emotion/is-prop-valid': 1.3.1 + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + + fresh@0.5.2: {} + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + + fs-extra@8.1.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 4.0.0 + universalify: 0.1.2 + + fs-minipass@3.0.3: + dependencies: + minipass: 7.1.2 + + fs.realpath@1.0.0: {} + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gaxios@6.7.1(encoding@0.1.13)(supports-color@10.0.0): + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6(supports-color@10.0.0) + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@6.1.1(encoding@0.1.13)(supports-color@10.0.0): + dependencies: + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) + google-logging-utils: 0.0.2 + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + gensync@1.0.0-beta.2: {} + + get-caller-file@2.0.5: {} + + get-east-asian-width@1.3.0: {} + + get-intrinsic@1.3.0: + 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 + + get-package-type@0.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stdin@9.0.0: {} + + get-stream@4.1.0: + dependencies: + pump: 3.0.2 + + get-stream@6.0.1: {} + + get-stream@8.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-tsconfig@4.10.0: + dependencies: + resolve-pkg-maps: 1.0.0 + + get-value@4.0.1: {} + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob-to-regexp@0.4.1: {} + + glob@10.4.5: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + + glob@11.0.1: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.0 + minimatch: 10.0.1 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + global-directory@4.0.1: + dependencies: + ini: 4.1.1 + + global-prefix@4.0.0: + dependencies: + ini: 4.1.3 + kind-of: 6.0.3 + which: 4.0.0 + + globals@11.12.0: {} + + globals@14.0.0: {} + + globals@16.0.0: {} + + globals@9.18.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.3 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + + google-auth-library@9.15.1(encoding@0.1.13)(supports-color@10.0.0): + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) + gcp-metadata: 6.1.1(encoding@0.1.13)(supports-color@10.0.0) + gtoken: 7.1.0(encoding@0.1.13)(supports-color@10.0.0) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + google-logging-utils@0.0.2: {} + + gopd@1.2.0: {} + + got@14.4.6: + dependencies: + '@sindresorhus/is': 7.0.1 + '@szmarczak/http-timer': 5.0.1 + cacheable-lookup: 7.0.0 + cacheable-request: 12.0.1 + decompress-response: 6.0.0 + form-data-encoder: 4.0.2 + http2-wrapper: 2.2.1 + lowercase-keys: 3.0.0 + p-cancelable: 4.0.1 + responselike: 3.0.0 + type-fest: 4.38.0 + + graceful-fs@4.2.10: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphql@16.10.0: {} + + gtoken@7.1.0(encoding@0.1.13)(supports-color@10.0.0): + dependencies: + gaxios: 6.7.1(encoding@0.1.13)(supports-color@10.0.0) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + handle-thing@2.0.1: {} + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.19.3 + + has-ansi@2.0.0: + dependencies: + ansi-regex: 2.1.1 + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-flag@5.0.1: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + hexoid@2.0.0: {} + + highlight.js@11.11.1: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + hoist-non-react-statics@3.3.2: + dependencies: + react-is: 16.13.1 + + home-or-tmp@2.0.0: + dependencies: + os-homedir: 1.0.2 + os-tmpdir: 1.0.2 + + hookified@1.8.1: {} + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + + hosted-git-info@8.0.2: + dependencies: + lru-cache: 10.4.3 + + hpack.js@2.1.6: + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.8 + wbuf: 1.7.3 + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-entities@2.5.3: {} + + html-escaper@2.0.2: {} + + html-escaper@3.0.3: {} + + html-minifier-terser@6.1.0: + dependencies: + camel-case: 4.1.2 + clean-css: 5.3.3 + commander: 8.3.0 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 5.39.0 + + html-webpack-plugin@5.6.3(webpack@5.98.0): + dependencies: + '@types/html-minifier-terser': 6.1.0 + html-minifier-terser: 6.1.0 + lodash: 4.17.21 + pretty-error: 4.0.0 + tapable: 2.2.1 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.0 + + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + + http-assert@1.5.0: + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + + http-cache-semantics@4.1.1: {} + + http-deceiver@1.2.7: {} + + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + + http-errors@1.8.1: + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 1.5.0 + toidentifier: 1.0.1 + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-parser-js@0.5.9: {} + + http-proxy-agent@5.0.0(supports-color@10.0.0): + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2(supports-color@10.0.0) + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2(supports-color@10.0.0): + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + http-proxy-middleware@2.0.7(@types/express@4.17.21)(debug@4.4.0(supports-color@10.0.0)): + dependencies: + '@types/http-proxy': 1.17.16 + http-proxy: 1.18.1(debug@4.4.0(supports-color@10.0.0)) + is-glob: 4.0.3 + is-plain-obj: 3.0.0 + micromatch: 4.0.8 + optionalDependencies: + '@types/express': 4.17.21 + transitivePeerDependencies: + - debug + + http-proxy-middleware@3.0.3(supports-color@10.0.0): + dependencies: + '@types/http-proxy': 1.17.16 + debug: 4.4.0(supports-color@10.0.0) + http-proxy: 1.18.1(debug@4.4.0(supports-color@10.0.0)) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.0(supports-color@10.0.0)): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.9(debug@4.4.0(supports-color@10.0.0)) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-signature@1.4.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.18.0 + + http2-wrapper@2.2.1: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + + https-proxy-agent@5.0.1(supports-color@10.0.0): + dependencies: + agent-base: 6.0.2(supports-color@10.0.0) + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6(supports-color@10.0.0): + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + human-signals@2.1.0: {} + + human-signals@5.0.0: {} + + human-signals@8.0.0: {} + + husky@9.1.7: {} + + hyperdyperid@1.2.0: {} + + i18next@24.2.3(typescript@5.8.2): + dependencies: + '@babel/runtime': 7.27.0 + optionalDependencies: + typescript: 5.8.2 + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + icss-utils@5.1.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + ieee754@1.1.13: {} + + ieee754@1.2.1: {} + + ignore-by-default@1.0.1: {} + + ignore@5.3.2: {} + + ignore@7.0.3: {} + + image-size@0.5.5: + optional: true + + image-size@2.0.1: {} + + immediate@3.0.6: {} + + immer@10.1.1: {} + + immutable@5.0.3: {} + + import-fresh@3.3.1: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-in-the-middle@1.13.1: + dependencies: + acorn: 8.14.1 + acorn-import-attributes: 1.9.5(acorn@8.14.1) + cjs-module-lexer: 1.4.3 + module-details-from-path: 1.0.3 + + import-local@3.2.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indent-string@4.0.0: {} + + indent-string@5.0.0: {} + + index-to-position@1.0.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.3: {} + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@4.1.1: {} + + ini@4.1.3: {} + + ini@5.0.0: {} + + inquirer@12.5.0(@types/node@22.13.13): + dependencies: + '@inquirer/core': 10.1.9(@types/node@22.13.13) + '@inquirer/prompts': 7.4.0(@types/node@22.13.13) + '@inquirer/type': 3.0.5(@types/node@22.13.13) + ansi-escapes: 4.3.2 + mute-stream: 2.0.0 + run-async: 3.0.0 + rxjs: 7.8.2 + optionalDependencies: + '@types/node': 22.13.13 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + internmap@2.0.3: {} + + interpret@1.4.0: {} + + interpret@3.1.1: {} + + invariant@2.2.4: + dependencies: + loose-envify: 1.4.0 + + ioredis@5.6.0(supports-color@10.0.0): + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.4.0(supports-color@10.0.0) + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + + ip-address@10.0.1: {} + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + + ipaddr.js@1.9.1: {} + + ipaddr.js@2.2.0: {} + + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-binary-path@3.0.0: + dependencies: + binary-extensions: 3.0.0 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.1 + + is-callable@1.2.7: {} + + is-ci@4.1.0: + dependencies: + ci-info: 4.2.0 + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-docker@3.0.0: {} + + is-extendable@1.0.1: + dependencies: + is-plain-object: 2.0.4 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-finite@1.1.0: {} + + is-fullwidth-code-point@3.0.0: {} + + is-fullwidth-code-point@4.0.0: {} + + is-fullwidth-code-point@5.0.0: + dependencies: + get-east-asian-width: 1.3.0 + + is-generator-fn@2.1.0: {} + + is-generator-fn@3.0.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-in-ci@1.0.0: {} + + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + + is-installed-globally@1.0.0: + dependencies: + global-directory: 4.0.1 + is-path-inside: 4.0.0 + + is-interactive@2.0.0: {} + + is-map@2.0.3: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + is-negative-zero@2.0.3: {} + + is-network-error@1.1.0: {} + + is-npm@6.0.0: {} + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-path-inside@4.0.0: {} + + is-plain-obj@2.1.0: {} + + is-plain-obj@3.0.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@2.0.4: + dependencies: + isobject: 3.0.1 + + is-plain-object@5.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-primitive@3.0.1: {} + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-standalone-pwa@0.1.1: {} + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-stream@3.0.0: {} + + is-stream@4.0.1: {} + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-what@3.14.1: {} + + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isexe@2.0.0: {} + + isexe@3.1.1: {} + + isobject@3.0.1: {} + + isobject@4.0.0: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/parser': 7.27.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-instrument@6.0.3(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/parser': 7.27.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-source-maps@5.0.6(supports-color@10.0.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + debug: 4.4.0(supports-color@10.0.0) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + iterare@1.2.1: {} + + iterator.prototype@1.1.5: + dependencies: + define-data-property: 1.1.4 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + has-symbols: 1.1.0 + set-function-name: 2.0.2 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + + jake@10.9.2: + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.7.0: + dependencies: + execa: 5.1.1 + jest-util: 29.7.0 + p-limit: 3.1.0 + + jest-circus@29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0): + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0(supports-color@10.0.0) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.5.3(babel-plugin-macros@3.1.0) + is-generator-fn: 2.1.0 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0(supports-color@10.0.0) + jest-snapshot: 29.7.0(supports-color@10.0.0) + jest-util: 29.7.0 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.1.0 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + exit: 0.1.2 + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + chalk: 4.1.2 + ci-info: 3.9.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0) + jest-environment-node: 29.7.0 + jest-get-type: 29.6.3 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-runner: 29.7.0(supports-color@10.0.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 22.13.13 + ts-node: 10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.7.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-docblock@29.7.0: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.7.0: + dependencies: + '@jest/types': 29.6.3 + chalk: 4.1.2 + jest-get-type: 29.6.3 + jest-util: 29.7.0 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.7.0(supports-color@10.0.0): + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/jsdom': 20.0.1 + '@types/node': 22.13.13 + jest-mock: 29.7.0 + jest-util: 29.7.0 + jsdom: 20.0.3(supports-color@10.0.0) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.7.0: + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-mock: 29.7.0 + jest-util: 29.7.0 + + jest-get-type@29.6.3: {} + + jest-haste-map@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/graceful-fs': 4.1.9 + '@types/node': 22.13.13 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-leak-detector@29.7.0: + dependencies: + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.7.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 + + jest-message-util@29.7.0: + dependencies: + '@babel/code-frame': 7.26.2 + '@jest/types': 29.6.3 + '@types/stack-utils': 2.0.3 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + jest-util: 29.7.0 + + jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + optionalDependencies: + jest-resolve: 29.7.0 + + jest-regex-util@29.6.3: {} + + jest-resolve-dependencies@29.7.0(supports-color@10.0.0): + dependencies: + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + jest-resolve@29.7.0: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) + jest-util: 29.7.0 + jest-validate: 29.7.0 + resolve: 1.22.10 + resolve.exports: 2.0.3 + slash: 3.0.0 + + jest-runner@29.7.0(supports-color@10.0.0): + dependencies: + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.7.0 + jest-environment-node: 29.7.0 + jest-haste-map: 29.7.0 + jest-leak-detector: 29.7.0 + jest-message-util: 29.7.0 + jest-resolve: 29.7.0 + jest-runtime: 29.7.0(supports-color@10.0.0) + jest-util: 29.7.0 + jest-watcher: 29.7.0 + jest-worker: 29.7.0 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.7.0(supports-color@10.0.0): + dependencies: + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0(supports-color@10.0.0) + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + cjs-module-lexer: 1.4.3 + collect-v8-coverage: 1.0.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.7.0 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-regex-util: 29.6.3 + jest-resolve: 29.7.0 + jest-snapshot: 29.7.0(supports-color@10.0.0) + jest-util: 29.7.0 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.7.0(supports-color@10.0.0): + dependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@babel/generator': 7.27.0 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10(supports-color@10.0.0)) + '@babel/types': 7.27.0 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.10(supports-color@10.0.0)) + chalk: 4.1.2 + expect: 29.7.0 + graceful-fs: 4.2.11 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.1 + transitivePeerDependencies: + - supports-color + + jest-util@29.7.0: + dependencies: + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + chalk: 4.1.2 + ci-info: 3.9.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.7.0: + dependencies: + '@jest/types': 29.6.3 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.6.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.7.0: + dependencies: + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 22.13.13 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.7.0 + string-length: 4.0.2 + + jest-worker@27.5.1: + dependencies: + '@types/node': 22.13.13 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest-worker@29.7.0: + dependencies: + '@types/node': 22.13.13 + jest-util: 29.7.0 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)): + dependencies: + '@jest/core': 29.7.0(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + '@jest/types': 29.6.3 + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jiti@1.21.7: {} + + jiti@2.4.2: {} + + jmespath@0.16.0: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + jose@6.0.10: {} + + jquery@3.7.1: {} + + js-cookie@3.0.5: {} + + js-tokens@3.0.2: {} + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbn@0.1.1: {} + + jsbn@1.1.0: {} + + jsdom@20.0.3(supports-color@10.0.0): + dependencies: + abab: 2.0.6 + acorn: 8.14.1 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.4.3 + domexception: 4.0.0 + escodegen: 2.1.0 + form-data: 4.0.2 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0(supports-color@10.0.0) + https-proxy-agent: 5.0.1(supports-color@10.0.0) + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.19 + parse5: 7.2.1 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 4.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.1 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@26.0.0(supports-color@10.0.0): + dependencies: + cssstyle: 4.3.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.2 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2(supports-color@10.0.0) + https-proxy-agent: 7.0.6(supports-color@10.0.0) + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.19 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.2 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.18.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@1.3.0: {} + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + + json-buffer@3.0.1: {} + + json-parse-better-errors@1.0.2: {} + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@4.0.0: {} + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json5@0.5.1: {} + + json5@1.0.2: + dependencies: + minimist: 1.2.8 + + json5@2.2.3: {} + + jsonc-parser@3.3.1: {} + + jsonfile@4.0.0: + optionalDependencies: + graceful-fs: 4.2.11 + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonparse@1.3.1: {} + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.1 + + jsprim@2.0.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + jsx-ast-utils@3.3.5: + dependencies: + array-includes: 3.1.8 + array.prototype.flat: 1.3.3 + object.assign: 4.1.7 + object.values: 1.2.1 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwa@2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + + jwt-decode@4.0.0: {} + + kareem@2.6.3: {} + + keygrip@1.1.0: + dependencies: + tsscmp: 1.0.6 + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + keyv@5.3.2: + dependencies: + '@keyv/serialize': 1.0.3 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + kleur@4.1.5: {} + + koa-compose@4.1.0: {} + + koa-convert@2.0.0: + dependencies: + co: 4.6.0 + koa-compose: 4.1.0 + + koa@2.16.0(supports-color@10.0.0): + dependencies: + accepts: 1.3.8 + cache-content-type: 1.0.1 + content-disposition: 0.5.4 + content-type: 1.0.5 + cookies: 0.9.1 + debug: 4.4.0(supports-color@10.0.0) + delegates: 1.0.0 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 1.8.1 + is-generator-function: 1.1.0 + koa-compose: 4.1.0 + koa-convert: 2.0.0 + on-finished: 2.4.1 + only: 0.0.2 + parseurl: 1.3.3 + statuses: 1.5.0 + type-is: 1.6.18 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + kuler@2.0.0: {} + + ky@1.7.5: {} + + language-subtag-registry@0.3.23: {} + + language-tags@1.0.9: + dependencies: + language-subtag-registry: 0.3.23 + + latest-version@9.0.0: + dependencies: + package-json: 10.0.1 + + launch-editor@2.10.0: + dependencies: + picocolors: 1.1.1 + shell-quote: 1.8.2 + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + less-loader@12.2.0(less@4.2.2)(webpack@5.98.0): + dependencies: + less: 4.2.2 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + less@4.2.2: + dependencies: + copy-anything: 2.0.6 + parse-node-version: 1.0.1 + tslib: 2.8.1 + optionalDependencies: + errno: 0.1.8 + graceful-fs: 4.2.11 + image-size: 0.5.5 + make-dir: 2.1.0 + mime: 1.6.0 + needle: 3.3.1 + source-map: 0.6.1 + + leven@3.1.0: {} + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + lines-and-columns@2.0.4: {} + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + lint-staged@15.5.0(supports-color@10.0.0): + dependencies: + chalk: 5.4.1 + commander: 13.1.0 + debug: 4.4.0(supports-color@10.0.0) + execa: 8.0.1 + lilconfig: 3.1.3 + listr2: 8.2.5 + micromatch: 4.0.8 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.7.0 + transitivePeerDependencies: + - supports-color + + listr2@8.2.5: + dependencies: + cli-truncate: 4.0.0 + colorette: 2.0.20 + eventemitter3: 5.0.1 + log-update: 6.1.0 + rfdc: 1.4.1 + wrap-ansi: 9.0.0 + + load-json-file@7.0.1: {} + + loader-runner@4.3.0: {} + + loader-utils@3.3.1: {} + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + locate-path@7.2.0: + dependencies: + p-locate: 6.0.0 + + lodash-es@4.17.21: {} + + lodash.camelcase@4.3.0: {} + + lodash.debounce@4.0.8: {} + + lodash.defaults@4.2.0: {} + + lodash.includes@4.3.0: {} + + lodash.isarguments@3.1.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isequal@4.5.0: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash.uniq@4.5.0: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + + log-symbols@7.0.0: + dependencies: + is-unicode-supported: 2.1.0 + yoctocolors: 2.1.1 + + log-update@6.1.0: + dependencies: + ansi-escapes: 7.0.0 + cli-cursor: 5.0.0 + slice-ansi: 7.1.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.0 + + log4js@6.9.1(supports-color@10.0.0): + dependencies: + date-format: 4.0.14 + debug: 4.4.0(supports-color@10.0.0) + flatted: 3.3.3 + rfdc: 1.4.1 + streamroller: 3.1.5(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + logform@2.7.0: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.5.0 + triple-beam: 1.4.1 + + loglevel@1.9.2: {} + + long@5.3.1: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + loupe@3.1.3: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lowercase-keys@3.0.0: {} + + lru-cache@10.4.3: {} + + lru-cache@11.1.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + luxon@3.6.0: {} + + lz-string@1.5.0: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + make-dir@2.1.0: + dependencies: + pify: 4.0.1 + semver: 5.7.2 + optional: true + + make-dir@4.0.0: + dependencies: + semver: 7.7.1 + + make-dir@5.0.0: {} + + make-error@1.3.6: {} + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + map-obj@5.0.2: {} + + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + + marked@15.0.7: {} + + math-intrinsics@1.1.0: {} + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mdn-data@2.12.2: {} + + mdn-data@2.18.0: {} + + mdurl@2.0.0: {} + + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + memfs@4.17.0: + dependencies: + '@jsonjoy.com/json-pack': 1.2.0(tslib@2.8.1) + '@jsonjoy.com/util': 1.5.0(tslib@2.8.1) + tree-dump: 1.0.2(tslib@2.8.1) + tslib: 2.8.1 + + memory-pager@1.5.0: {} + + meow@13.2.0: {} + + merge-descriptors@1.0.3: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime@1.6.0: {} + + mime@2.6.0: {} + + mime@4.0.6: {} + + mimic-fn@2.1.0: {} + + mimic-fn@4.0.0: {} + + mimic-function@5.0.1: {} + + mimic-response@3.1.0: {} + + mimic-response@4.0.0: {} + + min-indent@1.0.1: {} + + mini-css-extract-plugin@2.9.2(webpack@5.98.0): + dependencies: + schema-utils: 4.3.0 + tapable: 2.2.1 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@10.0.1: + dependencies: + brace-expansion: 2.0.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + minimist@1.2.8: {} + + minipass-collect@2.0.1: + dependencies: + minipass: 7.1.2 + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@7.1.2: {} + + minizlib@3.0.1: + dependencies: + minipass: 7.1.2 + rimraf: 5.0.10 + + mitt@3.0.1: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@3.0.1: {} + + mocha@11.1.0: + dependencies: + ansi-colors: 4.1.3 + browser-stdout: 1.3.1 + chokidar: 3.6.0 + debug: 4.4.0(supports-color@8.1.1) + diff: 5.2.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.4.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 5.1.6 + ms: 2.1.3 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 6.5.1 + yargs: 17.7.2 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 + + module-details-from-path@1.0.3: {} + + moment-timezone@0.5.48: + dependencies: + moment: 2.30.1 + + moment@2.30.1: {} + + mongodb-connection-string-url@3.0.2: + dependencies: + '@types/whatwg-url': 11.0.5 + whatwg-url: 14.2.0 + + mongodb@6.15.0(socks@2.8.4): + dependencies: + '@mongodb-js/saslprep': 1.2.0 + bson: 6.10.3 + mongodb-connection-string-url: 3.0.2 + optionalDependencies: + socks: 2.8.4 + + mongoose@8.13.0(socks@2.8.4)(supports-color@10.0.0): + dependencies: + bson: 6.10.3 + kareem: 2.6.3 + mongodb: 6.15.0(socks@2.8.4) + mpath: 0.9.0 + mquery: 5.0.0(supports-color@10.0.0) + ms: 2.1.3 + sift: 17.1.3 + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + - supports-color + + morgan@1.10.0(supports-color@10.0.0): + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9(supports-color@10.0.0) + depd: 2.0.0 + on-finished: 2.3.0 + on-headers: 1.0.2 + transitivePeerDependencies: + - supports-color + + motion-dom@12.6.0: + dependencies: + motion-utils: 12.5.0 + + motion-utils@12.5.0: {} + + mpath@0.9.0: {} + + mquery@5.0.0(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + ms@2.0.0: {} + + ms@2.1.3: {} + + multer@1.4.5-lts.2: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + multicast-dns@7.2.5: + dependencies: + dns-packet: 5.6.1 + thunky: 1.1.0 + + mustache@4.2.0: {} + + mute-stream@2.0.0: {} + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + nan@2.22.2: {} + + nanoid@3.3.11: {} + + nanoid@5.1.5: {} + + natural-compare@1.4.0: {} + + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + optional: true + + negotiator@0.6.3: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + next@15.2.4(@babel/core@7.26.10(supports-color@10.0.0))(@opentelemetry/api@1.9.0)(babel-plugin-macros@3.1.0)(react-dom@19.0.0(react@18.3.1))(react@18.3.1)(sass@1.86.0): + dependencies: + '@next/env': 15.2.4 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.15 + busboy: 1.6.0 + caniuse-lite: 1.0.30001707 + postcss: 8.4.31 + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + styled-jsx: 5.1.6(@babel/core@7.26.10(supports-color@10.0.0))(babel-plugin-macros@3.1.0)(react@18.3.1) + optionalDependencies: + '@next/swc-darwin-arm64': 15.2.4 + '@next/swc-darwin-x64': 15.2.4 + '@next/swc-linux-arm64-gnu': 15.2.4 + '@next/swc-linux-arm64-musl': 15.2.4 + '@next/swc-linux-x64-gnu': 15.2.4 + '@next/swc-linux-x64-musl': 15.2.4 + '@next/swc-win32-arm64-msvc': 15.2.4 + '@next/swc-win32-x64-msvc': 15.2.4 + '@opentelemetry/api': 1.9.0 + sass: 1.86.0 + sharp: 0.33.5 + transitivePeerDependencies: + - '@babel/core' + - babel-plugin-macros + + nice-try@1.0.5: {} + + nice-try@3.0.1: {} + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + node-addon-api@7.1.1: + optional: true + + node-addon-api@8.3.1: {} + + node-domexception@1.0.0: {} + + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-forge@1.3.1: {} + + node-gyp-build@4.8.4: {} + + node-int64@0.4.0: {} + + node-releases@2.0.19: {} + + nodemailer@6.10.0: {} + + nodemon@3.1.9: + dependencies: + chokidar: 3.6.0 + debug: 4.4.0(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.1 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.1 + undefsafe: 2.0.5 + + nopt@8.1.0: + dependencies: + abbrev: 3.0.0 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-package-data@7.0.0: + dependencies: + hosted-git-info: 8.0.2 + semver: 7.7.1 + validate-npm-package-license: 3.0.4 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-url@8.0.1: {} + + npm-package-arg@12.0.2: + dependencies: + hosted-git-info: 8.0.2 + proc-log: 5.0.0 + semver: 7.7.1 + validate-npm-package-name: 6.0.0 + + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@5.3.0: + dependencies: + path-key: 4.0.0 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + npm@11.2.0: {} + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nwsapi@2.2.19: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.4: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.entries@1.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + obuf@1.1.2: {} + + on-exit-leak-free@2.1.2: {} + + on-finished@2.3.0: + dependencies: + ee-first: 1.1.1 + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.0.2: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + onetime@6.0.0: + dependencies: + mimic-fn: 4.0.0 + + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + only@0.0.2: {} + + open@10.1.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + is-wsl: 3.1.0 + + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + + ora@8.2.0: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + os-homedir@1.0.2: {} + + os-tmpdir@1.0.2: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-cancelable@4.0.1: {} + + p-finally@1.0.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.1 + + p-limit@6.2.0: + dependencies: + yocto-queue: 1.2.1 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-locate@6.0.0: + dependencies: + p-limit: 4.0.0 + + p-map@7.0.3: {} + + p-retry@6.2.1: + dependencies: + '@types/retry': 0.12.2 + is-network-error: 1.1.0 + retry: 0.13.1 + + p-try@2.2.0: {} + + p-try@3.0.0: {} + + package-json-from-dist@1.0.1: {} + + package-json@10.0.1: + dependencies: + ky: 1.7.5 + registry-auth-token: 5.1.0 + registry-url: 6.0.1 + semver: 7.7.1 + + pako@1.0.11: {} + + pako@2.1.0: {} + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-json@8.2.0: + dependencies: + '@babel/code-frame': 7.26.2 + index-to-position: 1.0.0 + type-fest: 4.38.0 + + parse-ms@4.0.0: {} + + parse-node-version@1.0.1: {} + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.2.1 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.2.1 + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + parseurl@1.3.3: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-browserify@1.0.1: {} + + path-exists@4.0.0: {} + + path-exists@5.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + + path-to-regexp@0.1.12: {} + + path-to-regexp@8.2.0: {} + + path-type@4.0.0: {} + + path-type@6.0.0: {} + + path@0.12.7: + dependencies: + process: 0.11.10 + util: 0.10.4 + + pathe@2.0.3: {} + + pathval@2.0.0: {} + + peek-readable@7.0.0: {} + + performance-now@2.1.0: {} + + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.7.0: {} + + pg-int8@1.0.1: {} + + pg-pool@3.8.0(pg@8.14.1): + dependencies: + pg: 8.14.1 + + pg-protocol@1.8.0: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg@8.14.1: + dependencies: + pg-connection-string: 2.7.0 + pg-pool: 3.8.0(pg@8.14.1) + pg-protocol: 1.8.0 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pify@4.0.1: + optional: true + + pify@6.1.0: {} + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.6.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 4.0.1 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.5.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.6: {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-dir@7.0.0: + dependencies: + find-up: 6.3.0 + + pkg-dir@8.0.0: + dependencies: + find-up-simple: 1.0.1 + + playwright-core@1.51.1: {} + + playwright@1.51.1: + dependencies: + playwright-core: 1.51.1 + optionalDependencies: + fsevents: 2.3.2 + + pluralize@8.0.0: {} + + pnpm@10.6.5: {} + + polished@4.3.1: + dependencies: + '@babel/runtime': 7.27.0 + + possible-typed-array-names@1.1.0: {} + + postcss-calc@10.1.1(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-colormin@7.0.2(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-convert-values@7.0.4(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-discard-comments@7.0.3(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.1.2 + + postcss-discard-duplicates@7.0.1(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + postcss-discard-empty@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + postcss-discard-overridden@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + postcss-import@16.1.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.4.33)(yaml@2.7.0): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 2.4.2 + postcss: 8.4.33 + yaml: 2.7.0 + + postcss-loader@8.1.1(postcss@8.4.33)(typescript@5.8.2)(webpack@5.98.0): + dependencies: + cosmiconfig: 9.0.0(typescript@5.8.2) + jiti: 1.21.7 + postcss: 8.4.33 + semver: 7.7.1 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + transitivePeerDependencies: + - typescript + + postcss-merge-longhand@7.0.4(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + stylehacks: 7.0.4(postcss@8.4.33) + + postcss-merge-rules@7.0.4(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + cssnano-utils: 5.0.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-selector-parser: 6.1.2 + + postcss-minify-font-values@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-minify-gradients@7.0.0(postcss@8.4.33): + dependencies: + colord: 2.9.3 + cssnano-utils: 5.0.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-minify-params@7.0.2(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + cssnano-utils: 5.0.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-minify-selectors@7.0.4(postcss@8.4.33): + dependencies: + cssesc: 3.0.0 + postcss: 8.4.33 + postcss-selector-parser: 6.1.2 + + postcss-modules-extract-imports@3.1.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + postcss-modules-local-by-default@4.2.0(postcss@8.4.33): + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + + postcss-modules-scope@3.2.1(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 7.1.0 + + postcss-modules-values@4.0.0(postcss@8.4.33): + dependencies: + icss-utils: 5.1.0(postcss@8.4.33) + postcss: 8.4.33 + + postcss-nested@7.0.2(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 7.1.0 + + postcss-normalize-charset@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + + postcss-normalize-display-values@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-positions@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-repeat-style@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-string@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-timing-functions@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-unicode@7.0.2(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-url@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-normalize-whitespace@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-ordered-values@7.0.1(postcss@8.4.33): + dependencies: + cssnano-utils: 5.0.0(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-reduce-initial@7.0.2(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + caniuse-api: 3.0.0 + postcss: 8.4.33 + + postcss-reduce-transforms@7.0.0(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-svgo@7.0.1(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + svgo: 3.3.2 + + postcss-unique-selectors@7.0.3(postcss@8.4.33): + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.1.2 + + postcss-value-parser@4.2.0: {} + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.4.33: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.3: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postgres-array@2.0.0: {} + + postgres-bytea@1.0.0: {} + + postgres-date@1.0.7: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + prelude-ls@1.2.1: {} + + prettier-linter-helpers@1.0.0: + dependencies: + fast-diff: 1.3.0 + + prettier@3.5.3: {} + + pretty-bytes@6.1.1: {} + + pretty-error@4.0.0: + dependencies: + lodash: 4.17.21 + renderkid: 3.0.0 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.3.1 + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + prismjs@1.30.0: {} + + private@0.1.8: {} + + proc-log@5.0.0: {} + + process-nextick-args@2.0.1: {} + + process-warning@4.0.1: {} + + process@0.11.10: {} + + progress@2.0.3: {} + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + + promise@8.3.0: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + property-expr@2.0.6: {} + + proto-list@1.2.4: {} + + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 22.13.13 + long: 5.3.1 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.1.0: {} + + prr@1.0.1: + optional: true + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + pstree.remy@1.1.8: {} + + pump@3.0.2: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode.js@2.3.1: {} + + punycode@1.3.2: {} + + punycode@1.4.1: {} + + punycode@2.3.1: {} + + pupa@3.1.0: + dependencies: + escape-goat: 4.0.0 + + pure-rand@6.1.0: {} + + qs@6.13.0: + dependencies: + side-channel: 1.1.0 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + query-string@9.1.1: + dependencies: + decode-uri-component: 0.4.1 + filter-obj: 5.1.0 + split-on-first: 3.0.0 + + querystring@0.2.0: {} + + querystringify@2.2.0: {} + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + quick-lru@5.1.1: {} + + raf@3.4.1: + dependencies: + performance-now: 2.1.0 + + ramda@0.30.1: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@2.5.2: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-dom@19.0.0(react@18.3.1): + dependencies: + react: 18.3.1 + scheduler: 0.25.0 + + react-hook-form@7.54.2(react@18.3.1): + dependencies: + react: 18.3.1 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-is@18.3.1: {} + + react-is@19.0.0: {} + + react-redux@9.2.0(@types/react@19.0.12)(react@18.3.1)(redux@5.0.1): + dependencies: + '@types/use-sync-external-store': 0.0.6 + react: 18.3.1 + use-sync-external-store: 1.4.0(react@18.3.1) + optionalDependencies: + '@types/react': 19.0.12 + redux: 5.0.1 + + react-refresh@0.16.0: {} + + react-router-dom@7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + dependencies: + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + react-router: 7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1) + + react-router@7.4.0(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + dependencies: + '@types/cookie': 0.6.0 + cookie: 1.0.2 + react: 18.3.1 + set-cookie-parser: 2.7.1 + turbo-stream: 2.4.0 + optionalDependencies: + react-dom: 19.0.0(react@18.3.1) + + react-transition-group@4.4.5(react-dom@19.0.0(react@18.3.1))(react@18.3.1): + dependencies: + '@babel/runtime': 7.27.0 + dom-helpers: 5.2.1 + loose-envify: 1.4.0 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 19.0.0(react@18.3.1) + + react@18.3.1: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.2.0 + type-fest: 4.38.0 + unicorn-magic: 0.1.0 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + readdirp@4.1.2: {} + + real-require@0.2.0: {} + + recast@0.23.11: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + rechoir@0.8.0: + dependencies: + resolve: 1.22.10 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redent@4.0.0: + dependencies: + indent-string: 5.0.0 + strip-indent: 4.0.0 + + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + + redux-thunk@3.1.0(redux@5.0.1): + dependencies: + redux: 5.0.1 + + redux@5.0.1: {} + + reflect-metadata@0.2.2: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.11.1: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.27.0 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + registry-auth-token@5.1.0: + dependencies: + '@pnpm/npm-conf': 2.3.1 + + registry-url@6.0.1: + dependencies: + rc: 1.2.8 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + relateurl@0.2.7: {} + + renderkid@3.0.0: + dependencies: + css-select: 4.3.0 + dom-converter: 0.2.0 + htmlparser2: 6.1.0 + lodash: 4.17.21 + strip-ansi: 6.0.1 + + repeat-string@1.6.1: {} + + repeating@2.0.1: + dependencies: + is-finite: 1.1.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-in-the-middle@7.5.2(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + module-details-from-path: 1.0.3 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + require-main-filename@2.0.0: {} + + requires-port@1.0.0: {} + + reselect@5.1.1: {} + + resize-observer-polyfill@1.5.1: {} + + resolve-alpn@1.2.1: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.3: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + resolve@2.0.0-next.5: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + responselike@3.0.0: + dependencies: + lowercase-keys: 3.0.0 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + + retry@0.12.0: {} + + retry@0.13.1: {} + + reusify@1.1.0: {} + + rfdc@1.4.1: {} + + rimraf@5.0.10: + dependencies: + glob: 10.4.5 + + rimraf@6.0.1: + dependencies: + glob: 11.0.1 + package-json-from-dist: 1.0.1 + + rollup@4.37.0: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.37.0 + '@rollup/rollup-android-arm64': 4.37.0 + '@rollup/rollup-darwin-arm64': 4.37.0 + '@rollup/rollup-darwin-x64': 4.37.0 + '@rollup/rollup-freebsd-arm64': 4.37.0 + '@rollup/rollup-freebsd-x64': 4.37.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 + '@rollup/rollup-linux-arm-musleabihf': 4.37.0 + '@rollup/rollup-linux-arm64-gnu': 4.37.0 + '@rollup/rollup-linux-arm64-musl': 4.37.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-gnu': 4.37.0 + '@rollup/rollup-linux-riscv64-musl': 4.37.0 + '@rollup/rollup-linux-s390x-gnu': 4.37.0 + '@rollup/rollup-linux-x64-gnu': 4.37.0 + '@rollup/rollup-linux-x64-musl': 4.37.0 + '@rollup/rollup-win32-arm64-msvc': 4.37.0 + '@rollup/rollup-win32-ia32-msvc': 4.37.0 + '@rollup/rollup-win32-x64-msvc': 4.37.0 + fsevents: 2.3.3 + + rrweb-cssom@0.8.0: {} + + rspack-resolver@1.2.2: + optionalDependencies: + '@unrs/rspack-resolver-binding-darwin-arm64': 1.2.2 + '@unrs/rspack-resolver-binding-darwin-x64': 1.2.2 + '@unrs/rspack-resolver-binding-freebsd-x64': 1.2.2 + '@unrs/rspack-resolver-binding-linux-arm-gnueabihf': 1.2.2 + '@unrs/rspack-resolver-binding-linux-arm64-gnu': 1.2.2 + '@unrs/rspack-resolver-binding-linux-arm64-musl': 1.2.2 + '@unrs/rspack-resolver-binding-linux-x64-gnu': 1.2.2 + '@unrs/rspack-resolver-binding-linux-x64-musl': 1.2.2 + '@unrs/rspack-resolver-binding-wasm32-wasi': 1.2.2 + '@unrs/rspack-resolver-binding-win32-arm64-msvc': 1.2.2 + '@unrs/rspack-resolver-binding-win32-x64-msvc': 1.2.2 + + run-applescript@7.0.0: {} + + run-async@3.0.0: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + rxjs@7.8.2: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@2.5.0: {} + + safer-buffer@2.1.2: {} + + sass-loader@16.0.5(sass@1.86.0)(webpack@5.98.0): + dependencies: + neo-async: 2.6.2 + optionalDependencies: + sass: 1.86.0 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + sass@1.86.0: + dependencies: + chokidar: 4.0.3 + immutable: 5.0.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + sax@1.2.1: {} + + sax@1.4.1: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + scheduler@0.25.0: {} + + schema-utils@4.3.0: + dependencies: + '@types/json-schema': 7.0.15 + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + + select-hose@2.0.0: {} + + selfsigned@2.4.1: + dependencies: + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + + semver@5.7.2: {} + + semver@6.3.1: {} + + semver@7.7.1: {} + + send@0.19.0(supports-color@10.0.0): + dependencies: + debug: 2.6.9(supports-color@10.0.0) + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: 1.0.2 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + send@1.1.0(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime-types: 2.1.35 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-index@1.9.1(supports-color@10.0.0): + dependencies: + accepts: 1.3.8 + batch: 0.6.1 + debug: 2.6.9(supports-color@10.0.0) + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.35 + parseurl: 1.3.3 + transitivePeerDependencies: + - supports-color + + serve-static@1.16.2(supports-color@10.0.0): + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.19.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: {} + + set-cookie-parser@2.7.1: {} + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + set-value@4.1.0: + dependencies: + is-plain-object: 2.0.4 + is-primitive: 3.0.1 + + setimmediate@1.0.5: {} + + setprototypeof@1.1.0: {} + + setprototypeof@1.2.0: {} + + shallow-clone@3.0.1: + dependencies: + kind-of: 6.0.3 + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.7.1 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shebang-regex@4.0.0: {} + + shell-quote@1.8.2: {} + + shelljs@0.9.2: + dependencies: + execa: 1.0.0 + fast-glob: 3.3.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shimmer@1.2.1: {} + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + sift@17.1.3: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-git@3.27.0(supports-color@10.0.0): + dependencies: + '@kwsites/file-exists': 1.1.1(supports-color@10.0.0) + '@kwsites/promise-deferred': 1.1.1 + debug: 4.4.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.1 + + sisteransi@1.0.5: {} + + slash@1.0.0: {} + + slash@3.0.0: {} + + slash@5.1.0: {} + + slice-ansi@5.0.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + + slice-ansi@7.1.0: + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 5.0.0 + + smart-buffer@4.2.0: {} + + socket.io-adapter@2.5.5(supports-color@10.0.0): + dependencies: + debug: 4.3.7(supports-color@10.0.0) + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-client@4.8.1(supports-color@10.0.0): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@10.0.0) + engine.io-client: 6.6.3(supports-color@10.0.0) + socket.io-parser: 4.2.4(supports-color@10.0.0) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + socket.io-parser@4.2.4(supports-color@10.0.0): + dependencies: + '@socket.io/component-emitter': 3.1.2 + debug: 4.3.7(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + socket.io@4.8.1(supports-color@10.0.0): + dependencies: + accepts: 1.3.8 + base64id: 2.0.0 + cors: 2.8.5 + debug: 4.3.7(supports-color@10.0.0) + engine.io: 6.6.4(supports-color@10.0.0) + socket.io-adapter: 2.5.5(supports-color@10.0.0) + socket.io-parser: 4.2.4(supports-color@10.0.0) + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + sockjs@0.3.24: + dependencies: + faye-websocket: 0.11.4 + uuid: 8.3.2 + websocket-driver: 0.7.4 + + socks-proxy-agent@8.0.5(supports-color@10.0.0): + dependencies: + agent-base: 7.1.3 + debug: 4.4.0(supports-color@10.0.0) + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + source-map-js@1.2.1: {} + + source-map-support@0.4.18: + dependencies: + source-map: 0.5.7 + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.5.7: {} + + source-map@0.6.1: {} + + source-map@0.7.4: {} + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.21 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-expression-parse@4.0.0: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.21 + + spdx-license-ids@3.0.21: {} + + spdy-transport@3.0.0(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.2 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + + spdy@4.0.2(supports-color@10.0.0): + dependencies: + debug: 4.4.0(supports-color@10.0.0) + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0(supports-color@10.0.0) + transitivePeerDependencies: + - supports-color + + split-on-first@3.0.0: {} + + split2@4.2.0: {} + + sprintf-js@1.0.3: {} + + sprintf-js@1.1.3: {} + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + ssri@12.0.0: + dependencies: + minipass: 7.1.2 + + stable-hash@0.0.5: {} + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stackframe@1.3.4: {} + + standard-as-callback@2.1.0: {} + + statuses@1.5.0: {} + + statuses@2.0.1: {} + + stdin-discarder@0.2.2: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + + streamroller@3.1.5(supports-color@10.0.0): + dependencies: + date-format: 4.0.14 + debug: 4.4.0(supports-color@10.0.0) + fs-extra: 8.1.0 + transitivePeerDependencies: + - supports-color + + streamsearch@1.1.0: {} + + streamx@2.22.0: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + string-argv@0.3.2: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-length@6.0.0: + dependencies: + strip-ansi: 7.1.0 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string-width@7.2.0: + dependencies: + emoji-regex: 10.4.0 + get-east-asian-width: 1.3.0 + strip-ansi: 7.1.0 + + string.prototype.includes@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.matchall@4.0.12: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-symbols: 1.1.0 + internal-slot: 1.1.0 + regexp.prototype.flags: 1.5.4 + set-function-name: 2.0.2 + side-channel: 1.1.0 + + string.prototype.repeat@1.0.0: + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.9 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.23.9 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + strip-ansi@3.0.1: + dependencies: + ansi-regex: 2.1.1 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.1.0 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-bom@5.0.0: {} + + strip-eof@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@3.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strip-json-comments@5.0.1: {} + + strnum@1.1.2: {} + + strnum@2.0.5: {} + + strtok3@10.2.2: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 7.0.0 + + stubborn-fs@1.2.5: {} + + style-loader@4.0.0(webpack@5.98.0): + dependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + styled-jsx@5.1.6(@babel/core@7.26.10(supports-color@10.0.0))(babel-plugin-macros@3.1.0)(react@18.3.1): + dependencies: + client-only: 0.0.1 + react: 18.3.1 + optionalDependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + babel-plugin-macros: 3.1.0 + + stylehacks@7.0.4(postcss@8.4.33): + dependencies: + browserslist: 4.24.4 + postcss: 8.4.33 + postcss-selector-parser: 6.1.2 + + stylis@4.2.0: {} + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.6 + ts-interface-checker: 0.1.13 + + superagent@10.2.0(supports-color@10.0.0): + dependencies: + component-emitter: 1.3.1 + cookiejar: 2.1.4 + debug: 4.4.0(supports-color@10.0.0) + fast-safe-stringify: 2.1.1 + form-data: 4.0.2 + formidable: 3.5.2 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.14.0 + transitivePeerDependencies: + - supports-color + + supports-color@10.0.0: {} + + supports-color@2.0.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + symbol-tree@3.2.4: {} + + synckit@0.10.3: + dependencies: + '@pkgr/core': 0.2.0 + tslib: 2.8.1 + + tailwind-merge@3.0.2: {} + + tailwindcss@4.0.16: {} + + tapable@2.2.1: {} + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.0 + + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.1 + mkdirp: 3.0.1 + yallist: 5.0.0 + + terser-webpack-plugin@5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0): + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 4.3.0 + serialize-javascript: 6.0.2 + terser: 5.39.0 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + optionalDependencies: + '@swc/core': 1.11.13(@swc/helpers@0.5.15) + esbuild: 0.25.1 + + terser@5.39.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.1 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + text-hex@1.0.0: {} + + text-table@0.2.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thingies@1.21.0(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + through2@4.0.2: + dependencies: + readable-stream: 3.6.2 + + through@2.3.8: {} + + thunky@1.1.0: {} + + tiny-case@1.0.3: {} + + tiny-invariant@1.3.3: {} + + tiny-warning@1.0.3: {} + + tinyglobby@0.2.12: + dependencies: + fdir: 6.4.3(picomatch@4.0.2) + picomatch: 4.0.2 + + tldts-core@6.1.85: {} + + tldts@6.1.85: + dependencies: + tldts-core: 6.1.85 + + tmp@0.0.33: + dependencies: + os-tmpdir: 1.0.2 + + tmp@0.2.3: {} + + tmpl@1.0.5: {} + + to-fast-properties@1.0.3: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + token-types@6.0.0: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + toposort@2.0.2: {} + + touch@3.1.1: {} + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.85 + + tr46@0.0.3: {} + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tr46@5.1.0: + dependencies: + punycode: 2.3.1 + + tree-dump@1.0.2(tslib@2.8.1): + dependencies: + tslib: 2.8.1 + + tree-kill@1.2.2: {} + + trim-right@1.0.1: {} + + triple-beam@1.4.1: {} + + trough@2.2.0: {} + + ts-api-utils@2.1.0(typescript@5.8.2): + dependencies: + typescript: 5.8.2 + + ts-interface-checker@0.1.13: {} + + ts-jest@29.3.0(@babel/core@7.26.10(supports-color@10.0.0))(@jest/transform@29.7.0(supports-color@10.0.0))(@jest/types@29.6.3)(babel-jest@29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0))(esbuild@0.25.1)(jest@29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)))(typescript@5.8.2): + dependencies: + bs-logger: 0.2.6 + ejs: 3.1.10 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@22.13.13)(babel-plugin-macros@3.1.0)(supports-color@10.0.0)(ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2)) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.1 + type-fest: 4.38.0 + typescript: 5.8.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.10(supports-color@10.0.0) + '@jest/transform': 29.7.0(supports-color@10.0.0) + '@jest/types': 29.6.3 + babel-jest: 29.7.0(@babel/core@7.26.10(supports-color@10.0.0))(supports-color@10.0.0) + esbuild: 0.25.1 + + ts-loader@9.5.2(typescript@5.8.2)(webpack@5.98.0): + dependencies: + chalk: 4.1.2 + enhanced-resolve: 5.18.1 + micromatch: 4.0.8 + semver: 7.7.1 + source-map: 0.7.4 + typescript: 5.8.2 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + ts-node@10.9.2(@swc/core@1.11.13(@swc/helpers@0.5.15))(@types/node@22.13.13)(typescript@5.8.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 22.13.13 + acorn: 8.14.1 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.8.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optionalDependencies: + '@swc/core': 1.11.13(@swc/helpers@0.5.15) + + tsconfig-paths@3.15.0: + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.8.1: {} + + tsscmp@1.0.6: {} + + turbo-stream@2.4.0: {} + + tweetnacl@0.14.5: {} + + tweetnacl@1.0.3: {} + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-detect@4.1.0: {} + + type-fest@0.21.3: {} + + type-fest@1.4.0: {} + + type-fest@2.19.0: {} + + type-fest@4.38.0: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray-to-buffer@4.0.0: {} + + typedarray@0.0.6: {} + + typedarray@0.0.7: {} + + typescript@5.8.2: {} + + ua-is-frozen@0.1.2: {} + + ua-parser-js@2.0.3(encoding@0.1.13): + dependencies: + '@types/node-fetch': 2.6.12 + detect-europe-js: 0.1.2 + is-standalone-pwa: 0.1.1 + node-fetch: 2.7.0(encoding@0.1.13) + ua-is-frozen: 0.1.2 + transitivePeerDependencies: + - encoding + + uc.micro@2.1.0: {} + + uglify-js@3.19.3: + optional: true + + uid@2.0.2: + dependencies: + '@lukeed/csprng': 1.1.0 + + uint8array-extras@1.4.0: {} + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undefsafe@2.0.5: {} + + underscore@1.13.7: {} + + undici-types@6.20.0: {} + + undici@6.21.2: {} + + undici@7.5.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + + unified@11.0.5: + dependencies: + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 + extend: 3.0.2 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 + + unique-filename@4.0.0: + dependencies: + unique-slug: 5.0.0 + + unique-slug@5.0.0: + dependencies: + imurmurhash: 0.1.4 + + unique-string@3.0.0: + dependencies: + crypto-random-string: 4.0.0 + + unist-util-is@6.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + '@types/unist': 3.0.3 + + unist-util-visit-parents@6.0.1: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + + unist-util-visit@5.0.0: + dependencies: + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + universal-user-agent@7.0.2: {} + + universalify@0.1.2: {} + + universalify@0.2.0: {} + + universalify@2.0.1: {} + + unpipe@1.0.0: {} + + update-browserslist-db@1.1.3(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-notifier@7.3.1: + dependencies: + boxen: 8.0.1 + chalk: 5.4.1 + configstore: 7.0.0 + is-in-ci: 1.0.0 + is-installed-globally: 1.0.0 + is-npm: 6.0.0 + latest-version: 9.0.0 + pupa: 3.1.0 + semver: 7.7.1 + xdg-basedir: 5.1.0 + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-join@5.0.0: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + url@0.10.3: + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + + url@0.11.4: + dependencies: + punycode: 1.4.1 + qs: 6.14.0 + + use-sync-external-store@1.4.0(react@18.3.1): + dependencies: + react: 18.3.1 + + util-deprecate@1.0.2: {} + + util@0.10.4: + dependencies: + inherits: 2.0.3 + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + utila@0.4.0: {} + + utils-merge@1.0.1: {} + + uuid@11.1.0: {} + + uuid@8.0.0: {} + + uuid@8.3.2: {} + + uuid@9.0.1: {} + + v8-compile-cache-lib@3.0.1: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + + validate-npm-package-name@6.0.0: {} + + validator@13.15.0: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + verror@1.10.1: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.4.1 + + vfile-message@4.0.2: + dependencies: + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + '@types/unist': 3.0.3 + vfile-message: 4.0.2 + + vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(less@4.2.2)(sass@1.86.0)(terser@5.39.0)(yaml@2.7.0): + dependencies: + esbuild: 0.25.1 + postcss: 8.5.3 + rollup: 4.37.0 + optionalDependencies: + '@types/node': 22.13.13 + fsevents: 2.3.3 + jiti: 2.4.2 + less: 4.2.2 + sass: 1.86.0 + terser: 5.39.0 + yaml: 2.7.0 + + vue-router@4.5.0(vue@3.5.13(typescript@5.8.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.8.2) + + vue@3.5.13(typescript@5.8.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.8.2 + + w3c-xmlserializer@4.0.0: + dependencies: + xml-name-validator: 4.0.0 + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + watchpack@2.4.2: + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + + wbuf@1.7.3: + dependencies: + minimalistic-assert: 1.0.1 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + web-streams-polyfill@3.3.3: {} + + web-vitals@4.2.4: {} + + webidl-conversions@3.0.1: {} + + webidl-conversions@7.0.0: {} + + webpack-cli@6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0): + dependencies: + '@discoveryjs/json-ext': 0.6.3 + '@webpack-cli/configtest': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) + '@webpack-cli/info': 3.0.1(webpack-cli@6.0.1)(webpack@5.98.0) + '@webpack-cli/serve': 3.0.1(webpack-cli@6.0.1)(webpack-dev-server@5.2.0)(webpack@5.98.0) + colorette: 2.0.20 + commander: 12.1.0 + cross-spawn: 7.0.6 + envinfo: 7.14.0 + fastest-levenshtein: 1.0.16 + import-local: 3.2.0 + interpret: 3.1.1 + rechoir: 0.8.0 + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-merge: 6.0.1 + optionalDependencies: + webpack-dev-server: 5.2.0(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0) + + webpack-dev-middleware@7.4.2(webpack@5.98.0): + dependencies: + colorette: 2.0.20 + memfs: 4.17.0 + mime-types: 2.1.35 + on-finished: 2.4.1 + range-parser: 1.2.1 + schema-utils: 4.3.0 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + + webpack-dev-server@5.2.0(debug@4.4.0(supports-color@10.0.0))(supports-color@10.0.0)(webpack-cli@6.0.1)(webpack@5.98.0): + dependencies: + '@types/bonjour': 3.5.13 + '@types/connect-history-api-fallback': 1.5.4 + '@types/express': 4.17.21 + '@types/serve-index': 1.9.4 + '@types/serve-static': 1.15.7 + '@types/sockjs': 0.3.36 + '@types/ws': 8.18.0 + ansi-html-community: 0.0.8 + bonjour-service: 1.3.0 + chokidar: 3.6.0 + colorette: 2.0.20 + compression: 1.8.0(supports-color@10.0.0) + connect-history-api-fallback: 2.0.0 + express: 4.21.2(supports-color@10.0.0) + graceful-fs: 4.2.11 + http-proxy-middleware: 2.0.7(@types/express@4.17.21)(debug@4.4.0(supports-color@10.0.0)) + ipaddr.js: 2.2.0 + launch-editor: 2.10.0 + open: 10.1.0 + p-retry: 6.2.1 + schema-utils: 4.3.0 + selfsigned: 2.4.1 + serve-index: 1.9.1(supports-color@10.0.0) + sockjs: 0.3.24 + spdy: 4.0.2(supports-color@10.0.0) + webpack-dev-middleware: 7.4.2(webpack@5.98.0) + ws: 8.18.1 + optionalDependencies: + webpack: 5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1) + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + + webpack-sources@3.2.3: {} + + webpack@5.98.0(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack-cli@6.0.1): + dependencies: + '@types/eslint-scope': 3.7.7 + '@types/estree': 1.0.7 + '@webassemblyjs/ast': 1.14.1 + '@webassemblyjs/wasm-edit': 1.14.1 + '@webassemblyjs/wasm-parser': 1.14.1 + acorn: 8.14.1 + browserslist: 4.24.4 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.18.1 + es-module-lexer: 1.6.0 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.11 + json-parse-even-better-errors: 2.3.1 + loader-runner: 4.3.0 + mime-types: 2.1.35 + neo-async: 2.6.2 + schema-utils: 4.3.0 + tapable: 2.2.1 + terser-webpack-plugin: 5.3.14(@swc/core@1.11.13(@swc/helpers@0.5.15))(esbuild@0.25.1)(webpack@5.98.0) + watchpack: 2.4.2 + webpack-sources: 3.2.3 + optionalDependencies: + webpack-cli: 6.0.1(webpack-dev-server@5.2.0)(webpack@5.98.0) + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + + websocket-driver@0.7.4: + dependencies: + http-parser-js: 0.5.9 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + + websocket-extensions@0.1.4: {} + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-fetch@3.6.20: {} + + whatwg-mimetype@3.0.0: {} + + whatwg-mimetype@4.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.0 + webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + when-exit@2.1.4: {} + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@4.0.0: + dependencies: + isexe: 3.1.1 + + which@5.0.0: + dependencies: + isexe: 3.1.1 + + widest-line@5.0.0: + dependencies: + string-width: 7.2.0 + + wildcard@2.0.1: {} + + winston-transport@4.9.0: + dependencies: + logform: 2.7.0 + readable-stream: 3.6.2 + triple-beam: 1.4.1 + + winston@3.17.0: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.6 + is-stream: 2.0.1 + logform: 2.7.0 + one-time: 1.0.0 + readable-stream: 3.6.2 + safe-stable-stringify: 2.5.0 + stack-trace: 0.0.10 + triple-beam: 1.4.1 + winston-transport: 4.9.0 + + word-wrap@1.2.5: {} + + wordwrap@1.0.0: {} + + workerpool@6.5.1: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrap-ansi@9.0.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write-file-atomic@6.0.0: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + ws@8.17.1: {} + + ws@8.18.1: {} + + xdg-basedir@5.1.0: {} + + xml-name-validator@4.0.0: {} + + xml-name-validator@5.0.0: {} + + xml2js@0.6.2: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + + xmlbuilder@15.1.1: {} + + xmlchars@2.2.0: {} + + xmlhttprequest-ssl@2.1.2: {} + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yallist@5.0.0: {} + + yaml@1.10.2: {} + + yaml@2.7.0: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + ylru@1.4.0: {} + + yn@3.1.1: {} + + yn@5.0.0: {} + + yocto-queue@0.1.0: {} + + yocto-queue@1.2.1: {} + + yoctocolors-cjs@2.1.2: {} + + yoctocolors@2.1.1: {} + + yup@1.6.1: + dependencies: + property-expr: 2.0.6 + tiny-case: 1.0.3 + toposort: 2.0.2 + type-fest: 2.19.0 + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 + + zod@3.24.2: {} + + zone.js@0.15.0: {} diff --git a/benches/resolver.rs b/benches/resolver.rs index ffa6f0fd..47d48c3e 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -1,4 +1,4 @@ -use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; +use criterion2::{criterion_group, criterion_main, BenchmarkId, Criterion}; use serde_json::Value; use std::fs::read_to_string; use std::future::Future; @@ -109,7 +109,7 @@ fn bench_resolver(c: &mut Criterion) { .collect::>(); // check validity - runtime::Builder::new_multi_thread().enable_all().build().unwrap().block_on(async { + runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { for (path, request) in &data { let r = oxc_resolver().resolve(path, request).await; if !r.is_ok() { @@ -124,35 +124,49 @@ fn bench_resolver(c: &mut Criterion) { let mut group = c.benchmark_group("resolver"); + // force to use four threads + rayon::ThreadPoolBuilder::new() + .num_threads(4) + .build_global() + .expect("Failed to build global thread pool"); + group.bench_with_input(BenchmarkId::from_parameter("single-thread"), &data, |b, data| { let runner = runtime::Builder::new_current_thread().build().expect("failed to create tokio runtime"); - - b.to_async(runner).iter(|| async { - let oxc_resolver = oxc_resolver(); - for (path, request) in data { - _ = oxc_resolver.resolve(path, request).await; - } - }); + let oxc_resolver = oxc_resolver(); + + b.to_async(runner).iter_with_setup( + || { + oxc_resolver.clear_cache(); + }, + |_| async { + for (path, request) in data { + _ = oxc_resolver.resolve(path, request).await; + } + }, + ); }); group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); + let oxc_resolver = Arc::new(oxc_resolver()); - b.to_async(runner).iter(|| async { - let mut join_set = JoinSet::new(); - let oxc_resolver = Arc::new(oxc_resolver()); - - data.iter().for_each(|(path, request)| { - join_set.spawn(create_async_resolve_task( - oxc_resolver.clone(), - path.to_path_buf(), - request.to_string(), - )); - }); - - join_set.join_all().await; - }); + b.to_async(runner).iter_with_setup( + || { + oxc_resolver.clear_cache(); + }, + |_| async { + let mut join_set = JoinSet::new(); + data.iter().for_each(|(path, request)| { + join_set.spawn(create_async_resolve_task( + oxc_resolver.clone(), + path.to_path_buf(), + request.to_string(), + )); + }); + join_set.join_all().await; + }, + ); }); group.bench_with_input( @@ -162,17 +176,22 @@ fn bench_resolver(c: &mut Criterion) { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); let oxc_resolver = oxc_resolver(); - b.to_async(runner).iter(|| async { - for i in data.clone() { - assert!( - oxc_resolver - .resolve(&symlink_test_dir, &format!("./file{i}")) - .await - .is_ok(), - "file{i}.js" - ); - } - }); + b.to_async(runner).iter_with_setup( + || { + oxc_resolver.clear_cache(); + }, + |_| async { + for i in data.clone() { + assert!( + oxc_resolver + .resolve(&symlink_test_dir, &format!("./file{i}")) + .await + .is_ok(), + "file{i}.js" + ); + } + }, + ); }, ); From ade28bf349395be070bd64f641dc32c822e294c9 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 14:39:42 +0800 Subject: [PATCH 30/38] fix: Cargo.lock --- Cargo.lock | 95 ++++-------------------------------------------------- 1 file changed, 7 insertions(+), 88 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 9ab66dca..83c65585 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -125,15 +125,11 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "1.3.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" [[package]] -name = "bitflags" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" name = "bumpalo" version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -208,18 +204,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.32" +version = "4.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" +checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.32" +version = "4.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" +checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489" dependencies = [ "anstyle", "clap_lex", @@ -250,42 +246,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "codspeed-criterion-compat" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5926ca63222a35b9a2299adcaafecf596efe20a9a2048e4a81cb2fc3463b4a8" -dependencies = [ - "codspeed", - "codspeed-criterion-compat-walltime", - "colored", -] - -[[package]] -name = "codspeed-criterion-compat-walltime" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbae4da05076cbc673e242400ac8f4353bdb686e48020edc6e36a5c36ae0878e" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "codspeed", - "criterion-plot", - "is-terminal", - "itertools", - "num-traits", - "once_cell", - "oorandom", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "walkdir", -] - [[package]] name = "codspeed-criterion-compat" version = "2.9.1" @@ -694,12 +654,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" -[[package]] -name = "hermit-abi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" - [[package]] name = "hex" version = "0.4.3" @@ -758,26 +712,6 @@ dependencies = [ "serde", ] -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "is-terminal" version = "0.4.16" @@ -1540,15 +1474,6 @@ dependencies = [ "wit-bindgen-rt", ] -[[package]] -name = "wasi" -version = "0.14.2+wasi-0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3" -dependencies = [ - "wit-bindgen-rt", -] - [[package]] name = "wasm-bindgen" version = "0.2.100" @@ -1704,17 +1629,11 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "windows_x86_64_msvc" -version = "0.52.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" - [[package]] name = "wit-bindgen-rt" version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags 2.6.0", + "bitflags", ] From d6e0051ed39ce8745b8449422f88dee2f62c0ece Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 14:55:50 +0800 Subject: [PATCH 31/38] test: move back symbol link validating --- benches/resolver.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/benches/resolver.rs b/benches/resolver.rs index 683056e1..4a6fa026 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -123,6 +123,16 @@ fn bench_resolver(c: &mut Criterion) { let symlinks_range = 0u32..10000; + // check validity + runtime::Builder::new_current_thread().enable_all().build().unwrap().block_on(async { + for i in symlinks_range.clone() { + assert!( + oxc_resolver().resolve(&symlink_test_dir, &format!("./file{i}")).await.is_ok(), + "file{i}.js" + ); + } + }); + let mut group = c.benchmark_group("resolver"); // force to use four threads From d89ce1b5b7dcb3096da4699f7758aeee0eaeb1a6 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 14:57:25 +0800 Subject: [PATCH 32/38] chore: pass wasm check --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index d30e6da9..a5981352 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -97,7 +97,7 @@ async-trait = "0.1.88" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] tokio = { version = "1", default-features = false, features = ["sync", "rt-multi-thread", "macros", "fs"] } [target.'cfg(target_arch = "wasm32")'.dependencies] -tokio = { version = "1", default-features = false, features = ["sync", "rt-multi-thread", "macros" ]} +tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros" ]} [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system From 9f80d3176b721545802cbe46fc16bca4950bed3b Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 15:35:51 +0800 Subject: [PATCH 33/38] chore: fix license check --- Cargo.lock | 487 +++++++++++++++++++++++++++-------------------------- Cargo.toml | 6 +- 2 files changed, 252 insertions(+), 241 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 83c65585..44ae99ff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 3 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "6e4503c46a5c0c7844e948c9a4d6acd9f50cccb4de1c48eb9e291ea17470c678" dependencies = [ "gimli", ] @@ -17,12 +17,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "adler2" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" - [[package]] name = "aho-corasick" version = "1.1.3" @@ -83,23 +77,23 @@ dependencies = [ [[package]] name = "autocfg" -version = "1.4.0" +version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" [[package]] name = "backtrace" -version = "0.3.74" +version = "0.3.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +checksum = "5cc23269a4f8976d0a4d2e7109211a419fe30e8d88d677cd60b6bc79c5732e0a" dependencies = [ "addr2line", + "cc", "cfg-if", "libc", - "miniz_oxide 0.8.5", + "miniz_oxide", "object", "rustc-demangle", - "windows-targets", ] [[package]] @@ -125,15 +119,21 @@ checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" [[package]] name = "bitflags" -version = "2.9.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" [[package]] name = "bumpalo" -version = "3.17.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" [[package]] name = "byteorder" @@ -149,12 +149,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.17" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" -dependencies = [ - "shlex", -] +checksum = "eaff6f8ce506b9773fa786672d63fc7a191ffea1be33f72bbd4aeacefca9ffc8" [[package]] name = "cfg-if" @@ -164,15 +161,15 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.38" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" dependencies = [ "android-tzdata", "iana-time-zone", "num-traits", "serde", - "windows-link", + "windows-targets 0.52.6", ] [[package]] @@ -288,12 +285,12 @@ dependencies = [ [[package]] name = "colored" -version = "2.2.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" dependencies = [ "lazy_static", - "windows-sys", + "windows-sys 0.48.0", ] [[package]] @@ -307,18 +304,18 @@ dependencies = [ [[package]] name = "convert_case" -version = "0.8.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baaaa0ecca5b51987b9423ccdc971514dd8b0bb7b4060b983d3664dad3f1f89f" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" dependencies = [ "unicode-segmentation", ] [[package]] name = "core-foundation-sys" -version = "0.8.7" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "criterion-plot" @@ -332,9 +329,9 @@ dependencies = [ [[package]] name = "crossbeam-deque" -version = "0.8.6" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ "crossbeam-epoch", "crossbeam-utils", @@ -351,32 +348,26 @@ dependencies = [ [[package]] name = "crossbeam-utils" -version = "0.8.21" +version = "0.8.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "ctor" -version = "0.4.1" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e9666f4a9a948d4f1dff0c08a4512b0f7c86414b23960104c243c10d79f4c3" +checksum = "edb49164822f3ee45b17acd4a208cfc1251410cf0cad9a833234c9890774dd9f" dependencies = [ - "ctor-proc-macro", - "dtor", + "quote", + "syn", ] -[[package]] -name = "ctor-proc-macro" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f211af61d8efdd104f96e57adf5e426ba1bc3ed7a4ead616e15e5881fd79c4d" - [[package]] name = "darling" version = "0.20.10" @@ -414,9 +405,9 @@ dependencies = [ [[package]] name = "dashmap" -version = "6.1.0" +version = "6.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +checksum = "804c8821570c3f8b70230c2ba75ffa5c0f9a4189b9a432b6656c536712acae28" dependencies = [ "cfg-if", "crossbeam-utils", @@ -428,9 +419,9 @@ dependencies = [ [[package]] name = "deranged" -version = "0.4.1" +version = "0.3.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" dependencies = [ "powerfmt", "serde", @@ -438,28 +429,13 @@ dependencies = [ [[package]] name = "document-features" -version = "0.2.11" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95249b50c6c185bee49034bcb378a49dc2b5dff0be90ff6616d31d64febab05d" +checksum = "cb6969eaabd2421f8a2775cfd2471a2b634372b4a25d41e3bd647b79912850a0" dependencies = [ "litrs", ] -[[package]] -name = "dtor" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "222ef136a1c687d4aa0395c175f2c4586e379924c352fd02f7870cf7de783c23" -dependencies = [ - "dtor-proc-macro", -] - -[[package]] -name = "dtor-proc-macro" -version = "0.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7454e41ff9012c00d53cf7f475c5e3afa3b91b7c90568495495e8d9bf47a1055" - [[package]] name = "dunce" version = "1.0.5" @@ -468,9 +444,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.15.0" +version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" [[package]] name = "endian-type" @@ -480,9 +456,9 @@ checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" [[package]] name = "equivalent" -version = "1.0.2" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" [[package]] name = "fancy-regex" @@ -497,14 +473,14 @@ dependencies = [ [[package]] name = "filetime" -version = "0.2.25" +version = "0.2.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +checksum = "1ee447700ac8aa0b2f2bd7bc4462ad686ba06baa6727ac149a2d6277f0d240fd" dependencies = [ "cfg-if", "libc", - "libredox", - "windows-sys", + "redox_syscall 0.4.1", + "windows-sys 0.52.0", ] [[package]] @@ -616,15 +592,15 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "40ecd4077b5ae9fd2e9e169b102c6c330d0605168eb0e8bf79952b256dbefffd" [[package]] name = "half" -version = "2.5.0" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7db2ff139bba50379da6aa0766b52fdcb62cb5b263009b09ed58ba604e14bbd1" +checksum = "6dd08c532ae367adf81c312a4580bc67f1d0fe8bc9c460520283f4c0ff277888" dependencies = [ "cfg-if", "crunchy", @@ -662,15 +638,14 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" [[package]] name = "iana-time-zone" -version = "0.1.62" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", - "log", "wasm-bindgen", "windows-core", ] @@ -703,9 +678,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.8.0" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058" +checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" dependencies = [ "equivalent", "hashbrown 0.15.2", @@ -720,7 +695,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi", "libc", - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -734,17 +709,16 @@ dependencies = [ [[package]] name = "itoa" -version = "1.0.15" +version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" [[package]] name = "js-sys" -version = "0.3.77" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ - "once_cell", "wasm-bindgen", ] @@ -765,29 +739,18 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.171" +version = "0.2.155" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" [[package]] name = "libloading" -version = "0.8.6" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34" +checksum = "e310b3a6b5907f99202fcdb4960ff45b93735d7c7d96b760fcff8db2dc0e103d" dependencies = [ "cfg-if", - "windows-targets", -] - -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags", - "libc", - "redox_syscall", + "windows-targets 0.52.6", ] [[package]] @@ -808,9 +771,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.27" +version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13dc2df351e3202783a1fe0d44375f7295ffb4049267b0f3018346dc122a1d94" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" [[package]] name = "memchr" @@ -827,25 +790,17 @@ dependencies = [ "adler", ] -[[package]] -name = "miniz_oxide" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5" -dependencies = [ - "adler2", -] - [[package]] name = "napi" -version = "3.0.0-alpha.33" +version = "3.0.0-alpha.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c857a2b38c994db8bec785554ab4216d45ad63469832070c86a992be0b5491ad" +checksum = "4ec04344cc540f5897e97c9821ab99e7eb276b4dca6f3e6e441dfa72e5bcde70" dependencies = [ - "bitflags", + "bitflags 2.6.0", "ctor", "napi-build", "napi-sys", + "once_cell", "serde", "serde_json", "tokio", @@ -853,16 +808,17 @@ dependencies = [ [[package]] name = "napi-build" -version = "2.1.6" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e28acfa557c083f6e254a786e01ba253fc56f18ee000afcd4f79af735f73a6da" +checksum = "e1c0f5d67ee408a4685b61f5ab7e58605c8ae3f2b4189f0127d804ff13d5560a" [[package]] name = "napi-derive" -version = "3.0.0-alpha.29" +version = "3.0.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7165d931d54f68115e651330d5fe0ae0081133d3f4ee3ab55b0b808f0c23f71" +checksum = "1c6240c4ddca592cde608bbfa26e2af397c3596e413a0c65c9bbcb65c2f1e485" dependencies = [ + "cfg-if", "convert_case", "napi-derive-backend", "proc-macro2", @@ -872,22 +828,24 @@ dependencies = [ [[package]] name = "napi-derive-backend" -version = "2.0.0-alpha.28" +version = "2.0.0-alpha.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce3f36354262054df8e1c3a73bdcd36ea13f130feb1e4d86b67cab9e10d6ef6d" +checksum = "b32dcc50065508fe2f387076c17adbdf10e038d1c080d48b10196813d94ac6a8" dependencies = [ "convert_case", + "once_cell", "proc-macro2", "quote", + "regex", "semver", "syn", ] [[package]] name = "napi-sys" -version = "3.0.0-alpha.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4cc061b99c514ad4b7abc99d4db1ca24b9542b7ff48b4760bd9f82b24611534d" +checksum = "427802e8ec3a734331fec1035594a210ce1ff4dc5bc1950530920ab717964ea3" dependencies = [ "libloading", ] @@ -933,15 +891,15 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.21.1" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75b0bedcc4fe52caa0e03d9f1151a323e4aa5e2d78ba3580400cd3c9e2bc4bc" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "oorandom" -version = "11.1.5" +version = "11.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6790f58c7ff633d8771f42965289203411a5e5c68388703c06e14f24770b41e" +checksum = "b410bbe7e14ab526a0e86877eb47c6996a2bd7746f027ba551028c925390e4e9" [[package]] name = "parking_lot_core" @@ -951,9 +909,9 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.2", "smallvec", - "windows-targets", + "windows-targets 0.52.6", ] [[package]] @@ -964,15 +922,15 @@ checksum = "1e91099d4268b0e11973f036e885d652fb0b21fedcf69738c627f94db6a44f42" [[package]] name = "pathdiff" -version = "0.2.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df94ce210e5bc13cb6651479fa48d14f601d9858cfe0467f43ae157023b938d3" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "pin-project-lite" -version = "0.2.16" +version = "0.2.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" [[package]] name = "pin-utils" @@ -990,9 +948,9 @@ dependencies = [ "byteorder", "concurrent_lru", "fancy-regex", - "indexmap 2.8.0", + "indexmap 2.7.1", "lazy_static", - "miniz_oxide 0.7.4", + "miniz_oxide", "pathdiff", "regex", "serde", @@ -1018,9 +976,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.40" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" dependencies = [ "proc-macro2", ] @@ -1063,18 +1021,27 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.10" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", +] + +[[package]] +name = "redox_syscall" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c82cf8cff14456045f55ec4241383baeff27af886adb72ffb2162f99911de0fd" +dependencies = [ + "bitflags 2.6.0", ] [[package]] name = "regex" -version = "1.11.1" +version = "1.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" dependencies = [ "aho-corasick", "memchr", @@ -1084,9 +1051,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.9" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" dependencies = [ "aho-corasick", "memchr", @@ -1095,9 +1062,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.5" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" +checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" [[package]] name = "rspack_napi_resolver" @@ -1121,7 +1088,7 @@ dependencies = [ "document-features", "dunce", "futures", - "indexmap 2.8.0", + "indexmap 2.7.1", "json-strip-comments", "normalize-path", "pnp", @@ -1143,21 +1110,15 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "2.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" - -[[package]] -name = "rustversion" -version = "1.0.20" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "ryu" -version = "1.0.20" +version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" [[package]] name = "same-file" @@ -1176,9 +1137,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "semver" -version = "1.0.26" +version = "1.0.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" [[package]] name = "serde" @@ -1206,7 +1167,7 @@ version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ - "indexmap 2.8.0", + "indexmap 2.7.1", "itoa", "memchr", "ryu", @@ -1215,15 +1176,15 @@ dependencies = [ [[package]] name = "serde_with" -version = "3.12.0" +version = "3.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6b6f7f2fcb69f747921f79f3926bd1e203fce4fef62c268dd3abfb6d86029aa" +checksum = "e73139bc5ec2d45e6c5fd85be5a46949c1c39a4c18e56915f5eb4c12f975e377" dependencies = [ "base64", "chrono", "hex", "indexmap 1.9.3", - "indexmap 2.8.0", + "indexmap 2.7.1", "serde", "serde_derive", "serde_json", @@ -1233,9 +1194,9 @@ dependencies = [ [[package]] name = "serde_with_macros" -version = "3.12.0" +version = "3.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d00caa5193a3c8362ac2b73be6b9e768aa5a4b2f721d8f4b339600c3cb51f8e" +checksum = "b80d3d6b56b64335c0180e5ffde23b3c5e08c14c585b51a15bd0e95393f46703" dependencies = [ "darling", "proc-macro2", @@ -1252,12 +1213,6 @@ dependencies = [ "lazy_static", ] -[[package]] -name = "shlex" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" - [[package]] name = "slab" version = "0.4.9" @@ -1269,9 +1224,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.14.0" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "strsim" @@ -1292,18 +1247,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.69" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.69" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -1322,9 +1277,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.41" +version = "0.3.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a7619e19bc266e0f9c5e6686659d394bc57973859340060a69221e57dbc0c40" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" dependencies = [ "deranged", "itoa", @@ -1337,15 +1292,15 @@ dependencies = [ [[package]] name = "time-core" -version = "0.1.4" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9e9a38711f559d9e3ce1cdb06dd7c5b8ea546bc90052da6d06bb76da74bb07c" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.22" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3526739392ec93fd8b359c8e98514cb3e8e021beb4e5f597b00a0221f8ed8a49" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" dependencies = [ "num-conv", "time-core", @@ -1385,9 +1340,9 @@ dependencies = [ [[package]] name = "tracing" -version = "0.1.41" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ "pin-project-lite", "tracing-attributes", @@ -1396,9 +1351,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.28" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", @@ -1407,18 +1362,18 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.33" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", ] [[package]] name = "tracing-subscriber" -version = "0.3.19" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "sharded-slab", "thread_local", @@ -1427,15 +1382,15 @@ dependencies = [ [[package]] name = "unicode-ident" -version = "1.0.18" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a5f39404a5da50712a4c1eecf25e90dd62b613502b7e925fd4e4d19b5c96512" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-segmentation" -version = "1.12.0" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" +checksum = "d4c87d22b6e3f4a18d4d40ef354e97c90fcb14dd91d7dc0aa9d8a1172ebf7202" [[package]] name = "uuid" @@ -1448,9 +1403,9 @@ dependencies = [ [[package]] name = "vfs" -version = "0.12.1" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ec343ec20aa715908fd028a4b8e7c99a349d13143224222e4d61c316d1e7f0a" +checksum = "654cd097e182a71dbf899178e6b5662c2157dd0b8afd5975de18008f6fc173d1" dependencies = [ "filetime", ] @@ -1476,24 +1431,23 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.100" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", - "once_cell", - "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.100" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1502,9 +1456,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.100" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1512,9 +1466,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.100" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", @@ -1525,20 +1479,17 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.100" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" -dependencies = [ - "unicode-ident", -] +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "winapi-util" -version = "0.1.9" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" dependencies = [ - "windows-sys", + "windows-sys 0.52.0", ] [[package]] @@ -1547,22 +1498,40 @@ version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", ] [[package]] -name = "windows-link" -version = "0.1.1" +name = "windows-sys" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] [[package]] name = "windows-sys" -version = "0.59.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] @@ -1571,28 +1540,46 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", "windows_i686_gnullvm", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", ] +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + [[package]] name = "windows_aarch64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + [[package]] name = "windows_aarch64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + [[package]] name = "windows_i686_gnu" version = "0.52.6" @@ -1605,24 +1592,48 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + [[package]] name = "windows_i686_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + [[package]] name = "windows_x86_64_gnu" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + [[package]] name = "windows_x86_64_gnullvm" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + [[package]] name = "windows_x86_64_msvc" version = "0.52.6" @@ -1635,5 +1646,5 @@ version = "0.39.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6f42320e61fe2cfd34354ecb597f86f413484a798ba44a8ca1165c58d42da6c1" dependencies = [ - "bitflags", + "bitflags 2.6.0", ] diff --git a/Cargo.toml b/Cargo.toml index a5981352..10a86728 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -92,12 +92,12 @@ pnp = { version = "0.9.1", optional = true } document-features = { version = "0.2.8", optional = true } futures = "0.3.31" -async-trait = "0.1.88" +async-trait = "0.1.84" [target.'cfg(not(target_arch = "wasm32"))'.dependencies] -tokio = { version = "1", default-features = false, features = ["sync", "rt-multi-thread", "macros", "fs"] } +tokio = { version = "1.42.0", default-features = false, features = ["sync", "rt-multi-thread", "macros", "fs"] } [target.'cfg(target_arch = "wasm32")'.dependencies] -tokio = { version = "1", default-features = false, features = ["sync", "rt", "macros" ]} +tokio = { version = "1.42.0", default-features = false, features = ["sync", "rt", "macros" ]} [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system From a10c0e21483b4d0e459bbfd6b0e126fbd2481b7a Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 16:17:06 +0800 Subject: [PATCH 34/38] chore: fallback to codspeed feature --- .github/workflows/benchmark.yml | 4 +- Cargo.lock | 137 ++++++-------------------------- Cargo.toml | 4 +- benches/resolver.rs | 3 +- 4 files changed, 29 insertions(+), 119 deletions(-) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 3b004780..6cc0a18e 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -43,8 +43,8 @@ jobs: - uses: ./.github/actions/pnpm - name: Build Benchmark env: - RUSTFLAGS: "-C debuginfo=1 -C strip=none -g" - run: cargo codspeed build + RUSTFLAGS: "-C debuginfo=1 -C strip=none -g --cfg codspeed" + run: cargo codspeed build --features codspeed - name: Run benchmark uses: CodSpeedHQ/action@v3 diff --git a/Cargo.lock b/Cargo.lock index 44ae99ff..c8be3db9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -43,15 +43,9 @@ dependencies = [ [[package]] name = "anes" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b46cbb362ab8752921c97e041f5e366ee6297bd428a31275b9fcf1e380f7299" - -[[package]] -name = "anstyle" -version = "1.0.10" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" +checksum = "735d4f398ca57cfa2880225c2bf81c3b9af3be5bb22e44ae70118dad38713e84" [[package]] name = "arca" @@ -129,6 +123,12 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "bpaf" +version = "0.9.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4848ed5727d39a7573551c205bcb1ccd88c8cad4ed2c80f62e2316f208196b8d" + [[package]] name = "bumpalo" version = "3.16.0" @@ -199,31 +199,6 @@ dependencies = [ "half", ] -[[package]] -name = "clap" -version = "4.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e958897981290da2a852763fe9cdb89cd36977a5d729023127095fa94d95e2ff" -dependencies = [ - "clap_builder", -] - -[[package]] -name = "clap_builder" -version = "4.5.34" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83b0f35019843db2160b5bb19ae09b4e6411ac33fc6a712003c33e03090e2489" -dependencies = [ - "anstyle", - "clap_lex", -] - -[[package]] -name = "clap_lex" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" - [[package]] name = "clean-path" version = "0.2.1" @@ -243,46 +218,6 @@ dependencies = [ "uuid", ] -[[package]] -name = "codspeed-criterion-compat" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5926ca63222a35b9a2299adcaafecf596efe20a9a2048e4a81cb2fc3463b4a8" -dependencies = [ - "codspeed", - "codspeed-criterion-compat-walltime", - "colored", - "futures", - "tokio", -] - -[[package]] -name = "codspeed-criterion-compat-walltime" -version = "2.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbae4da05076cbc673e242400ac8f4353bdb686e48020edc6e36a5c36ae0878e" -dependencies = [ - "anes", - "cast", - "ciborium", - "clap", - "codspeed", - "criterion-plot", - "futures", - "is-terminal", - "itertools", - "num-traits", - "once_cell", - "oorandom", - "regex", - "serde", - "serde_derive", - "serde_json", - "tinytemplate", - "tokio", - "walkdir", -] - [[package]] name = "colored" version = "2.1.0" @@ -318,13 +253,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] -name = "criterion-plot" -version = "0.5.0" +name = "criterion2" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b50826342786a51a89e2da3a28f1c32b06e387201bc2d19791f622c673706b1" +checksum = "09db22066fd79bd628faf416dac96e44054deb00531601bcc20c6d12506b3701" dependencies = [ + "anes", + "bpaf", "cast", - "itertools", + "ciborium", + "codspeed", + "colored", + "num-traits", + "oorandom", + "serde", + "serde_json", + "tokio", + "walkdir", ] [[package]] @@ -624,12 +569,6 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" -[[package]] -name = "hermit-abi" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbd780fe5cc30f81464441920d82ac8740e2e46b29a6fad543ddd075229ce37e" - [[package]] name = "hex" version = "0.4.3" @@ -687,26 +626,6 @@ dependencies = [ "serde", ] -[[package]] -name = "is-terminal" -version = "0.4.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" -dependencies = [ - "hermit-abi", - "libc", - "windows-sys 0.52.0", -] - -[[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - [[package]] name = "itoa" version = "1.0.11" @@ -1083,7 +1002,7 @@ version = "0.5.3" dependencies = [ "async-trait", "cfg-if", - "codspeed-criterion-compat", + "criterion2", "dashmap", "document-features", "dunce", @@ -1306,16 +1225,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "tinytemplate" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be4d6b5f19ff7664e8c98d03e2139cb510db9b0a60b55f8e8709b689d939b6bc" -dependencies = [ - "serde", - "serde_json", -] - [[package]] name = "tokio" version = "1.44.1" diff --git a/Cargo.toml b/Cargo.toml index 10a86728..a3799953 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -102,7 +102,7 @@ tokio = { version = "1.42.0", default-features = false, features = ["sync", "rt" [dev-dependencies] vfs = "0.12.0" # for testing with in memory file system rayon = { version = "1.10.0" } -criterion2 = { version = "2.0.0", default-features = false, package = "codspeed-criterion-compat", features = ["async_tokio"]} +criterion2 = { version = "2.0.0", default-features = false, features = ["async_tokio"]} normalize-path = { version = "0.2.1" } [features] @@ -112,6 +112,8 @@ default = ["yarn_pnp"] package_json_raw_json_api = [] ## [Yarn Plug'n'Play](https://yarnpkg.com/features/pnp) yarn_pnp = ["pnp"] +# For codspeed benchmark +codspeed = ["criterion2/codspeed"] [package.metadata.docs.rs] all-features = true diff --git a/benches/resolver.rs b/benches/resolver.rs index 4a6fa026..fd8cd7dd 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -1,5 +1,4 @@ -use criterion2::{criterion_group, criterion_main, BenchmarkId, Criterion}; -use rayon::prelude::*; +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; use serde_json::Value; use std::fs::read_to_string; use std::future::Future; From 7da0b167dfd3e26f2c25ca94f30d9ee39f2a02ef Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 16:31:18 +0800 Subject: [PATCH 35/38] chore: try cargo bench --- .github/workflows/benchmark.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/benchmark.yml b/.github/workflows/benchmark.yml index 6cc0a18e..85f0f72f 100644 --- a/.github/workflows/benchmark.yml +++ b/.github/workflows/benchmark.yml @@ -34,6 +34,9 @@ jobs: - name: Setup benchmark data run: cd benches && pnpm install --ignore-workspace + - name: Cargo Bench + run: cargo bench + - uses: Boshen/setup-rust@main with: cache-key: benchmark From a2d052db7b898900ac9f98b3eeddabbfff2ed894 Mon Sep 17 00:00:00 2001 From: pshu Date: Thu, 27 Mar 2025 17:02:23 +0800 Subject: [PATCH 36/38] chore: try use `block_on` by self --- benches/resolver.rs | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/benches/resolver.rs b/benches/resolver.rs index fd8cd7dd..55d1dd05 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -161,20 +161,22 @@ fn bench_resolver(c: &mut Criterion) { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); let oxc_resolver = Arc::new(oxc_resolver()); - b.to_async(runner).iter_with_setup( + b.iter_with_setup( || { oxc_resolver.clear_cache(); }, - |_| async { - let mut join_set = JoinSet::new(); - data.iter().for_each(|(path, request)| { - join_set.spawn(create_async_resolve_task( - oxc_resolver.clone(), - path.to_path_buf(), - request.to_string(), - )); + |_| { + runner.block_on(async { + let mut join_set = JoinSet::new(); + data.iter().for_each(|(path, request)| { + join_set.spawn(create_async_resolve_task( + oxc_resolver.clone(), + path.to_path_buf(), + request.to_string(), + )); + }); + let _ = join_set.join_all().await; }); - join_set.join_all().await; }, ); }); From d10591689d4fe29f92aba206cda033471f81d42f Mon Sep 17 00:00:00 2001 From: pshu Date: Fri, 28 Mar 2025 07:20:49 +0800 Subject: [PATCH 37/38] fix: un-awaited code --- src/lib.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 2a84c734..8783137b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -977,12 +977,10 @@ impl ResolverGeneric { // but also `?` is a valid character in a path, so we should try from right to left. while let Some(s) = path_str { if let Some((before, _)) = s.rsplit_once('?') { - if (self.load_as_file_or_directory( - &self.cache.value(Path::new(before)), - "", - ctx, - )?) - .is_some() + if (self + .load_as_file_or_directory(&self.cache.value(Path::new(before)), "", ctx) + .await?) + .is_some() { return Ok(Some(cached_path.clone())); } From 7af89c3fe2a665a7a963ffd84e784edf3caae716 Mon Sep 17 00:00:00 2001 From: pshu Date: Fri, 28 Mar 2025 07:27:06 +0800 Subject: [PATCH 38/38] test: no code speed for mutli-thread testing --- benches/resolver.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/benches/resolver.rs b/benches/resolver.rs index 55d1dd05..a6925e9a 100644 --- a/benches/resolver.rs +++ b/benches/resolver.rs @@ -157,6 +157,7 @@ fn bench_resolver(c: &mut Criterion) { ); }); + #[cfg(not(feature = "codspeed"))] group.bench_with_input(BenchmarkId::from_parameter("multi-thread"), &data, |b, data| { let runner = runtime::Runtime::new().expect("failed to create tokio runtime"); let oxc_resolver = Arc::new(oxc_resolver()); @@ -207,6 +208,7 @@ fn bench_resolver(c: &mut Criterion) { }, ); + #[cfg(not(feature = "codspeed"))] group.bench_with_input( BenchmarkId::from_parameter("resolve from symlinks multi thread"), &symlinks_range,