From f7aeea69f8d53b4bbd7edfad507b9edb29e0a85c Mon Sep 17 00:00:00 2001 From: Shima Ryuhei <65934663+islandryu@users.noreply.github.com> Date: Mon, 16 Sep 2024 21:46:47 +0900 Subject: [PATCH 001/218] fix(create-turbo): Require specific argument for example option (#9147) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description When we forgot to add the example argument in create-turbo, example was treated as true. The error log below makes me a little confused. ``` shell vscode ➜ /workspaces $ npx create-turbo -e Need to install the following packages: create-turbo@2.1.2 Ok to proceed? (y) ? Where would you like to create your Turborepo? ./my-turborepo ? Which package manager do you want to use? npm >>> Could not locate an example named "true". It could be due to the following: 1. Your spelling of example "true" might be incorrect. 2. You might not be connected to the internet or you are behind a proxy. ``` I couldn't find a reason why the example argument is optional, so I'm making it require. ``` vscode ➜ /workspaces/turborepo (fix/create-turbo) $ ./packages/create-turbo/dist/cli.js -e error: option '-e, --example |' argument missing ``` ### Testing Instructions We can check the changes by running the CLI itself. Alternatively, if testing is required at the Commander level, I can implement it. ``` shell ./packages/create-turbo/dist/cli.js -e ``` --- packages/create-turbo/src/cli.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/create-turbo/src/cli.ts b/packages/create-turbo/src/cli.ts index 856b78938e423..1bc6c61614bb6 100644 --- a/packages/create-turbo/src/cli.ts +++ b/packages/create-turbo/src/cli.ts @@ -69,7 +69,7 @@ createTurboCli "Use a specific version of turbo (default: latest)" ) .option( - "-e, --example [name]|[github-url]", + "-e, --example |", ` An example to bootstrap the app with. You can use an example name from the official Turborepo repo or a GitHub URL. The URL can use From 87493994476d98a3a52e55489ba5ec53e30abd48 Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Mon, 16 Sep 2024 13:26:21 -0400 Subject: [PATCH 002/218] feat(turbo): COREPACK_HOME to default passthrough (#9151) ### Description Add `COREPACK_HOME` to default passthrough list ### Testing Instructions --- crates/turborepo-lib/src/task_hash.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/turborepo-lib/src/task_hash.rs b/crates/turborepo-lib/src/task_hash.rs index 90a585e5f989a..698bf4e06b673 100644 --- a/crates/turborepo-lib/src/task_hash.rs +++ b/crates/turborepo-lib/src/task_hash.rs @@ -472,6 +472,7 @@ impl<'a> TaskHasher<'a> { "PWD", "CI", "NODE_OPTIONS", + "COREPACK_HOME", "LD_LIBRARY_PATH", "DYLD_FALLBACK_LIBRARY_PATH", "LIBPATH", From c3b7be9d2b13324d76749e4bc684da7f649a3c2e Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Mon, 16 Sep 2024 14:20:13 -0400 Subject: [PATCH 003/218] fix(watch): await persistent run task instead of abort (#9152) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description This PR fixes an issue where the TUI was getting events from a previous run after an `update_tasks` call causing it to exit. One can tell this is happening by inspecting the logs: ``` 2024-09-16T13:17:16.509-0400 [DEBUG] turborepo_ui::tui::app: updating task list: ["docs#dev", "web#dev"] ... 2024-09-16T13:17:16.512-0400 [DEBUG] turborepo_ui::tui::app: finishing task web#dev ``` The TUI is receiving that `web#dev` finish event from the previous run which confuses the TUI as web#dev hasn't been started yet in this run. This appears to only happen for tasks that don't exit within a 500ms of receiving `SIGINT` and need to be forcibly killed. ### Testing Instructions Use `create-turbo` to create a basic repro. Change one of the dev scripts to have a long running `SIGINT` handler: ``` "dev": "trap 'sleep 5 && echo fin' SIGINT; next dev --turbo" ``` Observe that editing root `package.json` (just adding/changing `"description"` will do) while `turbo watch dev` is running results in a crash: Screenshot 2024-09-16 at 1 36 03 PM Checkout the changes in this PR and try the same thing. You should observe that `turbo_dev --skip-infer watch dev` no longer crashes on a root `package.json` change. Screenshot 2024-09-16 at 1 37 25 PM You can see that the `SIGINT` handler has not run as there is no `fin` displayed in the output on the restart. --- crates/turborepo-lib/src/run/watch.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index 7ba86ff5074a7..f72bd2b0b0c8b 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -337,7 +337,9 @@ impl WatchClient { { // Shut down the tasks for the run stopper.stop().await; - run_task.abort(); + // Run should exit shortly after we stop all child tasks, wait for it to finish + // to ensure all messages are flushed. + let _ = run_task.await; } if let Some(sender) = &self.ui_sender { let task_names = self.run.engine.tasks_with_command(&self.run.pkg_dep_graph); From 9b9ca56d59afc37ef3bd9ea700c0fe4d351de521 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 16 Sep 2024 15:06:48 -0400 Subject: [PATCH 004/218] fix(affected): include not committed changes in `--affected` (#9133) ### Description We were including new files that were not checked into git, but not changes to files already in git but not committed. ### Testing Instructions Added more testing to `affected.t` for both new files and existing files with new changes --------- Co-authored-by: Chris Olszewski --- crates/turborepo-lib/src/commands/config.rs | 2 +- crates/turborepo-lib/src/config/env.rs | 2 +- crates/turborepo-lib/src/config/mod.rs | 4 +- crates/turborepo-lib/src/opts.rs | 11 +- crates/turborepo-lib/src/query.rs | 2 - .../src/run/scope/change_detector.rs | 3 + crates/turborepo-lib/src/run/scope/filter.rs | 9 +- .../src/run/scope/target_selector.rs | 9 +- crates/turborepo-scm/src/git.rs | 42 +++-- turborepo-tests/integration/tests/affected.t | 149 ++++++++++++++---- turborepo-tests/integration/tests/config.t | 2 +- 11 files changed, 176 insertions(+), 59 deletions(-) diff --git a/crates/turborepo-lib/src/commands/config.rs b/crates/turborepo-lib/src/commands/config.rs index a5fc906554929..e43b2175aa37f 100644 --- a/crates/turborepo-lib/src/commands/config.rs +++ b/crates/turborepo-lib/src/commands/config.rs @@ -24,7 +24,7 @@ struct ConfigOutput<'a> { daemon: Option, env_mode: EnvMode, scm_base: Option<&'a str>, - scm_head: &'a str, + scm_head: Option<&'a str>, cache_dir: &'a Utf8Path, } diff --git a/crates/turborepo-lib/src/config/env.rs b/crates/turborepo-lib/src/config/env.rs index f70987712b9fd..bc7e08437eda4 100644 --- a/crates/turborepo-lib/src/config/env.rs +++ b/crates/turborepo-lib/src/config/env.rs @@ -380,7 +380,7 @@ mod test { assert_eq!(config.env_mode, None); assert!(!config.preflight()); assert_eq!(config.scm_base(), None); - assert_eq!(config.scm_head(), "HEAD"); + assert_eq!(config.scm_head(), None); assert_eq!(config.root_turbo_json_path, None); assert!(!config.force()); assert_eq!(config.log_order(), LogOrder::Auto); diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index c059333421446..a693b601466c6 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -316,8 +316,8 @@ impl ConfigurationOptions { non_empty_str(self.scm_base.as_deref()) } - pub fn scm_head(&self) -> &str { - non_empty_str(self.scm_head.as_deref()).unwrap_or("HEAD") + pub fn scm_head(&self) -> Option<&str> { + non_empty_str(self.scm_head.as_deref()) } pub fn allow_no_package_manager(&self) -> bool { diff --git a/crates/turborepo-lib/src/opts.rs b/crates/turborepo-lib/src/opts.rs index fdd20aa088be4..2442ba3c78326 100644 --- a/crates/turborepo-lib/src/opts.rs +++ b/crates/turborepo-lib/src/opts.rs @@ -310,7 +310,7 @@ pub struct ScopeOpts { pub pkg_inference_root: Option, pub global_deps: Vec, pub filter_patterns: Vec, - pub affected_range: Option<(Option, String)>, + pub affected_range: Option<(Option, Option)>, } impl<'a> TryFrom> for ScopeOpts { @@ -327,7 +327,10 @@ impl<'a> TryFrom> for ScopeOpts { let affected_range = inputs.execution_args.affected.then(|| { let scm_base = inputs.config.scm_base(); let scm_head = inputs.config.scm_head(); - (scm_base.map(|b| b.to_owned()), scm_head.to_string()) + ( + scm_base.map(|b| b.to_owned()), + scm_head.map(|h| h.to_string()), + ) }); Ok(Self { @@ -518,7 +521,9 @@ mod test { pkg_inference_root: None, global_deps: vec![], filter_patterns: opts_input.filter_patterns, - affected_range: opts_input.affected.map(|(base, head)| (Some(base), head)), + affected_range: opts_input + .affected + .map(|(base, head)| (Some(base), Some(head))), }; let opts = Opts { run_opts, diff --git a/crates/turborepo-lib/src/query.rs b/crates/turborepo-lib/src/query.rs index 64faef1a059f2..af3fe373827eb 100644 --- a/crates/turborepo-lib/src/query.rs +++ b/crates/turborepo-lib/src/query.rs @@ -242,8 +242,6 @@ impl Query { base: Option, head: Option, ) -> Result, Error> { - let base = base.map(|s| s.to_owned()); - let head = head.unwrap_or_else(|| "HEAD".to_string()); let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); diff --git a/crates/turborepo-lib/src/run/scope/change_detector.rs b/crates/turborepo-lib/src/run/scope/change_detector.rs index f7439c751b715..b2527a74cc40d 100644 --- a/crates/turborepo-lib/src/run/scope/change_detector.rs +++ b/crates/turborepo-lib/src/run/scope/change_detector.rs @@ -21,6 +21,7 @@ pub trait GitChangeDetector { to_ref: Option<&str>, include_uncommitted: bool, allow_unknown_objects: bool, + merge_base: bool, ) -> Result, ResolutionError>; } @@ -92,6 +93,7 @@ impl<'a> GitChangeDetector for ScopeChangeDetector<'a> { to_ref: Option<&str>, include_uncommitted: bool, allow_unknown_objects: bool, + merge_base: bool, ) -> Result, ResolutionError> { let changed_files = match self.scm.changed_files( self.turbo_root, @@ -99,6 +101,7 @@ impl<'a> GitChangeDetector for ScopeChangeDetector<'a> { to_ref, include_uncommitted, allow_unknown_objects, + merge_base, )? { ChangedFiles::All => { debug!("all packages changed"); diff --git a/crates/turborepo-lib/src/run/scope/filter.rs b/crates/turborepo-lib/src/run/scope/filter.rs index b16924d430ab1..331d53f0526f5 100644 --- a/crates/turborepo-lib/src/run/scope/filter.rs +++ b/crates/turborepo-lib/src/run/scope/filter.rs @@ -163,7 +163,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { /// It applies the following rules: pub(crate) fn resolve( &self, - affected: &Option<(Option, String)>, + affected: &Option<(Option, Option)>, patterns: &[String], ) -> Result<(HashSet, bool), ResolutionError> { // inference is None only if we are in the root @@ -185,7 +185,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn get_packages_from_patterns( &self, - affected: &Option<(Option, String)>, + affected: &Option<(Option, Option)>, patterns: &[String], ) -> Result, ResolutionError> { let mut selectors = patterns @@ -197,9 +197,10 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { selectors.push(TargetSelector { git_range: Some(GitRange { from_ref: from_ref.clone(), - to_ref: Some(to_ref.to_string()), + to_ref: to_ref.clone(), include_uncommitted: true, allow_unknown_objects: true, + merge_base: true, }), include_dependents: true, ..Default::default() @@ -549,6 +550,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { git_range.to_ref.as_deref(), git_range.include_uncommitted, git_range.allow_unknown_objects, + git_range.merge_base, ) } @@ -1266,6 +1268,7 @@ mod test { to: Option<&str>, _include_uncommitted: bool, _allow_unknown_objects: bool, + _merge_base: bool, ) -> Result, ResolutionError> { Ok(self .0 diff --git a/crates/turborepo-lib/src/run/scope/target_selector.rs b/crates/turborepo-lib/src/run/scope/target_selector.rs index 38845b0698967..cae2e70fa6d57 100644 --- a/crates/turborepo-lib/src/run/scope/target_selector.rs +++ b/crates/turborepo-lib/src/run/scope/target_selector.rs @@ -13,6 +13,9 @@ pub struct GitRange { // this is useful for shallow clones where objects may not exist. // When this happens, we assume that everything has changed. pub allow_unknown_objects: bool, + // Calculate diff between merge base of the two refs and the second ref + // (this is usually what you want for detecting changes) + pub merge_base: bool, } #[derive(Debug, Default, PartialEq)] @@ -159,6 +162,7 @@ impl FromStr for TargetSelector { to_ref: Some(b.to_string()), include_uncommitted: false, allow_unknown_objects: false, + merge_base: true, } } else { // If only the start of the range is specified, we assume that @@ -168,6 +172,7 @@ impl FromStr for TargetSelector { to_ref: None, include_uncommitted: true, allow_unknown_objects: false, + merge_base: false, } }; Some(git_range) @@ -254,13 +259,13 @@ mod test { #[test_case(".", TargetSelector { raw: ".".to_string(), parent_dir: Some(AnchoredSystemPathBuf::try_from(".").unwrap()), ..Default::default() }; "parent dir dot")] #[test_case("..", TargetSelector { raw: "..".to_string(), parent_dir: Some(AnchoredSystemPathBuf::try_from("..").unwrap()), ..Default::default() }; "parent dir dot dot")] #[test_case("[master]", TargetSelector { raw: "[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), ..Default::default() }; "square brackets master")] - #[test_case("[from...to]", TargetSelector { raw: "[from...to]".to_string(), git_range: Some(GitRange { from_ref: Some("from".to_string()), to_ref: Some("to".to_string()), ..Default::default() }), ..Default::default() }; "[from...to]")] + #[test_case("[from...to]", TargetSelector { raw: "[from...to]".to_string(), git_range: Some(GitRange { from_ref: Some("from".to_string()), to_ref: Some("to".to_string()), merge_base: true, ..Default::default() }), ..Default::default() }; "[from...to]")] #[test_case("{foo}[master]", TargetSelector { raw: "{foo}[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), parent_dir: Some(AnchoredSystemPathBuf::try_from("foo").unwrap()), ..Default::default() }; "{foo}[master]")] #[test_case("pattern{foo}[master]", TargetSelector { raw: "pattern{foo}[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), parent_dir: Some(AnchoredSystemPathBuf::try_from("foo").unwrap()), name_pattern: "pattern".to_string(), ..Default::default() }; "pattern{foo}[master]")] #[test_case("[master]...", TargetSelector { raw: "[master]...".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), include_dependencies: true, ..Default::default() }; "square brackets master dot dot dot")] #[test_case("...[master]", TargetSelector { raw: "...[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), include_dependents: true, ..Default::default() }; "dot dot dot master square brackets")] #[test_case("...[master]...", TargetSelector { raw: "...[master]...".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), include_dependencies: true, include_dependents: true, ..Default::default() }; "dot dot dot master square brackets dot dot dot")] - #[test_case("...[from...to]...", TargetSelector { raw: "...[from...to]...".to_string(), git_range: Some(GitRange { from_ref: Some("from".to_string()), to_ref: Some("to".to_string()), ..Default::default() }), include_dependencies: true, include_dependents: true, ..Default::default() }; "dot dot dot [from...to] dot dot dot")] + #[test_case("...[from...to]...", TargetSelector { raw: "...[from...to]...".to_string(), git_range: Some(GitRange { from_ref: Some("from".to_string()), to_ref: Some("to".to_string()), merge_base: true, ..Default::default() }), include_dependencies: true, include_dependents: true, ..Default::default() }; "dot dot dot [from...to] dot dot dot")] #[test_case("foo...[master]", TargetSelector { raw: "foo...[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), name_pattern: "foo".to_string(), match_dependencies: true, ..Default::default() }; "foo...[master]")] #[test_case("foo...[master]...", TargetSelector { raw: "foo...[master]...".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), name_pattern: "foo".to_string(), match_dependencies: true, include_dependencies: true, ..Default::default() }; "foo...[master] dot dot dot")] #[test_case("{foo}...[master]", TargetSelector { raw: "{foo}...[master]".to_string(), git_range: Some(GitRange { from_ref: Some("master".to_string()), to_ref: None, include_uncommitted: true, ..Default::default() }), parent_dir: Some(AnchoredSystemPathBuf::try_from("foo").unwrap()), match_dependencies: true, ..Default::default() }; " curly brackets foo...[master]")] diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index 30e22c42a21d7..ac475c49a2adf 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -35,6 +35,7 @@ impl SCM { to_commit: Option<&str>, include_uncommitted: bool, allow_unknown_objects: bool, + merge_base: bool, ) -> Result { fn unable_to_detect_range(error: impl std::error::Error) -> Result { warn!( @@ -45,7 +46,13 @@ impl SCM { } match self { Self::Git(git) => { - match git.changed_files(turbo_root, from_commit, to_commit, include_uncommitted) { + match git.changed_files( + turbo_root, + from_commit, + to_commit, + include_uncommitted, + merge_base, + ) { Ok(files) => Ok(ChangedFiles::Some(files)), Err(ref error @ Error::Git(ref message, _)) if allow_unknown_objects && message.contains("no merge base") => @@ -110,6 +117,7 @@ impl Git { from_commit: Option<&str>, to_commit: Option<&str>, include_uncommitted: bool, + merge_base: bool, ) -> Result, Error> { let turbo_root_relative_to_git_root = self.root.anchor(turbo_root)?; let pathspec = turbo_root_relative_to_git_root.as_str(); @@ -118,27 +126,23 @@ impl Git { let valid_from = self.resolve_base(from_commit)?; - if let Some(to_commit) = to_commit { - let output = self.execute_git_command( - &[ - "diff", - "--name-only", - &format!("{}...{}", valid_from, to_commit), - ], - pathspec, - )?; - - self.add_files_from_stdout(&mut files, turbo_root, output); + let mut args = if let Some(to_commit) = to_commit { + vec!["diff", "--name-only", valid_from, to_commit] } else { - let output = - self.execute_git_command(&["diff", "--name-only", valid_from], pathspec)?; + vec!["diff", "--name-only", valid_from] + }; - self.add_files_from_stdout(&mut files, turbo_root, output); + if merge_base { + args.push("--merge-base"); } + let output = self.execute_git_command(&args, pathspec)?; + self.add_files_from_stdout(&mut files, turbo_root, output); + // We only care about non-tracked files if we haven't specified both ends up the - // comparison or if we are using `--affected` + // comparison if include_uncommitted { + // Add untracked files, i.e. files that are not in git at all let output = self .execute_git_command(&["ls-files", "--others", "--exclude-standard"], pathspec)?; self.add_files_from_stdout(&mut files, turbo_root, output); @@ -281,12 +285,16 @@ mod tests { let scm = SCM::new(git_root); let turbo_root = AbsoluteSystemPathBuf::try_from(turbo_root.as_path())?; + // Replicating the `--filter` behavior where we only do a merge base + // if both ends of the git range are specified. + let merge_base = to_commit.is_some(); let ChangedFiles::Some(files) = scm.changed_files( &turbo_root, from_commit, to_commit, include_uncommitted, false, + merge_base, )? else { unreachable!("changed_files should always return Some"); @@ -849,7 +857,7 @@ mod tests { let scm = SCM::new(&root); let actual = scm - .changed_files(&root, None, Some("HEAD"), true, true) + .changed_files(&root, None, Some("HEAD"), true, true, false) .unwrap(); assert_matches!(actual, ChangedFiles::All); diff --git a/turborepo-tests/integration/tests/affected.t b/turborepo-tests/integration/tests/affected.t index cf42e7c012381..8828d73ddbcac 100644 --- a/turborepo-tests/integration/tests/affected.t +++ b/turborepo-tests/integration/tests/affected.t @@ -5,15 +5,69 @@ Create a new branch $ git checkout -b my-branch Switched to a new branch 'my-branch' -Edit a file that affects `my-app` - $ echo "foo" >> apps/my-app/index.js +Ensure that nothing is affected + $ ${TURBO} ls --affected + WARNING ls command is experimental and may change in the future + 0 no packages (npm) + + +Create a new file that affects `my-app` + $ echo "foo" > apps/my-app/new.js + +Validate that we only run `my-app#build` with change not committed + $ ${TURBO} run build --affected --log-order grouped + \xe2\x80\xa2 Packages in scope: my-app (esc) + \xe2\x80\xa2 Running build in 1 packages (esc) + \xe2\x80\xa2 Remote caching disabled (esc) + my-app:build: cache miss, executing 1b83c3b24476ec9c + my-app:build: + my-app:build: > build + my-app:build: > echo building + my-app:build: + my-app:build: building + + Tasks: 1 successful, 1 total + Cached: 0 cached, 1 total + Time:\s*[\.0-9]+m?s (re) + + + +Do the same thing with the `ls` command + $ ${TURBO} ls --affected + WARNING ls command is experimental and may change in the future + 1 package (npm) + + my-app apps[\/\\]my-app (re) + + + +Do the same thing with the `query` command + $ ${TURBO} query "query { affectedPackages { name } }" + WARNING query command is experimental and may change in the future + { + "data": { + "affectedPackages": [ + { + "name": "my-app" + } + ] + } + } + + +Remove the new file + $ rm apps/my-app/new.js + +Add field to `apps/my-app/package.json` + $ jq '. += {"description": "foo"}' apps/my-app/package.json | tr -d '\r' > apps/my-app/package.json.new + $ mv apps/my-app/package.json.new apps/my-app/package.json Validate that we only run `my-app#build` with change not committed $ ${TURBO} run build --affected --log-order grouped \xe2\x80\xa2 Packages in scope: my-app (esc) \xe2\x80\xa2 Running build in 1 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache miss, executing 97b34acb6e848096 + my-app:build: cache miss, executing c1189254892f813f my-app:build: my-app:build: > build my-app:build: > echo building @@ -55,7 +109,7 @@ Validate that we only run `my-app#build` with change committed \xe2\x80\xa2 Packages in scope: my-app (esc) \xe2\x80\xa2 Running build in 1 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache hit, replaying logs 97b34acb6e848096 + my-app:build: cache hit, replaying logs c1189254892f813f my-app:build: my-app:build: > build my-app:build: > echo building @@ -159,7 +213,7 @@ Run the build and expect only `my-app` to be affected, since between \xe2\x80\xa2 Packages in scope: my-app (esc) \xe2\x80\xa2 Running build in 1 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache hit, replaying logs 97b34acb6e848096 + my-app:build: cache hit, replaying logs c1189254892f813f my-app:build: my-app:build: > build my-app:build: > echo building @@ -170,6 +224,8 @@ Run the build and expect only `my-app` to be affected, since between Cached: 1 cached, 1 total Time:\s*[\.0-9]+m?s >>> FULL TURBO (re) + + Do the same thing with the `ls` command $ ${TURBO} ls --affected WARNING ls command is experimental and may change in the future @@ -199,33 +255,72 @@ Now do some magic to change the repo to be shallow $ git prune-packed Now try running `--affected` again, we should run all tasks - $ ${TURBO} run build --affected --log-order grouped - WARNING unable to detect git range, assuming all files have changed: git error: fatal: main...HEAD: no merge base + $ ${TURBO} run build --affected --dry-run json | jq '.tasks | map(.taskId)| sort' + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found - \xe2\x80\xa2 Packages in scope: //, another, my-app, util (esc) - \xe2\x80\xa2 Running build in 4 packages (esc) - \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache hit, replaying logs 97b34acb6e848096 - my-app:build: - my-app:build: > build - my-app:build: > echo building - my-app:build: - my-app:build: building - util:build: cache miss, executing bf1798d3e46e1b48 - util:build: - util:build: > build - util:build: > echo building - util:build: - util:build: building + [ + "another#build", + "my-app#build", + "util#build" + ] + +Do the same thing with the `ls` command + $ ${TURBO} ls --affected + WARNING ls command is experimental and may change in the future + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found - Tasks: 2 successful, 2 total - Cached: 1 cached, 2 total - Time:\s*[\.0-9]+m?s (re) + 3 packages (npm) + + another packages[\/\\]another (re) + my-app apps[\/\\]my-app (re) + util packages[\/\\]util (re) + + +Do the same thing with the `query` command + $ ${TURBO} query "query { affectedPackages { name } }" + WARNING query command is experimental and may change in the future + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found + + { + "data": { + "affectedPackages": [ + { + "name": "//" + }, + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } + } + +Now do some magic to change the repo to be shallow + $ SHALLOW=$(git rev-parse --show-toplevel)/.git/shallow + $ git rev-parse HEAD > "$SHALLOW" + $ git reflog expire --expire=0 + $ git prune + $ git prune-packed + +Now try running `--affected` again, we should run all tasks + $ ${TURBO} run build --affected --dry-run json | jq '.tasks | map(.taskId)| sort' + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found + [ + "another#build", + "my-app#build", + "util#build" + ] + Do the same thing with the `ls` command $ ${TURBO} ls --affected WARNING ls command is experimental and may change in the future - WARNING unable to detect git range, assuming all files have changed: git error: fatal: main...HEAD: no merge base + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found 3 packages (npm) @@ -237,7 +332,7 @@ Do the same thing with the `ls` command Do the same thing with the `query` command $ ${TURBO} query "query { affectedPackages { name } }" WARNING query command is experimental and may change in the future - WARNING unable to detect git range, assuming all files have changed: git error: fatal: main...HEAD: no merge base + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found { "data": { diff --git a/turborepo-tests/integration/tests/config.t b/turborepo-tests/integration/tests/config.t index 3931257c1c9f7..a99d14f85db98 100644 --- a/turborepo-tests/integration/tests/config.t +++ b/turborepo-tests/integration/tests/config.t @@ -19,7 +19,7 @@ Run test run "daemon": null, "envMode": "strict", "scmBase": null, - "scmHead": "HEAD", + "scmHead": null, "cacheDir": ".turbo[\\/]+cache" (re) } From c2a51d8111af406ee46018ef265e34fc46e255ed Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 15:25:01 -0400 Subject: [PATCH 005/218] release(turborepo): 2.1.3-canary.0 (#9153) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 63e4a0de622ed..4f20e9f45d6b9 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 78277689a292e..f2e16f6fc6c06 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6cb6f2e3c97ba..a56dfd4d22375 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index bac6f51eae408..f650aa0c46a44 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 99cd7e3d55608..9368b6dedd9e8 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 2e42a56e39efe..47d3d801a8226 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 89185df86fb04..dd2020f45394a 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 63753e505c392..3cc1ec999299e 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index a691fc4a9a49e..cb4c625127af6 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.2", + "version": "2.1.3-canary.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.2", - "turbo-darwin-arm64": "2.1.2", - "turbo-linux-64": "2.1.2", - "turbo-linux-arm64": "2.1.2", - "turbo-windows-64": "2.1.2", - "turbo-windows-arm64": "2.1.2" + "turbo-darwin-64": "2.1.3-canary.0", + "turbo-darwin-arm64": "2.1.3-canary.0", + "turbo-linux-64": "2.1.3-canary.0", + "turbo-linux-arm64": "2.1.3-canary.0", + "turbo-windows-64": "2.1.3-canary.0", + "turbo-windows-arm64": "2.1.3-canary.0" } } diff --git a/version.txt b/version.txt index c9c94169c9e61..dee6ccfa15144 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.2 -latest +2.1.3-canary.0 +canary From d0f4a0a4e399f3ebcb5b468ce2f87f9d58689c8d Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 16 Sep 2024 15:32:46 -0400 Subject: [PATCH 006/218] refactor(query): make immediate dependencies default (#9114) ### Description We have a `dependencies` field on our `Package` type in `turbo query`. This returned all the transitive dependencies, i.e. the dependencies of the package's dependencies and their dependencies, and so on. This is a little confusing, so now we have explicit `directDependencies`, `indirectDependencies` and `allDependencies` fields. ### Testing Instructions Tests in `command-query.t` are updated. --- crates/turborepo-lib/src/query.rs | 176 ++++++++++++++---- .../integration/tests/command-query.t | 44 ++++- 2 files changed, 175 insertions(+), 45 deletions(-) diff --git a/crates/turborepo-lib/src/query.rs b/crates/turborepo-lib/src/query.rs index af3fe373827eb..b939b898663c5 100644 --- a/crates/turborepo-lib/src/query.rs +++ b/crates/turborepo-lib/src/query.rs @@ -44,40 +44,56 @@ struct Package { } impl Package { - fn immediate_dependents_count(&self) -> usize { + fn direct_dependents_count(&self) -> usize { self.run .pkg_dep_graph() .immediate_ancestors(&PackageNode::Workspace(self.name.clone())) .map_or(0, |pkgs| pkgs.len()) } - fn immediate_dependencies_count(&self) -> usize { + fn direct_dependencies_count(&self) -> usize { self.run .pkg_dep_graph() .immediate_dependencies(&PackageNode::Workspace(self.name.clone())) .map_or(0, |pkgs| pkgs.len()) } - fn dependent_count(&self) -> usize { + fn indirect_dependents_count(&self) -> usize { let node: PackageNode = PackageNode::Workspace(self.name.clone()); - self.run.pkg_dep_graph().ancestors(&node).len() + self.run.pkg_dep_graph().ancestors(&node).len() - self.direct_dependents_count() } - fn dependency_count(&self) -> usize { + fn indirect_dependencies_count(&self) -> usize { let node: PackageNode = PackageNode::Workspace(self.name.clone()); - self.run.pkg_dep_graph().dependencies(&node).len() + self.run.pkg_dep_graph().dependencies(&node).len() - self.direct_dependencies_count() + } + + fn all_dependents_count(&self) -> usize { + self.run + .pkg_dep_graph() + .ancestors(&PackageNode::Workspace(self.name.clone())) + .len() + } + + fn all_dependencies_count(&self) -> usize { + self.run + .pkg_dep_graph() + .dependencies(&PackageNode::Workspace(self.name.clone())) + .len() } } #[derive(Enum, Copy, Clone, Eq, PartialEq, Debug)] enum PackageFields { Name, - DependencyCount, - DependentCount, - ImmediateDependentCount, - ImmediateDependencyCount, + DirectDependencyCount, + DirectDependentCount, + IndirectDependentCount, + IndirectDependencyCount, + AllDependentCount, + AllDependencyCount, } #[derive(InputObject)] @@ -107,29 +123,41 @@ impl PackagePredicate { fn check_equals(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { (PackageFields::Name, Value::String(name)) => pkg.name.as_ref() == name, - (PackageFields::DependencyCount, Value::Number(n)) => { + (PackageFields::DirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependency_count() == n as usize + pkg.direct_dependencies_count() == n as usize } - (PackageFields::DependentCount, Value::Number(n)) => { + (PackageFields::DirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependent_count() == n as usize + pkg.direct_dependents_count() == n as usize } - (PackageFields::ImmediateDependentCount, Value::Number(n)) => { + (PackageFields::IndirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependents_count() == n as usize + pkg.indirect_dependents_count() == n as usize } - (PackageFields::ImmediateDependencyCount, Value::Number(n)) => { + (PackageFields::IndirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependencies_count() == n as usize + pkg.indirect_dependencies_count() == n as usize + } + (PackageFields::AllDependentCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.all_dependents_count() == n as usize + } + (PackageFields::AllDependencyCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.all_dependencies_count() == n as usize } _ => false, } @@ -137,29 +165,41 @@ impl PackagePredicate { fn check_greater_than(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { - (PackageFields::DependencyCount, Value::Number(n)) => { + (PackageFields::DirectDependencyCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.direct_dependencies_count() > n as usize + } + (PackageFields::DirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependency_count() > n as usize + pkg.direct_dependents_count() > n as usize } - (PackageFields::DependentCount, Value::Number(n)) => { + (PackageFields::IndirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependent_count() > n as usize + pkg.indirect_dependents_count() > n as usize } - (PackageFields::ImmediateDependentCount, Value::Number(n)) => { + (PackageFields::IndirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependents_count() > n as usize + pkg.indirect_dependencies_count() > n as usize } - (PackageFields::ImmediateDependencyCount, Value::Number(n)) => { + (PackageFields::AllDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependencies_count() > n as usize + pkg.all_dependents_count() > n as usize + } + (PackageFields::AllDependencyCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.all_dependencies_count() > n as usize } _ => false, } @@ -167,29 +207,41 @@ impl PackagePredicate { fn check_less_than(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { - (PackageFields::DependencyCount, Value::Number(n)) => { + (PackageFields::DirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependency_count() < n as usize + pkg.direct_dependencies_count() < n as usize } - (PackageFields::DependentCount, Value::Number(n)) => { + (PackageFields::DirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.dependent_count() < n as usize + pkg.direct_dependents_count() < n as usize } - (PackageFields::ImmediateDependentCount, Value::Number(n)) => { + (PackageFields::IndirectDependentCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependents_count() < n as usize + pkg.indirect_dependents_count() < n as usize } - (PackageFields::ImmediateDependencyCount, Value::Number(n)) => { + (PackageFields::IndirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; }; - pkg.immediate_dependencies_count() < n as usize + pkg.indirect_dependencies_count() < n as usize + } + (PackageFields::AllDependentCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.all_dependents_count() < n as usize + } + (PackageFields::AllDependencyCount, Value::Number(n)) => { + let Some(n) = n.as_u64() else { + return false; + }; + pkg.all_dependencies_count() < n as usize } _ => false, } @@ -317,7 +369,7 @@ impl Package { } /// The upstream packages that have this package as a direct dependency - async fn immediate_dependents(&self) -> Result, Error> { + async fn direct_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -329,11 +381,12 @@ impl Package { run: self.run.clone(), name: package.as_package_name().clone(), }) + .sorted_by(|a, b| a.name.cmp(&b.name)) .collect()) } /// The downstream packages that directly depend on this package - async fn immediate_dependencies(&self) -> Result, Error> { + async fn direct_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -345,18 +398,55 @@ impl Package { run: self.run.clone(), name: package.as_package_name().clone(), }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + async fn all_dependents(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .ancestors(&node) + .iter() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + async fn all_dependencies(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .dependencies(&node) + .iter() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) .collect()) } - /// The downstream packages that depend on this package, transitively - async fn dependents(&self) -> Result, Error> { + /// The downstream packages that depend on this package, indirectly + async fn indirect_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); + let immediate_dependents = self + .run + .pkg_dep_graph() + .immediate_ancestors(&node) + .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; Ok(self .run .pkg_dep_graph() .ancestors(&node) .iter() + .filter(|package| !immediate_dependents.contains(*package)) .map(|package| Package { run: self.run.clone(), name: package.as_package_name().clone(), @@ -365,15 +455,21 @@ impl Package { .collect()) } - /// The upstream packages that this package depends on, transitively - async fn dependencies(&self) -> Result, Error> { + /// The upstream packages that this package depends on, indirectly + async fn indirect_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); + let immediate_dependencies = self + .run + .pkg_dep_graph() + .immediate_dependencies(&node) + .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; Ok(self .run .pkg_dep_graph() .dependencies(&node) .iter() + .filter(|package| !immediate_dependencies.contains(*package)) .map(|package| Package { run: self.run.clone(), name: package.as_package_name().clone(), diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index 36721a091ca4f..9d1842ee72488 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -37,7 +37,7 @@ Query packages with equals filter } Query packages that have at least one dependent package - $ ${TURBO} query "query { packages(filter: { greaterThan: { field: DEPENDENT_COUNT, value: 0 } }) { name } }" | jq + $ ${TURBO} query "query { packages(filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 0 } }) { name } }" | jq WARNING query command is experimental and may change in the future { "data": { @@ -50,13 +50,13 @@ Query packages that have at least one dependent package } Get dependents of `util` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"util\" } }) { dependents { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"util\" } }) { directDependents { name } } }" | jq WARNING query command is experimental and may change in the future { "data": { "packages": [ { - "dependents": [ + "directDependents": [ { "name": "my-app" } @@ -67,13 +67,47 @@ Get dependents of `util` } Get dependencies of `my-app` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { dependencies { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { directDependencies { name } } }" | jq WARNING query command is experimental and may change in the future { "data": { "packages": [ { - "dependencies": [ + "directDependencies": [ + { + "name": "util" + } + ] + } + ] + } + } + +Get the indirect dependencies of `my-app` + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { indirectDependencies { name } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": [ + { + "indirectDependencies": [ + { + "name": "//" + } + ] + } + ] + } + } + +Get all dependencies of `my-app` + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { allDependencies { name } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": [ + { + "allDependencies": [ { "name": "//" }, From b382e7e584ba401062e270df94ab6fb8331bfbc1 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Tue, 17 Sep 2024 09:46:24 -0400 Subject: [PATCH 007/218] eslint plugin no-undeclared-env-vars should detect known framework variables (#9110) --- .vscode/tasks.json | 2 +- CONTRIBUTING.md | 2 +- cli/package.json | 6 +- crates/turborepo-lib/src/framework.rs | 146 +-- crates/turborepo-telemetry/src/events/task.rs | 4 +- .../using-environment-variables.mdx | 34 +- .../framework-inference/.eslintrc.js | 4 + .../apps/kitchen-sink/index.js | 3 + .../apps/kitchen-sink/package.json | 19 + .../framework-inference/apps/nextjs/index.js | 1 + .../apps/nextjs/package.json | 10 + .../framework-inference/apps/vite/index.js | 1 + .../apps/vite/package.json | 10 + .../framework-inference/package.json | 7 + .../framework-inference/turbo.json | 7 + .../eslint-plugin-turbo/__tests__/cwd.test.ts | 22 +- .../lib/no-undeclared-env-vars.test.ts | 1074 ----------------- .../no-undeclared-env-vars.commonjs.test.ts | 306 +++++ .../no-undeclared-env-vars.module.test.ts | 306 +++++ .../no-undeclared-env-vars.commonjs.test.ts | 77 ++ .../no-undeclared-env-vars.module.test.ts | 77 ++ .../no-undeclared-env-vars.commonjs.test.ts | 25 + .../no-undeclared-env-vars.module.test.ts | 25 + .../no-undeclared-env-vars.commonjs.test.ts | 132 ++ .../no-undeclared-env-vars.module.test.ts | 132 ++ packages/eslint-plugin-turbo/lib/index.ts | 2 - .../lib/rules/no-undeclared-env-vars.ts | 100 +- packages/eslint-plugin-turbo/package.json | 1 + packages/eslint-plugin-turbo/tsup.config.ts | 3 +- packages/turbo-benchmark/README.md | 2 +- packages/turbo-types/src/index.ts | 7 + packages/turbo-types/src/json/frameworks.json | 119 ++ packages/turbo-types/src/types/frameworks.ts | 11 + packages/turbo-utils/src/searchUp.ts | 10 + 34 files changed, 1453 insertions(+), 1234 deletions(-) create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/.eslintrc.js create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/index.js create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/package.json create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/index.js create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/package.json create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/index.js create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/package.json create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/package.json create mode 100644 packages/eslint-plugin-turbo/__fixtures__/framework-inference/turbo.json delete mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.commonjs.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.module.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.commonjs.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.module.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.commonjs.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.module.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.commonjs.test.ts create mode 100644 packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.module.test.ts create mode 100644 packages/turbo-types/src/json/frameworks.json create mode 100644 packages/turbo-types/src/types/frameworks.ts diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 08bf3bcb890b1..77c0a921b1352 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -4,7 +4,7 @@ { "type": "shell", "label": "prepare turbo", - "command": "cargo build -p turbo" + "command": "cargo build --package turbo" } ] } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf5d662a49aa3..2cebca83df1cd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,7 +39,7 @@ Dependencies Building -- Building `turbo` CLI: `cargo build -p turbo` +- Building `turbo` CLI: `cargo build --package turbo` - Using `turbo` to build `turbo` CLI: `./turbow.js` ### TLS Implementation diff --git a/cli/package.json b/cli/package.json index 430365fa92d32..deff9108f9185 100644 --- a/cli/package.json +++ b/cli/package.json @@ -3,8 +3,8 @@ "private": true, "version": "0.0.0", "scripts": { - "clean": "cargo clean -p turbo", - "build": "cargo build -p turbo", - "build:release": "cargo build -p turbo --profile release-turborepo" + "clean": "cargo clean --package turbo", + "build": "cargo build --package turbo", + "build:release": "cargo build --package turbo --profile release-turborepo" } } diff --git a/crates/turborepo-lib/src/framework.rs b/crates/turborepo-lib/src/framework.rs index 85d6aefd4d0b2..385d651e54d40 100644 --- a/crates/turborepo-lib/src/framework.rs +++ b/crates/turborepo-lib/src/framework.rs @@ -1,146 +1,48 @@ use std::sync::OnceLock; +use serde::Deserialize; use turborepo_repository::package_graph::PackageInfo; -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Deserialize)] +#[serde(rename_all = "camelCase")] enum Strategy { All, Some, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Deserialize)] +#[serde(rename_all = "camelCase")] struct Matcher { strategy: Strategy, - dependencies: Vec<&'static str>, + dependencies: Vec, } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Deserialize)] +#[serde(rename_all = "camelCase")] pub struct Framework { - slug: &'static str, - env_wildcards: Vec<&'static str>, + slug: String, + env_wildcards: Vec, dependency_match: Matcher, } impl Framework { - pub fn slug(&self) -> &'static str { - self.slug + pub fn slug(&self) -> String { + self.slug.clone() } - pub fn env_wildcards(&self) -> &[&'static str] { + pub fn env_wildcards(&self) -> &[String] { &self.env_wildcards } } -static FRAMEWORKS: OnceLock<[Framework; 13]> = OnceLock::new(); +static FRAMEWORKS: OnceLock> = OnceLock::new(); -fn get_frameworks() -> &'static [Framework] { +const FRAMEWORKS_JSON: &str = + include_str!("../../../packages/turbo-types/src/json/frameworks.json"); + +fn get_frameworks() -> &'static Vec { FRAMEWORKS.get_or_init(|| { - [ - Framework { - slug: "blitzjs", - env_wildcards: vec!["NEXT_PUBLIC_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["blitz"], - }, - }, - Framework { - slug: "nextjs", - env_wildcards: vec!["NEXT_PUBLIC_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["next"], - }, - }, - Framework { - slug: "gatsby", - env_wildcards: vec!["GATSBY_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["gatsby"], - }, - }, - Framework { - slug: "astro", - env_wildcards: vec!["PUBLIC_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["astro"], - }, - }, - Framework { - slug: "solidstart", - env_wildcards: vec!["VITE_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["solid-js", "solid-start"], - }, - }, - Framework { - slug: "vue", - env_wildcards: vec!["VUE_APP_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["@vue/cli-service"], - }, - }, - Framework { - slug: "sveltekit", - env_wildcards: vec!["VITE_*", "PUBLIC_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["@sveltejs/kit"], - }, - }, - Framework { - slug: "create-react-app", - env_wildcards: vec!["REACT_APP_*"], - dependency_match: Matcher { - strategy: Strategy::Some, - dependencies: vec!["react-scripts", "react-dev-utils"], - }, - }, - Framework { - slug: "nitro", - env_wildcards: vec!["NITRO_*"], - dependency_match: Matcher { - strategy: Strategy::Some, - dependencies: vec!["nitropack", "nitropack-nightly"], - }, - }, - Framework { - slug: "nuxtjs", - env_wildcards: vec!["NUXT_*", "NITRO_*"], - dependency_match: Matcher { - strategy: Strategy::Some, - dependencies: vec!["nuxt", "nuxt-edge", "nuxt3", "nuxt3-edge"], - }, - }, - Framework { - slug: "redwoodjs", - env_wildcards: vec!["REDWOOD_ENV_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["@redwoodjs/core"], - }, - }, - Framework { - slug: "vite", - env_wildcards: vec!["VITE_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["vite"], - }, - }, - Framework { - slug: "sanity", - env_wildcards: vec!["SANITY_STUDIO_*"], - dependency_match: Matcher { - strategy: Strategy::All, - dependencies: vec!["@sanity/cli"], - }, - }, - ] + serde_json::from_str(FRAMEWORKS_JSON).expect("Unable to parse embedded JSON") }) } @@ -159,16 +61,16 @@ impl Matcher { Strategy::All => self .dependencies .iter() - .all(|dep| deps.map_or(false, |deps| deps.contains_key(*dep))), + .all(|dep| deps.map_or(false, |deps| deps.contains_key(dep))), Strategy::Some => self .dependencies .iter() - .any(|dep| deps.map_or(false, |deps| deps.contains_key(*dep))), + .any(|dep| deps.map_or(false, |deps| deps.contains_key(dep))), } } } -pub fn infer_framework(workspace: &PackageInfo, is_monorepo: bool) -> Option<&'static Framework> { +pub fn infer_framework(workspace: &PackageInfo, is_monorepo: bool) -> Option<&Framework> { let frameworks = get_frameworks(); frameworks @@ -183,7 +85,7 @@ mod tests { use crate::framework::{get_frameworks, infer_framework, Framework}; - fn get_framework_by_slug(slug: &str) -> &'static Framework { + fn get_framework_by_slug(slug: &str) -> &Framework { get_frameworks() .iter() .find(|framework| framework.slug == slug) @@ -291,7 +193,7 @@ mod tests { )] fn test_infer_framework( workspace_info: PackageInfo, - expected: Option<&'static Framework>, + expected: Option<&Framework>, is_monorepo: bool, ) { let framework = infer_framework(&workspace_info, is_monorepo); diff --git a/crates/turborepo-telemetry/src/events/task.rs b/crates/turborepo-telemetry/src/events/task.rs index 08a97c49852e4..17ab9302cc354 100644 --- a/crates/turborepo-telemetry/src/events/task.rs +++ b/crates/turborepo-telemetry/src/events/task.rs @@ -94,10 +94,10 @@ impl PackageTaskEventBuilder { } // event methods - pub fn track_framework(&self, framework: &str) -> &Self { + pub fn track_framework(&self, framework: String) -> &Self { self.track(Event { key: "framework".to_string(), - value: framework.to_string(), + value: framework, is_sensitive: EventType::NonSensitive, send_in_ci: false, }); diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index dd244a4baa668..aa3015494b854 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -6,6 +6,7 @@ description: Learn how to handle environments for your applications. import { Callout } from '#/components/callout'; import { Tabs, Tab } from '#/components/tabs'; import { Accordion, Accordions } from '#/components/accordion'; +import { frameworks } from '@turbo/types'; Environment variable inputs are a vital part of your applications that you'll need to account for in your Turborepo configuration. @@ -56,21 +57,24 @@ Turborepo needs to be aware of your environment variables to account for changes Turborepo automatically adds prefix wildcards to your [`env`](/repo/docs/reference/configuration#env) key for common frameworks. If you're using one of the frameworks below in a package, you don't need to specify environment variables with these prefixes: -| Framework | `env` wildcard | -| ---------------- | ------------------- | -| Astro | `PUBLIC_*` | -| Blitz | `NEXT_PUBLIC_*` | -| Create React App | `REACT_APP_*` | -| Gatsby | `GATSBY_*` | -| Next.js | `NEXT_PUBLIC_*` | -| Nitro | `NITRO_*` | -| Nuxt.js | `NUXT_*`, `NITRO_*` | -| RedwoodJS | `REDWOOD_ENV_*` | -| Sanity Studio | `SANITY_STUDIO_*` | -| Solid | `VITE_*` | -| SvelteKit | `VITE_*` | -| Vite | `VITE_*` | -| Vue | `VUE_APP_*` | + + + + + + + + + {frameworks.map(({ name, envWildcards }) => ( + + + + + ))} + +
Framework + env wildcards +
{name}{envWildcards.map((w) => {w}).join(', ')}
Framework inference is per-package. diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/.eslintrc.js b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/.eslintrc.js new file mode 100644 index 0000000000000..8dc66dca7067c --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: ["plugin:turbo/recommended"], +}; diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/index.js b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/index.js new file mode 100644 index 0000000000000..006cf9b8c8179 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/index.js @@ -0,0 +1,3 @@ +process.env.NEXT_PUBLIC_ZILTOID; +process.env.GATSBY_THE; +process.env.NITRO_OMNISCIENT; diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/package.json b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/package.json new file mode 100644 index 0000000000000..86930291d732c --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/kitchen-sink/package.json @@ -0,0 +1,19 @@ +{ + "name": "nextjs", + "dependencies": { + "next": "*", + "blitz": "*", + "react": "*", + "left-pad": "*", + "event-stream": "*", + "gatsby": "*", + "is-promise": "*", + "@faker-js/faker": "*", + "ua-parser-js": "*", + "nitropack": "*" + }, + "devDependencies": { + "eslint": "8.57.0", + "eslint-plugin-turbo": "../../../../" + } +} diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/index.js b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/index.js new file mode 100644 index 0000000000000..19582df5a92c1 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/index.js @@ -0,0 +1 @@ +process.env.NEXT_PUBLIC_ZILTOID; diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/package.json b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/package.json new file mode 100644 index 0000000000000..513d44b4c8d2e --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/nextjs/package.json @@ -0,0 +1,10 @@ +{ + "name": "nextjs", + "dependencies": { + "next": "*" + }, + "devDependencies": { + "eslint": "8.57.0", + "eslint-plugin-turbo": "../../../../" + } +} diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/index.js b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/index.js new file mode 100644 index 0000000000000..97dde691a3c90 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/index.js @@ -0,0 +1 @@ +process.env.VITE_THING; diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/package.json b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/package.json new file mode 100644 index 0000000000000..fba50b3f190e6 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/apps/vite/package.json @@ -0,0 +1,10 @@ +{ + "name": "vite", + "dependencies": { + "vite": "*" + }, + "devDependencies": { + "eslint": "8.57.0", + "eslint-plugin-turbo": "../../../../" + } +} diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/package.json b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/package.json new file mode 100644 index 0000000000000..ecd2d11d6222a --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/package.json @@ -0,0 +1,7 @@ +{ + "name": "framework-inference", + "devDependencies": { + "eslint": "8.57.0", + "eslint-plugin-turbo": "../../" + } +} diff --git a/packages/eslint-plugin-turbo/__fixtures__/framework-inference/turbo.json b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/turbo.json new file mode 100644 index 0000000000000..9116ce5b21177 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/framework-inference/turbo.json @@ -0,0 +1,7 @@ +{ + "tasks": { + "build": { + "dependsOn": ["^build"] + } + } +} diff --git a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts index c7c5079d6c3d6..3901a1cbcd512 100644 --- a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts +++ b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts @@ -1,7 +1,7 @@ -import path from "path"; -import JSON5 from "json5"; -import { execSync } from "child_process"; -import { Schema } from "@turbo/types"; +import path from "node:path"; +import { execSync } from "node:child_process"; +import { type Schema } from "@turbo/types"; +import { parse, stringify } from "json5"; import { setupTestFixtures } from "@turbo/test-utils"; describe("eslint settings check", () => { @@ -17,7 +17,7 @@ describe("eslint settings check", () => { cwd, encoding: "utf8", }); - const configJson = JSON5.parse(configString); + const configJson: Record = parse(configString); expect(configJson.settings).toEqual({ turbo: { @@ -77,7 +77,7 @@ describe("eslint settings check", () => { encoding: "utf8", } ); - const configJson = JSON5.parse(configString); + const configJson: Record = parse(configString); expect(configJson.settings).toEqual({ turbo: { @@ -144,8 +144,10 @@ describe("eslint cache is busted", () => { cwd, encoding: "utf8", }); - } catch (error: any) { - const outputJson = JSON5.parse(error.stdout); + } catch (error: unknown) { + const outputJson: Record = parse( + (error as { stdout: string }).stdout + ); expect(outputJson).toMatchObject([ { messages: [ @@ -162,7 +164,7 @@ describe("eslint cache is busted", () => { const turboJson = readJson("turbo.json"); if (turboJson && "globalEnv" in turboJson) { turboJson.globalEnv = ["CI", "NONEXISTENT"]; - write("turbo.json", JSON5.stringify(turboJson, null, 2)); + write("turbo.json", stringify(turboJson, null, 2)); } // test that we invalidated the eslint cache @@ -170,7 +172,7 @@ describe("eslint cache is busted", () => { cwd, encoding: "utf8", }); - const outputJson = JSON5.parse(output); + const outputJson: Record = parse(output); expect(outputJson).toMatchObject([{ errorCount: 0 }]); }); }); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars.test.ts deleted file mode 100644 index 5e912fdae4876..0000000000000 --- a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars.test.ts +++ /dev/null @@ -1,1074 +0,0 @@ -import path from "node:path"; -import { RuleTester } from "eslint"; -import { RULES } from "../../lib/constants"; -import rule from "../../lib/rules/no-undeclared-env-vars"; - -const ruleTester = new RuleTester({ - parserOptions: { ecmaVersion: 2020 }, -}); - -const moduleRuleTester = new RuleTester({ - parserOptions: { ecmaVersion: 2020, sourceType: "module" }, -}); - -ruleTester.run(RULES.noUndeclaredEnvVars, rule, { - valid: [ - { - code: ` - const env2 = process.env['ENV_2']; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const env2 = process.env["ENV_2"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_2 } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ROOT_DOT_ENV, WEB_DOT_ENV } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { NEXT_PUBLIC_HAHAHAHA } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_1 } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_1 } = process.env; - `, - options: [{ cwd: "/some/random/path" }], - }, - { - code: ` - const { CI } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { NEW_STYLE_ENV_KEY, TASK_ENV_KEY } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { NEW_STYLE_GLOBAL_ENV_KEY, TASK_ENV_KEY } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const val = process.env["NEW_STYLE_GLOBAL_ENV_KEY"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const x = process.env.GLOBAL_ENV_KEY; - const { TASK_ENV_KEY, GLOBAL_ENV_KEY: renamedX } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "var x = process.env.GLOBAL_ENV_KEY;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "let x = process.env.TASK_ENV_KEY;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "const x = process.env.ANOTHER_KEY_VALUE;", - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ANOTHER_KEY_[A-Z]+$"], - }, - ], - }, - { - code: ` - var x = process.env.ENV_VAR_ONE; - var y = process.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - var x = process.env.ENV_VAR_ONE; - var y = process.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_O[A-Z]+$", "ENV_VAR_TWO"], - }, - ], - }, - { - code: ` - var globalOrTask = process.env.TASK_ENV_KEY || process.env.GLOBAL_ENV_KEY; - var oneOrTwo = process.env.ENV_VAR_ONE || process.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - () => { return process.env.GLOBAL_ENV_KEY } - () => { return process.env.TASK_ENV_KEY } - () => { return process.env.ENV_VAR_ALLOWED } - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - var foo = process?.env.GLOBAL_ENV_KEY - var foo = process?.env.TASK_ENV_KEY - var foo = process?.env.ENV_VAR_ALLOWED - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - function test(arg1 = process.env.GLOBAL_ENV_KEY) {}; - function test(arg1 = process.env.TASK_ENV_KEY) {}; - function test(arg1 = process.env.ENV_VAR_ALLOWED) {}; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - (arg1 = process.env.GLOBAL_ENV_KEY) => {} - (arg1 = process.env.TASK_ENV_KEY) => {} - (arg1 = process.env.ENV_VAR_ALLOWED) => {} - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: "const getEnv = (key) => process.env[key];", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "function getEnv(key) { return process.env[key]; }", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "for (let x of ['ONE', 'TWO', 'THREE']) { console.log(process.env[x]); }", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - ], - - invalid: [ - { - code: ` - const env2 = process.env['ENV_3']; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: ` - const env2 = process.env["ENV_3"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: ` - const { ENV_2 } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/docs/index.js" - ), - errors: [ - { - message: - "ENV_2 is not listed as a dependency in the root turbo.json or workspace (apps/docs) turbo.json", - }, - ], - }, - { - code: ` - const { NEXT_PUBLIC_HAHAHAHA, NEXT_PUBLIC_EXCLUDE, NEXT_PUBLIC_EXCLUDED } = process.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "NEXT_PUBLIC_EXCLUDE is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - { - message: - "NEXT_PUBLIC_EXCLUDED is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: "let { X } = process.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [{ message: "X is not listed as a dependency in turbo.json" }], - }, - { - code: "const { X, Y, Z } = process.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { message: "X is not listed as a dependency in turbo.json" }, - { message: "Y is not listed as a dependency in turbo.json" }, - { message: "Z is not listed as a dependency in turbo.json" }, - ], - }, - { - code: "const { X, Y: NewName, Z } = process.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { message: "X is not listed as a dependency in turbo.json" }, - { message: "Y is not listed as a dependency in turbo.json" }, - { message: "Z is not listed as a dependency in turbo.json" }, - ], - }, - { - code: "var x = process.env.NOT_THERE;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { - message: "NOT_THERE is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: "var x = process.env.KEY;", - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ANOTHER_KEY_[A-Z]+$"], - }, - ], - errors: [{ message: "KEY is not listed as a dependency in turbo.json" }], - }, - { - code: ` - var globalOrTask = process.env.TASK_ENV_KEY_NEW || process.env.GLOBAL_ENV_KEY_NEW; - var oneOrTwo = process.env.ENV_VAR_ONE || process.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: "ENV_VAR_ONE is not listed as a dependency in turbo.json", - }, - { - message: "ENV_VAR_TWO is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - () => { return process.env.GLOBAL_ENV_KEY_NEW } - () => { return process.env.TASK_ENV_KEY_NEW } - () => { return process.env.ENV_VAR_NOT_ALLOWED } - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - var foo = process?.env.GLOBAL_ENV_KEY_NEW - var foo = process?.env.TASK_ENV_KEY_NEW - var foo = process?.env.ENV_VAR_NOT_ALLOWED - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - function test(arg1 = process.env.GLOBAL_ENV_KEY_NEW) {}; - function test(arg1 = process.env.TASK_ENV_KEY_NEW) {}; - function test(arg1 = process.env.ENV_VAR_NOT_ALLOWED) {}; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - (arg1 = process.env.GLOBAL_ENV_KEY_NEW) => {} - (arg1 = process.env.TASK_ENV_KEY_NEW) => {} - (arg1 = process.env.ENV_VAR_NOT_ALLOWED) => {} - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - ], -}); - -moduleRuleTester.run(RULES.noUndeclaredEnvVars, rule, { - valid: [ - { - code: ` - const env2 = import.meta.env['ENV_2']; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const env2 = import.meta.env["ENV_2"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_2 } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ROOT_DOT_ENV, WEB_DOT_ENV } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { NEXT_PUBLIC_HAHAHAHA } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_1 } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { ENV_1 } = import.meta.env; - `, - options: [{ cwd: "/some/random/path" }], - }, - { - code: ` - const { CI } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - }, - { - code: ` - const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { NEW_STYLE_ENV_KEY, TASK_ENV_KEY } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { NEW_STYLE_GLOBAL_ENV_KEY, TASK_ENV_KEY } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const val = import.meta.env["NEW_STYLE_GLOBAL_ENV_KEY"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: ` - const x = import.meta.env.GLOBAL_ENV_KEY; - const { TASK_ENV_KEY, GLOBAL_ENV_KEY: renamedX } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "var x = import.meta.env.GLOBAL_ENV_KEY;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "let x = import.meta.env.TASK_ENV_KEY;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "const x = import.meta.env.ANOTHER_KEY_VALUE;", - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ANOTHER_KEY_[A-Z]+$"], - }, - ], - }, - { - code: ` - var x = import.meta.env.ENV_VAR_ONE; - var y = import.meta.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - var x = import.meta.env.ENV_VAR_ONE; - var y = import.meta.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_O[A-Z]+$", "ENV_VAR_TWO"], - }, - ], - }, - { - code: ` - var globalOrTask = import.meta.env.TASK_ENV_KEY || import.meta.env.GLOBAL_ENV_KEY; - var oneOrTwo = import.meta.env.ENV_VAR_ONE || import.meta.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - () => { return import.meta.env.GLOBAL_ENV_KEY } - () => { return import.meta.env.TASK_ENV_KEY } - () => { return import.meta.env.ENV_VAR_ALLOWED } - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - var foo = process?.env.GLOBAL_ENV_KEY - var foo = process?.env.TASK_ENV_KEY - var foo = process?.env.ENV_VAR_ALLOWED - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - function test1(arg1 = import.meta.env.GLOBAL_ENV_KEY) {}; - function test2(arg1 = import.meta.env.TASK_ENV_KEY) {}; - function test3(arg1 = import.meta.env.ENV_VAR_ALLOWED) {}; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: ` - (arg1 = import.meta.env.GLOBAL_ENV_KEY) => {} - (arg1 = import.meta.env.TASK_ENV_KEY) => {} - (arg1 = import.meta.env.ENV_VAR_ALLOWED) => {} - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ENV_VAR_[A-Z]+$"], - }, - ], - }, - { - code: "const getEnv = (key) => import.meta.env[key];", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "function getEnv(key) { return import.meta.env[key]; }", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - { - code: "for (let x of ['ONE', 'TWO', 'THREE']) { console.log(import.meta.env[x]); }", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - }, - ], - - invalid: [ - { - code: ` - const env2 = import.meta.env['ENV_3']; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: ` - const env2 = import.meta.env["ENV_3"]; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: ` - const { ENV_2 } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/docs/index.js" - ), - errors: [ - { - message: - "ENV_2 is not listed as a dependency in the root turbo.json or workspace (apps/docs) turbo.json", - }, - ], - }, - { - code: ` - const { NEXT_PUBLIC_HAHAHAHA, NEXT_PUBLIC_EXCLUDE, NEXT_PUBLIC_EXCLUDED } = import.meta.env; - `, - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/workspace-configs") }, - ], - filename: path.join( - __dirname, - "../../__fixtures__/workspace-configs/apps/web/index.js" - ), - errors: [ - { - message: - "NEXT_PUBLIC_EXCLUDE is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - { - message: - "NEXT_PUBLIC_EXCLUDED is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", - }, - ], - }, - { - code: "let { X } = import.meta.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [{ message: "X is not listed as a dependency in turbo.json" }], - }, - { - code: "const { X, Y, Z } = import.meta.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { message: "X is not listed as a dependency in turbo.json" }, - { message: "Y is not listed as a dependency in turbo.json" }, - { message: "Z is not listed as a dependency in turbo.json" }, - ], - }, - { - code: "const { X, Y: NewName, Z } = import.meta.env;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { message: "X is not listed as a dependency in turbo.json" }, - { message: "Y is not listed as a dependency in turbo.json" }, - { message: "Z is not listed as a dependency in turbo.json" }, - ], - }, - { - code: "var x = import.meta.env.NOT_THERE;", - options: [ - { cwd: path.join(__dirname, "../../__fixtures__/configs/single") }, - ], - errors: [ - { - message: "NOT_THERE is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: "var x = import.meta.env.KEY;", - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - allowList: ["^ANOTHER_KEY_[A-Z]+$"], - }, - ], - errors: [{ message: "KEY is not listed as a dependency in turbo.json" }], - }, - { - code: ` - var globalOrTask = import.meta.env.TASK_ENV_KEY_NEW || import.meta.env.GLOBAL_ENV_KEY_NEW; - var oneOrTwo = import.meta.env.ENV_VAR_ONE || import.meta.env.ENV_VAR_TWO; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: "ENV_VAR_ONE is not listed as a dependency in turbo.json", - }, - { - message: "ENV_VAR_TWO is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - () => { return import.meta.env.GLOBAL_ENV_KEY_NEW } - () => { return import.meta.env.TASK_ENV_KEY_NEW } - () => { return import.meta.env.ENV_VAR_NOT_ALLOWED } - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - var foo = process?.env.GLOBAL_ENV_KEY_NEW - var foo = process?.env.TASK_ENV_KEY_NEW - var foo = process?.env.ENV_VAR_NOT_ALLOWED - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - function test1(arg1 = import.meta.env.GLOBAL_ENV_KEY_NEW) {}; - function test2(arg1 = import.meta.env.TASK_ENV_KEY_NEW) {}; - function test3(arg1 = import.meta.env.ENV_VAR_NOT_ALLOWED) {}; - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - { - code: ` - (arg1 = import.meta.env.GLOBAL_ENV_KEY_NEW) => {} - (arg1 = import.meta.env.TASK_ENV_KEY_NEW) => {} - (arg1 = import.meta.env.ENV_VAR_NOT_ALLOWED) => {} - `, - options: [ - { - cwd: path.join(__dirname, "../../__fixtures__/configs/single"), - }, - ], - errors: [ - { - message: - "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", - }, - { - message: - "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", - }, - ], - }, - ], -}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.commonjs.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.commonjs.test.ts new file mode 100644 index 0000000000000..b778eb2688895 --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.commonjs.test.ts @@ -0,0 +1,306 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020 }, +}); + +const cwd = path.join(__dirname, "../../../../__fixtures__/configs/single"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = process.env; + `, + ...options(), + }, + { + code: ` + const { NEW_STYLE_ENV_KEY, TASK_ENV_KEY } = process.env; + `, + ...options(), + }, + { + code: ` + const { NEW_STYLE_GLOBAL_ENV_KEY, TASK_ENV_KEY } = process.env; + `, + ...options(), + }, + { + code: ` + const val = process.env["NEW_STYLE_GLOBAL_ENV_KEY"]; + `, + ...options(), + }, + { + code: ` + const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = process.env; + `, + ...options(), + }, + { + code: ` + const x = process.env.GLOBAL_ENV_KEY; + const { TASK_ENV_KEY, GLOBAL_ENV_KEY: renamedX } = process.env; + `, + ...options(), + }, + { + code: "var x = process.env.GLOBAL_ENV_KEY;", + ...options(), + }, + { + code: "let x = process.env.TASK_ENV_KEY;", + ...options(), + }, + { + code: "const x = process.env.ANOTHER_KEY_VALUE;", + ...options({ + allowList: ["^ANOTHER_KEY_[A-Z]+$"], + }), + }, + { + code: ` + var x = process.env.ENV_VAR_ONE; + var y = process.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + var x = process.env.ENV_VAR_ONE; + var y = process.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_O[A-Z]+$", "ENV_VAR_TWO"], + }), + }, + { + code: ` + var globalOrTask = process.env.TASK_ENV_KEY || process.env.GLOBAL_ENV_KEY; + var oneOrTwo = process.env.ENV_VAR_ONE || process.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + () => { return process.env.GLOBAL_ENV_KEY } + () => { return process.env.TASK_ENV_KEY } + () => { return process.env.ENV_VAR_ALLOWED } + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + var foo = process?.env.GLOBAL_ENV_KEY + var foo = process?.env.TASK_ENV_KEY + var foo = process?.env.ENV_VAR_ALLOWED + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + function test(arg1 = process.env.GLOBAL_ENV_KEY) {}; + function test(arg1 = process.env.TASK_ENV_KEY) {}; + function test(arg1 = process.env.ENV_VAR_ALLOWED) {}; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + (arg1 = process.env.GLOBAL_ENV_KEY) => {} + (arg1 = process.env.TASK_ENV_KEY) => {} + (arg1 = process.env.ENV_VAR_ALLOWED) => {} + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: "const getEnv = (key) => process.env[key];", + ...options(), + }, + { + code: "function getEnv(key) { return process.env[key]; }", + ...options(), + }, + { + code: "for (let x of ['ONE', 'TWO', 'THREE']) { console.log(process.env[x]); }", + ...options(), + }, + ], + invalid: [ + { + code: "let { X } = process.env;", + ...options(), + errors: [{ message: "X is not listed as a dependency in turbo.json" }], + }, + { + code: "const { X, Y, Z } = process.env;", + ...options(), + errors: [ + { message: "X is not listed as a dependency in turbo.json" }, + { message: "Y is not listed as a dependency in turbo.json" }, + { message: "Z is not listed as a dependency in turbo.json" }, + ], + }, + { + code: "const { X, Y: NewName, Z } = process.env;", + ...options(), + errors: [ + { message: "X is not listed as a dependency in turbo.json" }, + { message: "Y is not listed as a dependency in turbo.json" }, + { message: "Z is not listed as a dependency in turbo.json" }, + ], + }, + { + code: "var x = process.env.NOT_THERE;", + ...options(), + errors: [ + { + message: "NOT_THERE is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: "var x = process.env.KEY;", + ...options({ + allowList: ["^ANOTHER_KEY_[A-Z]+$"], + }), + + errors: [{ message: "KEY is not listed as a dependency in turbo.json" }], + }, + { + code: ` + var globalOrTask = process.env.TASK_ENV_KEY_NEW || process.env.GLOBAL_ENV_KEY_NEW; + var oneOrTwo = process.env.ENV_VAR_ONE || process.env.ENV_VAR_TWO; + `, + ...options(), + errors: [ + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: "ENV_VAR_ONE is not listed as a dependency in turbo.json", + }, + { + message: "ENV_VAR_TWO is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + () => { return process.env.GLOBAL_ENV_KEY_NEW } + () => { return process.env.TASK_ENV_KEY_NEW } + () => { return process.env.ENV_VAR_NOT_ALLOWED } + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + var foo = process?.env.GLOBAL_ENV_KEY_NEW + var foo = process?.env.TASK_ENV_KEY_NEW + var foo = process?.env.ENV_VAR_NOT_ALLOWED + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + function test(arg1 = process.env.GLOBAL_ENV_KEY_NEW) {}; + function test(arg1 = process.env.TASK_ENV_KEY_NEW) {}; + function test(arg1 = process.env.ENV_VAR_NOT_ALLOWED) {}; + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + (arg1 = process.env.GLOBAL_ENV_KEY_NEW) => {} + (arg1 = process.env.TASK_ENV_KEY_NEW) => {} + (arg1 = process.env.ENV_VAR_NOT_ALLOWED) => {} + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.module.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.module.test.ts new file mode 100644 index 0000000000000..f6d58306b4b55 --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/configs/no-undeclared-env-vars.module.test.ts @@ -0,0 +1,306 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, +}); + +const cwd = path.join(__dirname, "../../../../__fixtures__/configs/single"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = import.meta.env; + `, + ...options(), + }, + { + code: ` + const { NEW_STYLE_ENV_KEY, TASK_ENV_KEY } = import.meta.env; + `, + ...options(), + }, + { + code: ` + const { NEW_STYLE_GLOBAL_ENV_KEY, TASK_ENV_KEY } = import.meta.env; + `, + ...options(), + }, + { + code: ` + const val = import.meta.env["NEW_STYLE_GLOBAL_ENV_KEY"]; + `, + ...options(), + }, + { + code: ` + const { TASK_ENV_KEY, ANOTHER_ENV_KEY } = import.meta.env; + `, + ...options(), + }, + { + code: ` + const x = import.meta.env.GLOBAL_ENV_KEY; + const { TASK_ENV_KEY, GLOBAL_ENV_KEY: renamedX } = import.meta.env; + `, + ...options(), + }, + { + code: "var x = import.meta.env.GLOBAL_ENV_KEY;", + ...options(), + }, + { + code: "let x = import.meta.env.TASK_ENV_KEY;", + ...options(), + }, + { + code: "const x = import.meta.env.ANOTHER_KEY_VALUE;", + ...options({ + allowList: ["^ANOTHER_KEY_[A-Z]+$"], + }), + }, + { + code: ` + var x = import.meta.env.ENV_VAR_ONE; + var y = import.meta.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + var x = import.meta.env.ENV_VAR_ONE; + var y = import.meta.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_O[A-Z]+$", "ENV_VAR_TWO"], + }), + }, + { + code: ` + var globalOrTask = import.meta.env.TASK_ENV_KEY || import.meta.env.GLOBAL_ENV_KEY; + var oneOrTwo = import.meta.env.ENV_VAR_ONE || import.meta.env.ENV_VAR_TWO; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + () => { return import.meta.env.GLOBAL_ENV_KEY } + () => { return import.meta.env.TASK_ENV_KEY } + () => { return import.meta.env.ENV_VAR_ALLOWED } + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + var foo = process?.env.GLOBAL_ENV_KEY + var foo = process?.env.TASK_ENV_KEY + var foo = process?.env.ENV_VAR_ALLOWED + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + function test1(arg1 = import.meta.env.GLOBAL_ENV_KEY) {}; + function test2(arg1 = import.meta.env.TASK_ENV_KEY) {}; + function test3(arg1 = import.meta.env.ENV_VAR_ALLOWED) {}; + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: ` + (arg1 = import.meta.env.GLOBAL_ENV_KEY) => {} + (arg1 = import.meta.env.TASK_ENV_KEY) => {} + (arg1 = import.meta.env.ENV_VAR_ALLOWED) => {} + `, + ...options({ + allowList: ["^ENV_VAR_[A-Z]+$"], + }), + }, + { + code: "const getEnv = (key) => import.meta.env[key];", + ...options(), + }, + { + code: "function getEnv(key) { return import.meta.env[key]; }", + ...options(), + }, + { + code: "for (let x of ['ONE', 'TWO', 'THREE']) { console.log(import.meta.env[x]); }", + ...options(), + }, + ], + + invalid: [ + { + code: "let { X } = import.meta.env;", + ...options(), + errors: [{ message: "X is not listed as a dependency in turbo.json" }], + }, + { + code: "const { X, Y, Z } = import.meta.env;", + ...options(), + errors: [ + { message: "X is not listed as a dependency in turbo.json" }, + { message: "Y is not listed as a dependency in turbo.json" }, + { message: "Z is not listed as a dependency in turbo.json" }, + ], + }, + { + code: "const { X, Y: NewName, Z } = import.meta.env;", + ...options(), + errors: [ + { message: "X is not listed as a dependency in turbo.json" }, + { message: "Y is not listed as a dependency in turbo.json" }, + { message: "Z is not listed as a dependency in turbo.json" }, + ], + }, + { + code: "var x = import.meta.env.NOT_THERE;", + ...options(), + errors: [ + { + message: "NOT_THERE is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: "var x = import.meta.env.KEY;", + ...options({ + allowList: ["^ANOTHER_KEY_[A-Z]+$"], + }), + errors: [{ message: "KEY is not listed as a dependency in turbo.json" }], + }, + { + code: ` + var globalOrTask = import.meta.env.TASK_ENV_KEY_NEW || import.meta.env.GLOBAL_ENV_KEY_NEW; + var oneOrTwo = import.meta.env.ENV_VAR_ONE || import.meta.env.ENV_VAR_TWO; + `, + ...options(), + errors: [ + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: "ENV_VAR_ONE is not listed as a dependency in turbo.json", + }, + { + message: "ENV_VAR_TWO is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + () => { return import.meta.env.GLOBAL_ENV_KEY_NEW } + () => { return import.meta.env.TASK_ENV_KEY_NEW } + () => { return import.meta.env.ENV_VAR_NOT_ALLOWED } + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + var foo = process?.env.GLOBAL_ENV_KEY_NEW + var foo = process?.env.TASK_ENV_KEY_NEW + var foo = process?.env.ENV_VAR_NOT_ALLOWED + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + function test1(arg1 = import.meta.env.GLOBAL_ENV_KEY_NEW) {}; + function test2(arg1 = import.meta.env.TASK_ENV_KEY_NEW) {}; + function test3(arg1 = import.meta.env.ENV_VAR_NOT_ALLOWED) {}; + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: ` + (arg1 = import.meta.env.GLOBAL_ENV_KEY_NEW) => {} + (arg1 = import.meta.env.TASK_ENV_KEY_NEW) => {} + (arg1 = import.meta.env.ENV_VAR_NOT_ALLOWED) => {} + `, + ...options(), + errors: [ + { + message: + "GLOBAL_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "TASK_ENV_KEY_NEW is not listed as a dependency in turbo.json", + }, + { + message: + "ENV_VAR_NOT_ALLOWED is not listed as a dependency in turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.commonjs.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.commonjs.test.ts new file mode 100644 index 0000000000000..2e48a404e8e6b --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.commonjs.test.ts @@ -0,0 +1,77 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020 }, +}); + +const cwd = path.join( + __dirname, + "../../../../__fixtures__/framework-inference" +); +const nextJsFilename = path.join(cwd, "/apps/nextjs/index.js"); +const viteFilename = path.join(cwd, "/apps/vite/index.js"); +const kitchenSinkFilename = path.join(cwd, "/apps/kitchen-sink/index.js"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: `const { NEXT_PUBLIC_ZILTOID } = process.env;`, + ...options(), + filename: nextJsFilename, + }, + { + code: `const { VITE_THINGS } = process.env;`, + ...options(), + filename: viteFilename, + }, + { + code: `const { NEXT_PUBLIC_ZILTOID, GATSBY_THE, NITRO_OMNISCIENT } = process.env;`, + ...options(), + filename: kitchenSinkFilename, + }, + ], + invalid: [ + { + code: `const { NEXT_PUBLIC_ZILTOID } = process.env;`, + ...options(), + filename: viteFilename, + errors: [ + { + message: + "NEXT_PUBLIC_ZILTOID is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: `const { VITE_THINGS } = process.env;`, + ...options(), + filename: nextJsFilename, + errors: [ + { + message: "VITE_THINGS is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: `const { VITE_THINGS } = process.env;`, + ...options(), + filename: kitchenSinkFilename, + errors: [ + { + message: "VITE_THINGS is not listed as a dependency in turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.module.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.module.test.ts new file mode 100644 index 0000000000000..bd8ab7737b122 --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/framework-inference/no-undeclared-env-vars.module.test.ts @@ -0,0 +1,77 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, +}); + +const cwd = path.join( + __dirname, + "../../../../__fixtures__/framework-inference" +); +const nextJsFilename = path.join(cwd, "/apps/nextjs/index.js"); +const viteFilename = path.join(cwd, "/apps/vite/index.js"); +const kitchenSinkFilename = path.join(cwd, "/apps/kitchen-sink/index.js"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: `const { NEXT_PUBLIC_ZILTOID } = import.meta.env;`, + ...options(), + filename: nextJsFilename, + }, + { + code: `const { VITE_THINGS } = import.meta.env;`, + ...options(), + filename: viteFilename, + }, + { + code: `const { NEXT_PUBLIC_ZILTOID, GATSBY_THE, NITRO_OMNISCIENT } = import.meta.env;`, + ...options(), + filename: kitchenSinkFilename, + }, + ], + invalid: [ + { + code: `const { NEXT_PUBLIC_ZILTOID } = import.meta.env;`, + ...options(), + filename: viteFilename, + errors: [ + { + message: + "NEXT_PUBLIC_ZILTOID is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: `const { VITE_THINGS } = import.meta.env;`, + ...options(), + filename: nextJsFilename, + errors: [ + { + message: "VITE_THINGS is not listed as a dependency in turbo.json", + }, + ], + }, + { + code: `const { VITE_THINGS } = import.meta.env;`, + ...options(), + filename: kitchenSinkFilename, + errors: [ + { + message: "VITE_THINGS is not listed as a dependency in turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.commonjs.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.commonjs.test.ts new file mode 100644 index 0000000000000..81e40b3b79a00 --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.commonjs.test.ts @@ -0,0 +1,25 @@ +import { RuleTester } from "eslint"; +import { RULES } from "../../../lib/constants"; +import rule from "../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020 }, +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const { TZ } = process.env; + `, + options: [{ cwd: "/some/random/path" }], + }, + { + code: ` + const { ENV_1 } = process.env; + `, + options: [{ cwd: "/some/random/path" }], + }, + ], + invalid: [], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.module.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.module.test.ts new file mode 100644 index 0000000000000..ee75c05f50d24 --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/no-undeclared-env-vars.module.test.ts @@ -0,0 +1,25 @@ +import { RuleTester } from "eslint"; +import { RULES } from "../../../lib/constants"; +import rule from "../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const { TZ } = import.meta.env; + `, + options: [{ cwd: "/some/random/path" }], + }, + { + code: ` + const { ENV_1 } = import.meta.env; + `, + options: [{ cwd: "/some/random/path" }], + }, + ], + invalid: [], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.commonjs.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.commonjs.test.ts new file mode 100644 index 0000000000000..de6129ae2b92a --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.commonjs.test.ts @@ -0,0 +1,132 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020 }, +}); + +const cwd = path.join(__dirname, "../../../../__fixtures__/workspace-configs"); +const webFilename = path.join(cwd, "/apps/web/index.js"); +const docsFilename = path.join(cwd, "/apps/docs/index.js"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const env2 = process.env['ENV_2']; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const env2 = process.env["ENV_2"]; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ENV_2 } = process.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ROOT_DOT_ENV, WEB_DOT_ENV } = process.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { NEXT_PUBLIC_HAHAHAHA } = process.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ENV_1 } = process.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { CI } = process.env; + `, + ...options(), + filename: webFilename, + }, + ], + invalid: [ + { + code: ` + const env2 = process.env['ENV_3']; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + { + code: ` + const env2 = process.env["ENV_3"]; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + { + code: ` + const { ENV_2 } = process.env; + `, + ...options(), + filename: docsFilename, + errors: [ + { + message: + "ENV_2 is not listed as a dependency in the root turbo.json or workspace (apps/docs) turbo.json", + }, + ], + }, + { + code: ` + const { NEXT_PUBLIC_HAHAHAHA, NEXT_PUBLIC_EXCLUDE, NEXT_PUBLIC_EXCLUDED } = process.env; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "NEXT_PUBLIC_EXCLUDE is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + { + message: + "NEXT_PUBLIC_EXCLUDED is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.module.test.ts b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.module.test.ts new file mode 100644 index 0000000000000..5ca66e6b4761f --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/lib/no-undeclared-env-vars/workspace-configs/no-undeclared-env-vars.module.test.ts @@ -0,0 +1,132 @@ +import path from "node:path"; +import { RuleTester } from "eslint"; +import { RULES } from "../../../../lib/constants"; +import rule from "../../../../lib/rules/no-undeclared-env-vars"; + +const ruleTester = new RuleTester({ + parserOptions: { ecmaVersion: 2020, sourceType: "module" }, +}); + +const cwd = path.join(__dirname, "../../../../__fixtures__/workspace-configs"); +const webFilename = path.join(cwd, "/apps/web/index.js"); +const docsFilename = path.join(cwd, "/apps/docs/index.js"); +const options = (extra: Record = {}) => ({ + options: [ + { + cwd, + ...extra, + }, + ], +}); + +ruleTester.run(RULES.noUndeclaredEnvVars, rule, { + valid: [ + { + code: ` + const env2 = import.meta.env['ENV_2']; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const env2 = import.meta.env["ENV_2"]; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ENV_2 } = import.meta.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ROOT_DOT_ENV, WEB_DOT_ENV } = import.meta.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { NEXT_PUBLIC_HAHAHAHA } = import.meta.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { ENV_1 } = import.meta.env; + `, + ...options(), + filename: webFilename, + }, + { + code: ` + const { CI } = import.meta.env; + `, + ...options(), + filename: webFilename, + }, + ], + invalid: [ + { + code: ` + const env2 = import.meta.env['ENV_3']; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + { + code: ` + const env2 = import.meta.env["ENV_3"]; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "ENV_3 is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + { + code: ` + const { ENV_2 } = import.meta.env; + `, + ...options(), + filename: docsFilename, + errors: [ + { + message: + "ENV_2 is not listed as a dependency in the root turbo.json or workspace (apps/docs) turbo.json", + }, + ], + }, + { + code: ` + const { NEXT_PUBLIC_HAHAHAHA, NEXT_PUBLIC_EXCLUDE, NEXT_PUBLIC_EXCLUDED } = import.meta.env; + `, + ...options(), + filename: webFilename, + errors: [ + { + message: + "NEXT_PUBLIC_EXCLUDE is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + { + message: + "NEXT_PUBLIC_EXCLUDED is not listed as a dependency in the root turbo.json or workspace (apps/web) turbo.json", + }, + ], + }, + ], +}); diff --git a/packages/eslint-plugin-turbo/lib/index.ts b/packages/eslint-plugin-turbo/lib/index.ts index 02cf4ae77ec12..44bd9013f327b 100644 --- a/packages/eslint-plugin-turbo/lib/index.ts +++ b/packages/eslint-plugin-turbo/lib/index.ts @@ -1,7 +1,5 @@ import { RULES } from "./constants"; -// rules import noUndeclaredEnvVars from "./rules/no-undeclared-env-vars"; -// configs import recommended from "./configs/recommended"; const rules = { diff --git a/packages/eslint-plugin-turbo/lib/rules/no-undeclared-env-vars.ts b/packages/eslint-plugin-turbo/lib/rules/no-undeclared-env-vars.ts index 3bd6945a8da98..7b49d59afd8ee 100644 --- a/packages/eslint-plugin-turbo/lib/rules/no-undeclared-env-vars.ts +++ b/packages/eslint-plugin-turbo/lib/rules/no-undeclared-env-vars.ts @@ -1,10 +1,18 @@ import path from "node:path"; +import { readFileSync } from "node:fs"; import type { Rule } from "eslint"; import type { Node, MemberExpression } from "estree"; -import { logger } from "@turbo/utils"; +import { type PackageJson, logger, searchUp } from "@turbo/utils"; +import { frameworks } from "@turbo/types"; import { RULES } from "../constants"; import { Project, getWorkspaceFromFilePath } from "../utils/calculate-inputs"; +const debug = process.env.RUNNER_DEBUG + ? logger.info + : (_: string) => { + /* noop */ + }; + export interface RuleContextWithOptions extends Rule.RuleContext { options: Array<{ cwd?: string; @@ -67,11 +75,88 @@ function normalizeCwd( return undefined; } +/** for a given `package.json` file path, this will compile a Set of that package's listed dependencies */ +const packageJsonDependencies = (filePath: string): Set => { + // get the contents of the package.json + let packageJsonString; + + try { + packageJsonString = readFileSync(filePath, "utf-8"); + } catch (e) { + logger.error(`Could not read package.json at ${filePath}`); + return new Set(); + } + + let packageJson: PackageJson; + try { + packageJson = JSON.parse(packageJsonString) as PackageJson; + } catch (e) { + logger.error(`Could not parse package.json at ${filePath}`); + return new Set(); + } + + return ( + [ + "dependencies", + "devDependencies", + "peerDependencies", + // intentionally not including `optionalDependencies` or `bundleDependencies` because at the time of writing they are not used for any of the frameworks we support + ] as const + ) + .flatMap((key) => Object.keys(packageJson[key] ?? {})) + .reduce((acc, dependency) => acc.add(dependency), new Set()); +}; + +/** + * Turborepo does some nice framework detection based on the dependencies in the package.json. This function ports that logic to this ESLint rule. + * + * Imagine you have a Vue app. That means you have Vue in your `package.json` dependencies. This function will return a list of regular expressions that match the environment variables that Vue depends on, which is information encoded into the `frameworks.json` file. In Vue's case, it would return the regex `VUE_APP_*` since you have `@vue/cli-service` in your dependencies. + */ +const frameworkEnvMatches = (filePath: string): Set => { + const directory = path.dirname(filePath); + const packageJsonDir = searchUp({ cwd: directory, target: "package.json" }); + if (!packageJsonDir) { + logger.error(`Could not determine package for ${filePath}`); + return new Set(); + } + debug(`found package.json in: ${packageJsonDir}`); + + const dependencies = packageJsonDependencies( + `${packageJsonDir}/package.json` + ); + const hasDependency = (dep: string) => dependencies.has(dep); + debug(`dependencies for ${filePath}: ${Array.from(dependencies).join(",")}`); + + return frameworks.reduce( + ( + acc, + { + dependencyMatch: { dependencies: searchDependencies, strategy }, + envWildcards, + } + ) => { + const hasMatch = + strategy === "all" + ? searchDependencies.every(hasDependency) + : searchDependencies.some(hasDependency); + + if (hasMatch) { + return new Set([ + ...acc, + ...envWildcards.map((envWildcard) => RegExp(envWildcard)), + ]); + } + return acc; + }, + new Set() + ); +}; + function create(context: RuleContextWithOptions): Rule.RuleListener { const { options } = context; const allowList: Array = options[0]?.allowList || []; - const regexAllowList: Array = []; + let regexAllowList: Array = []; allowList.forEach((allowed) => { try { regexAllowList.push(new RegExp(allowed)); @@ -81,6 +166,17 @@ function create(context: RuleContextWithOptions): Rule.RuleListener { } }); + const filename = context.getFilename(); + debug(`Checking file: ${filename}`); + + const matches = frameworkEnvMatches(filename); + regexAllowList = [...regexAllowList, ...matches]; + debug( + `Allow list: ${regexAllowList.map((r) => r.source).join(",")}, ${ + regexAllowList.length + }` + ); + const cwd = normalizeCwd( // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed to support older eslint versions context.getCwd ? context.getCwd() : undefined, diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index a56dfd4d22375..1165f6c0525ea 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -19,6 +19,7 @@ }, "author": "Vercel", "main": "./dist/index.js", + "types": "./dist/index.d.ts", "files": [ "dist/**" ], diff --git a/packages/eslint-plugin-turbo/tsup.config.ts b/packages/eslint-plugin-turbo/tsup.config.ts index bbda8cb604ddc..12dc08af087d4 100644 --- a/packages/eslint-plugin-turbo/tsup.config.ts +++ b/packages/eslint-plugin-turbo/tsup.config.ts @@ -1,8 +1,9 @@ -import { defineConfig, Options } from "tsup"; +import { defineConfig, type Options } from "tsup"; export default defineConfig((options: Options) => ({ entry: ["lib/index.ts"], clean: true, minify: true, + dts: true, ...options, })); diff --git a/packages/turbo-benchmark/README.md b/packages/turbo-benchmark/README.md index 68946de6a3b46..2fe53013c516d 100644 --- a/packages/turbo-benchmark/README.md +++ b/packages/turbo-benchmark/README.md @@ -3,5 +3,5 @@ To run benchmarks for turborepo 1. Follow the [Building Turborepo](../CONTRIBUTING.md#building-turborepo) instructions to install dependencies -2. `cargo build -p turbo --profile release-turborepo` to build turbo +2. `cargo build --package turbo --profile release-turborepo` to build turbo 3. From this directory `pnpm run benchmark` diff --git a/packages/turbo-types/src/index.ts b/packages/turbo-types/src/index.ts index b6f907d11490b..99cef354039ec 100644 --- a/packages/turbo-types/src/index.ts +++ b/packages/turbo-types/src/index.ts @@ -1,3 +1,10 @@ +import type { Framework as FW } from "./types/frameworks"; +import frameworksJson from "./json/frameworks.json"; + +export const frameworks = frameworksJson as Array; +export type Framework = FW; +export type { FrameworkStrategy } from "./types/frameworks"; + export { type BaseSchema, type BaseSchema as BaseSchemaV2, diff --git a/packages/turbo-types/src/json/frameworks.json b/packages/turbo-types/src/json/frameworks.json new file mode 100644 index 0000000000000..f89c82e79824b --- /dev/null +++ b/packages/turbo-types/src/json/frameworks.json @@ -0,0 +1,119 @@ +[ + { + "slug": "astro", + "name": "Astro", + "envWildcards": ["PUBLIC_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["astro"] + } + }, + { + "slug": "blitzjs", + "name": "Blitz", + "envWildcards": ["NEXT_PUBLIC_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["blitz"] + } + }, + { + "slug": "create-react-app", + "name": "Create React App", + "envWildcards": ["REACT_APP_*"], + "dependencyMatch": { + "strategy": "some", + "dependencies": ["react-scripts", "react-dev-utils"] + } + }, + { + "slug": "gatsby", + "name": "Gatsby", + "envWildcards": ["GATSBY_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["gatsby"] + } + }, + { + "slug": "nextjs", + "name": "Next.js", + "envWildcards": ["NEXT_PUBLIC_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["next"] + } + }, + { + "slug": "nitro", + "name": "Nitro", + "envWildcards": ["NITRO_*"], + "dependencyMatch": { + "strategy": "some", + "dependencies": ["nitropack", "nitropack-nightly"] + } + }, + { + "slug": "nuxtjs", + "name": "Nuxt.js", + "envWildcards": ["NUXT_*", "NITRO_*"], + "dependencyMatch": { + "strategy": "some", + "dependencies": ["nuxt", "nuxt-edge", "nuxt3", "nuxt3-edge"] + } + }, + { + "slug": "redwoodjs", + "name": "RedwoodJS", + "envWildcards": ["REDWOOD_ENV_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["@redwoodjs/core"] + } + }, + { + "slug": "sanity", + "name": "Sanity Studio", + "envWildcards": ["SANITY_STUDIO_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["@sanity/cli"] + } + }, + { + "slug": "solidstart", + "name": "Solid", + "envWildcards": ["VITE_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["solid-js", "solid-start"] + } + }, + { + "slug": "sveltekit", + "name": "SvelteKit", + "envWildcards": ["VITE_*", "PUBLIC_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["@sveltejs/kit"] + } + }, + { + "slug": "vite", + "name": "Vite", + "envWildcards": ["VITE_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["vite"] + } + }, + { + "slug": "vue", + "name": "Vue", + "envWildcards": ["VUE_APP_*"], + "dependencyMatch": { + "strategy": "all", + "dependencies": ["@vue/cli-service"] + } + } +] diff --git a/packages/turbo-types/src/types/frameworks.ts b/packages/turbo-types/src/types/frameworks.ts new file mode 100644 index 0000000000000..1f91e4f958474 --- /dev/null +++ b/packages/turbo-types/src/types/frameworks.ts @@ -0,0 +1,11 @@ +export type FrameworkStrategy = "all" | "some"; + +export interface Framework { + slug: string; + name: string; + envWildcards: Array; + dependencyMatch: { + strategy: FrameworkStrategy; + dependencies: Array; + }; +} diff --git a/packages/turbo-utils/src/searchUp.ts b/packages/turbo-utils/src/searchUp.ts index 0c5c4b7eb77dd..8b9de5bc5afcc 100644 --- a/packages/turbo-utils/src/searchUp.ts +++ b/packages/turbo-utils/src/searchUp.ts @@ -1,13 +1,23 @@ import fs from "node:fs"; import path from "node:path"; +/** + * recursively search up the file tree looking for a `target` file, starting with the provided `cwd` + * + * If found, return the directory containing the file. If not found, return null. + */ export function searchUp({ target, cwd, contentCheck, }: { + /** The name of the file we're looking for */ target: string; + + /** The directory to start the search */ cwd: string; + + /** a predicate for examining the content of any found file */ contentCheck?: (content: string) => boolean; }): string | null { const root = path.parse(cwd).root; From 826f4fe6d499ed2f8457361aea9983131ff36b17 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 17 Sep 2024 10:35:10 -0400 Subject: [PATCH 008/218] release(turborepo): 2.1.3-canary.1 (#9158) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 4f20e9f45d6b9..673d4acd508cd 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index f2e16f6fc6c06..f2a37a7cb3442 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 1165f6c0525ea..f3d245d939bb1 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index f650aa0c46a44..9f31a5fc3f479 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 9368b6dedd9e8..a5d76ec521187 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 47d3d801a8226..ce2ecada04bd5 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index dd2020f45394a..638a5c9cc4f2d 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 3cc1ec999299e..70c13100763e6 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index cb4c625127af6..7a3b69b6e8177 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.3-canary.0", + "version": "2.1.3-canary.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.3-canary.0", - "turbo-darwin-arm64": "2.1.3-canary.0", - "turbo-linux-64": "2.1.3-canary.0", - "turbo-linux-arm64": "2.1.3-canary.0", - "turbo-windows-64": "2.1.3-canary.0", - "turbo-windows-arm64": "2.1.3-canary.0" + "turbo-darwin-64": "2.1.3-canary.1", + "turbo-darwin-arm64": "2.1.3-canary.1", + "turbo-linux-64": "2.1.3-canary.1", + "turbo-linux-arm64": "2.1.3-canary.1", + "turbo-windows-64": "2.1.3-canary.1", + "turbo-windows-arm64": "2.1.3-canary.1" } } diff --git a/version.txt b/version.txt index dee6ccfa15144..4c3bd158e4f40 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.3-canary.0 +2.1.3-canary.1 canary From 8856b3be692015095a3efc05d14ae444ec7bbabd Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 17 Sep 2024 10:47:23 -0400 Subject: [PATCH 009/218] feat: allow usage of `turbo` without turbo.json (#9149) ### Description This PR adds the ability to use `turbo` in a monorepo that doesn't have a `turbo.json`. This feature is currently gated behind `--experimental-allow-no-turbo-json`/`TURBO_ALLOW_NO_TURBO_JSON`. A majority of the PR is refactoring the `EngineBuilder` so that it no longer directly loads `TurboJson`s, but delegates to a `TurboJsonLoader`. This allows us to use different strategies for resolving `TurboJson` loads depending on runtime options e.g. single package mode or task access. Reviewing this PR is best done by viewing each commit individually. ### Testing Instructions Unit testing for `turbo.json` loading changes. Integration test for verifying the new loader is activated with the new env var/flag. --- crates/turborepo-lib/src/cli/mod.rs | 2 + crates/turborepo-lib/src/commands/mod.rs | 1 + crates/turborepo-lib/src/config/env.rs | 7 + crates/turborepo-lib/src/config/mod.rs | 8 + crates/turborepo-lib/src/engine/builder.rs | 228 ++---- .../src/package_changes_watcher.rs | 26 +- crates/turborepo-lib/src/run/builder.rs | 65 +- crates/turborepo-lib/src/run/summary/task.rs | 4 + crates/turborepo-lib/src/run/task_access.rs | 23 +- crates/turborepo-lib/src/task_graph/mod.rs | 6 +- .../turborepo-lib/src/task_graph/visitor.rs | 2 +- crates/turborepo-lib/src/turbo_json/loader.rs | 679 ++++++++++++++++++ crates/turborepo-lib/src/turbo_json/mod.rs | 208 +----- .../monorepo_no_turbo_json/.gitignore | 3 + .../apps/my-app/.env.local | 0 .../apps/my-app/package.json | 10 + .../fixtures/monorepo_no_turbo_json/bar.txt | 1 + .../fixtures/monorepo_no_turbo_json/foo.txt | 1 + .../monorepo_no_turbo_json/package.json | 11 + .../packages/another/package.json | 4 + .../packages/util/package.json | 6 + .../tests/run/allow-no-root-turbo.t | 50 ++ 22 files changed, 946 insertions(+), 399 deletions(-) create mode 100644 crates/turborepo-lib/src/turbo_json/loader.rs create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/.gitignore create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/.env.local create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/package.json create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/bar.txt create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/foo.txt create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/package.json create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/another/package.json create mode 100644 turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/util/package.json create mode 100644 turborepo-tests/integration/tests/run/allow-no-root-turbo.t diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 3d8a4fa1735b8..2f68ff217322c 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -222,6 +222,8 @@ pub struct Args { /// should be used. #[clap(long, global = true)] pub dangerously_disable_package_manager_check: bool, + #[clap(long = "experimental-allow-no-turbo-json", hide = true, global = true)] + pub allow_no_turbo_json: bool, /// Use the `turbo.json` located at the provided path instead of one at the /// root of the repository. #[clap(long, global = true)] diff --git a/crates/turborepo-lib/src/commands/mod.rs b/crates/turborepo-lib/src/commands/mod.rs index 857f5e31b111b..04f1568bc0df8 100644 --- a/crates/turborepo-lib/src/commands/mod.rs +++ b/crates/turborepo-lib/src/commands/mod.rs @@ -108,6 +108,7 @@ impl CommandBase { .and_then(|args| args.remote_cache_read_only()), ) .with_run_summary(self.args.run_args().and_then(|args| args.summarize())) + .with_allow_no_turbo_json(self.args.allow_no_turbo_json.then_some(true)) .build() } diff --git a/crates/turborepo-lib/src/config/env.rs b/crates/turborepo-lib/src/config/env.rs index bc7e08437eda4..84601bf9f1da8 100644 --- a/crates/turborepo-lib/src/config/env.rs +++ b/crates/turborepo-lib/src/config/env.rs @@ -38,6 +38,7 @@ const TURBO_MAPPING: &[(&str, &str)] = [ ("turbo_remote_only", "remote_only"), ("turbo_remote_cache_read_only", "remote_cache_read_only"), ("turbo_run_summary", "run_summary"), + ("turbo_allow_no_turbo_json", "allow_no_turbo_json"), ] .as_slice(); @@ -86,6 +87,7 @@ impl ResolvedConfigurationOptions for EnvVars { let remote_only = self.truthy_value("remote_only").flatten(); let remote_cache_read_only = self.truthy_value("remote_cache_read_only").flatten(); let run_summary = self.truthy_value("run_summary").flatten(); + let allow_no_turbo_json = self.truthy_value("allow_no_turbo_json").flatten(); // Process timeout let timeout = self @@ -171,6 +173,7 @@ impl ResolvedConfigurationOptions for EnvVars { remote_only, remote_cache_read_only, run_summary, + allow_no_turbo_json, // Processed numbers timeout, @@ -317,6 +320,7 @@ mod test { env.insert("turbo_remote_only".into(), "1".into()); env.insert("turbo_remote_cache_read_only".into(), "1".into()); env.insert("turbo_run_summary".into(), "true".into()); + env.insert("turbo_allow_no_turbo_json".into(), "true".into()); let config = EnvVars::new(&env) .unwrap() @@ -328,6 +332,7 @@ mod test { assert!(config.remote_only()); assert!(config.remote_cache_read_only()); assert!(config.run_summary()); + assert!(config.allow_no_turbo_json()); assert_eq!(turbo_api, config.api_url.unwrap()); assert_eq!(turbo_login, config.login_url.unwrap()); assert_eq!(turbo_team, config.team_slug.unwrap()); @@ -365,6 +370,7 @@ mod test { env.insert("turbo_remote_only".into(), "".into()); env.insert("turbo_remote_cache_read_only".into(), "".into()); env.insert("turbo_run_summary".into(), "".into()); + env.insert("turbo_allow_no_turbo_json".into(), "".into()); let config = EnvVars::new(&env) .unwrap() @@ -387,6 +393,7 @@ mod test { assert!(!config.remote_only()); assert!(!config.remote_cache_read_only()); assert!(!config.run_summary()); + assert!(!config.allow_no_turbo_json()); } #[test] diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index a693b601466c6..1c35949bbef33 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -17,6 +17,7 @@ use thiserror::Error; use turbo_json::TurboJsonReader; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use turborepo_errors::TURBO_SITE; +use turborepo_repository::package_graph::PackageName; pub use crate::turbo_json::{RawTurboJson, UIMode}; use crate::{ @@ -179,6 +180,8 @@ pub enum Error { #[source_code] text: NamedSource, }, + #[error("Cannot load turbo.json for in {0} single package mode")] + InvalidTurboJsonLoad(PackageName), } const DEFAULT_API_URL: &str = "https://vercel.com/api"; @@ -239,6 +242,7 @@ pub struct ConfigurationOptions { pub(crate) remote_only: Option, pub(crate) remote_cache_read_only: Option, pub(crate) run_summary: Option, + pub(crate) allow_no_turbo_json: Option, } #[derive(Default)] @@ -367,6 +371,10 @@ impl ConfigurationOptions { .clone() .unwrap_or_else(|| repo_root.join_component(CONFIG_FILE)) } + + pub fn allow_no_turbo_json(&self) -> bool { + self.allow_no_turbo_json.unwrap_or_default() + } } // Maps Some("") to None to emulate how Go handles empty strings diff --git a/crates/turborepo-lib/src/engine/builder.rs b/crates/turborepo-lib/src/engine/builder.rs index 00aaf64a6b47a..484cce98974e5 100644 --- a/crates/turborepo-lib/src/engine/builder.rs +++ b/crates/turborepo-lib/src/engine/builder.rs @@ -14,8 +14,7 @@ use crate::{ run::task_id::{TaskId, TaskName}, task_graph::TaskDefinition, turbo_json::{ - validate_extends, validate_no_package_task_syntax, RawTaskDefinition, TurboJson, - CONFIG_FILE, + validate_extends, validate_no_package_task_syntax, RawTaskDefinition, TurboJsonLoader, }, }; @@ -95,8 +94,8 @@ pub enum Error { pub struct EngineBuilder<'a> { repo_root: &'a AbsoluteSystemPath, package_graph: &'a PackageGraph, + turbo_json_loader: Option, is_single: bool, - turbo_jsons: Option>, workspaces: Vec, tasks: Vec>>, root_enabled_tasks: HashSet>, @@ -107,13 +106,14 @@ impl<'a> EngineBuilder<'a> { pub fn new( repo_root: &'a AbsoluteSystemPath, package_graph: &'a PackageGraph, + turbo_json_loader: TurboJsonLoader, is_single: bool, ) -> Self { Self { repo_root, package_graph, + turbo_json_loader: Some(turbo_json_loader), is_single, - turbo_jsons: None, workspaces: Vec::new(), tasks: Vec::new(), root_enabled_tasks: HashSet::new(), @@ -121,14 +121,6 @@ impl<'a> EngineBuilder<'a> { } } - pub fn with_turbo_jsons( - mut self, - turbo_jsons: Option>, - ) -> Self { - self.turbo_jsons = turbo_jsons; - self - } - pub fn with_tasks_only(mut self, tasks_only: bool) -> Self { self.tasks_only = tasks_only; self @@ -186,7 +178,10 @@ impl<'a> EngineBuilder<'a> { return Ok(Engine::default().seal()); } - let mut turbo_jsons = self.turbo_jsons.take().unwrap_or_default(); + let mut turbo_json_loader = self + .turbo_json_loader + .take() + .expect("engine builder cannot be constructed without TurboJsonLoader"); let mut missing_tasks: HashMap<&TaskName<'_>, Spanned<()>> = HashMap::from_iter(self.tasks.iter().map(|spanned| spanned.as_ref().split())); let mut traversal_queue = VecDeque::with_capacity(1); @@ -195,7 +190,7 @@ impl<'a> EngineBuilder<'a> { .task_id() .unwrap_or_else(|| TaskId::new(workspace.as_ref(), task.task())); - if self.has_task_definition(&mut turbo_jsons, workspace, task, &task_id)? { + if Self::has_task_definition(&mut turbo_json_loader, workspace, task, &task_id)? { missing_tasks.remove(task.as_inner()); // Even if a task definition was found, we _only_ want to add it as an entry @@ -274,13 +269,12 @@ impl<'a> EngineBuilder<'a> { task_id: task_id.to_string(), }); } - let raw_task_definition = RawTaskDefinition::from_iter(self.task_definition_chain( - &mut turbo_jsons, + + let task_definition = self.task_definition( + &mut turbo_json_loader, &task_id, &task_id.as_non_workspace_task_name(), - )?); - - let task_definition = TaskDefinition::try_from(raw_task_definition)?; + )?; // Skip this iteration of the loop if we've already seen this taskID if visited.contains(task_id.as_inner()) { @@ -370,25 +364,27 @@ impl<'a> EngineBuilder<'a> { // Helper methods used when building the engine fn has_task_definition( - &self, - turbo_jsons: &mut HashMap, + loader: &mut TurboJsonLoader, workspace: &PackageName, task_name: &TaskName<'static>, task_id: &TaskId, ) -> Result { - let turbo_json = self - .turbo_json(turbo_jsons, workspace) - // If there was no turbo.json in the workspace, fallback to the root turbo.json - .or_else(|e| { - if e.is_missing_turbo_json() && !matches!(workspace, PackageName::Root) { + let turbo_json = loader.load(workspace).map_or_else( + |err| { + if matches!(err, config::Error::NoTurboJSON) + && !matches!(workspace, PackageName::Root) + { Ok(None) } else { - Err(e) + Err(err) } - })?; + }, + |turbo_json| Ok(Some(turbo_json)), + )?; let Some(turbo_json) = turbo_json else { - return self.has_task_definition(turbo_jsons, &PackageName::Root, task_name, task_id); + // If there was no turbo.json in the workspace, fallback to the root turbo.json + return Self::has_task_definition(loader, &PackageName::Root, task_name, task_id); }; let task_id_as_name = task_id.as_task_name(); @@ -397,23 +393,36 @@ impl<'a> EngineBuilder<'a> { { Ok(true) } else if !matches!(workspace, PackageName::Root) { - self.has_task_definition(turbo_jsons, &PackageName::Root, task_name, task_id) + Self::has_task_definition(loader, &PackageName::Root, task_name, task_id) } else { Ok(false) } } + fn task_definition( + &self, + turbo_json_loader: &mut TurboJsonLoader, + task_id: &Spanned, + task_name: &TaskName, + ) -> Result { + let raw_task_definition = RawTaskDefinition::from_iter(self.task_definition_chain( + turbo_json_loader, + task_id, + task_name, + )?); + + Ok(TaskDefinition::try_from(raw_task_definition)?) + } + fn task_definition_chain( &self, - turbo_jsons: &mut HashMap, + turbo_json_loader: &mut TurboJsonLoader, task_id: &Spanned, task_name: &TaskName, ) -> Result, Error> { let mut task_definitions = Vec::new(); - let root_turbo_json = self - .turbo_json(turbo_jsons, &PackageName::Root)? - .ok_or(Error::Config(crate::config::Error::NoTurboJSON))?; + let root_turbo_json = turbo_json_loader.load(&PackageName::Root)?; if let Some(root_definition) = root_turbo_json.task(task_id, task_name) { task_definitions.push(root_definition) @@ -434,8 +443,8 @@ impl<'a> EngineBuilder<'a> { } if task_id.package() != ROOT_PKG_NAME { - match self.turbo_json(turbo_jsons, &PackageName::from(task_id.package())) { - Ok(Some(workspace_json)) => { + match turbo_json_loader.load(&PackageName::from(task_id.package())) { + Ok(workspace_json) => { let validation_errors = workspace_json .validate(&[validate_no_package_task_syntax, validate_extends]); if !validation_errors.is_empty() { @@ -448,11 +457,9 @@ impl<'a> EngineBuilder<'a> { task_definitions.push(workspace_def.value.clone()); } } - Ok(None) => (), - // swallow the error where the config file doesn't exist, but bubble up other things - Err(e) if e.is_missing_turbo_json() => (), + Err(config::Error::NoTurboJSON) => (), Err(e) => { - return Err(e); + return Err(e.into()); } } } @@ -469,42 +476,6 @@ impl<'a> EngineBuilder<'a> { Ok(task_definitions) } - - fn turbo_json<'b>( - &self, - turbo_jsons: &'b mut HashMap, - workspace: &PackageName, - ) -> Result, Error> { - if turbo_jsons.get(workspace).is_none() { - let json = self.load_turbo_json(workspace)?; - turbo_jsons.insert(workspace.clone(), json); - } - Ok(turbo_jsons.get(workspace)) - } - - fn load_turbo_json(&self, workspace: &PackageName) -> Result { - let package_json = self.package_graph.package_json(workspace).ok_or_else(|| { - Error::MissingPackageJson { - workspace: workspace.clone(), - } - })?; - let workspace_dir = - self.package_graph - .package_dir(workspace) - .ok_or_else(|| Error::MissingPackageJson { - workspace: workspace.clone(), - })?; - let workspace_turbo_json = self - .repo_root - .resolve(workspace_dir) - .join_component(CONFIG_FILE); - Ok(TurboJson::load( - self.repo_root, - &workspace_turbo_json, - package_json, - self.is_single, - )?) - } } impl Error { @@ -548,7 +519,10 @@ mod test { }; use super::*; - use crate::{engine::TaskNode, turbo_json::RawTurboJson}; + use crate::{ + engine::TaskNode, + turbo_json::{RawTurboJson, TurboJson}, + }; // Only used to prevent package graph construction from attempting to read // lockfile from disk @@ -650,41 +624,6 @@ mod test { .unwrap() } - #[test] - fn test_turbo_json_loading() { - let repo_root_dir = TempDir::with_prefix("repo").unwrap(); - let repo_root = AbsoluteSystemPathBuf::new(repo_root_dir.path().to_str().unwrap()).unwrap(); - let package_graph = mock_package_graph( - &repo_root, - package_jsons! { - repo_root, - "a" => [], - "b" => [], - "c" => ["a", "b"] - }, - ); - let engine_builder = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(vec![].into_iter().collect())); - - let a_turbo_json = repo_root.join_components(&["packages", "a", "turbo.json"]); - a_turbo_json.ensure_dir().unwrap(); - - let result = engine_builder.load_turbo_json(&PackageName::from("a")); - assert!( - result.is_err() && result.unwrap_err().is_missing_turbo_json(), - "expected parsing to fail with missing turbo.json" - ); - - a_turbo_json - .create_with_contents(r#"{"tasks": {"build": {}}}"#) - .unwrap(); - - let turbo_json = engine_builder - .load_turbo_json(&PackageName::from("a")) - .unwrap(); - assert_eq!(turbo_json.tasks.len(), 1); - } - fn turbo_json(value: serde_json::Value) -> TurboJson { let json_text = serde_json::to_string(&value).unwrap(); let raw = RawTurboJson::parse(&json_text, "").unwrap(); @@ -702,18 +641,7 @@ mod test { task_id: &'static str, expected: bool, ) { - let repo_root_dir = TempDir::with_prefix("repo").unwrap(); - let repo_root = AbsoluteSystemPathBuf::new(repo_root_dir.path().to_str().unwrap()).unwrap(); - let package_graph = mock_package_graph( - &repo_root, - package_jsons! { - repo_root, - "a" => [], - "b" => [], - "c" => ["a", "b"] - }, - ); - let mut turbo_jsons = vec![ + let turbo_jsons = vec![ ( PackageName::Root, turbo_json(json!({ @@ -735,13 +663,13 @@ mod test { ] .into_iter() .collect(); - let engine_builder = EngineBuilder::new(&repo_root, &package_graph, false); + let mut loader = TurboJsonLoader::noop(turbo_jsons); let task_name = TaskName::from(task_name); let task_id = TaskId::try_from(task_id).unwrap(); - let has_def = engine_builder - .has_task_definition(&mut turbo_jsons, &workspace, &task_name, &task_id) - .unwrap(); + let has_def = + EngineBuilder::has_task_definition(&mut loader, &workspace, &task_name, &task_id) + .unwrap(); assert_eq!(has_def, expected); } @@ -805,8 +733,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("test")))) .with_workspaces(vec![ PackageName::from("a"), @@ -862,8 +790,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("test")))) .with_workspaces(vec![PackageName::from("app2")]) .build() @@ -901,8 +829,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("special")))) .with_workspaces(vec![PackageName::from("app1"), PackageName::from("libA")]) .build() @@ -939,8 +867,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(vec![ Spanned::new(TaskName::from("build")), Spanned::new(TaskName::from("test")), @@ -992,8 +920,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("app1")]) .with_root_tasks(vec![ @@ -1035,8 +963,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("app1")]) .with_root_tasks(vec![TaskName::from("libA#build"), TaskName::from("build")]) @@ -1070,8 +998,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("app1")]) .with_root_tasks(vec![ @@ -1115,8 +1043,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("app1")]) .with_root_tasks(vec![ @@ -1154,8 +1082,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks_only(true) .with_tasks(Some(Spanned::new(TaskName::from("test")))) .with_workspaces(vec![ @@ -1201,8 +1129,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks_only(true) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("b")]) @@ -1240,8 +1168,8 @@ mod test { )] .into_iter() .collect(); - let engine = EngineBuilder::new(&repo_root, &package_graph, false) - .with_turbo_jsons(Some(turbo_jsons)) + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) .with_tasks_only(true) .with_tasks(Some(Spanned::new(TaskName::from("build")))) .with_workspaces(vec![PackageName::from("b")]) diff --git a/crates/turborepo-lib/src/package_changes_watcher.rs b/crates/turborepo-lib/src/package_changes_watcher.rs index deb74acc5d199..d60ace1ffda93 100644 --- a/crates/turborepo-lib/src/package_changes_watcher.rs +++ b/crates/turborepo-lib/src/package_changes_watcher.rs @@ -21,7 +21,7 @@ use turborepo_repository::{ }; use turborepo_scm::package_deps::GitHashes; -use crate::turbo_json::{TurboJson, CONFIG_FILE}; +use crate::turbo_json::{TurboJson, TurboJsonLoader, CONFIG_FILE}; #[derive(Clone)] pub enum PackageChangeEvent { @@ -161,18 +161,6 @@ impl Subscriber { tracing::debug!("no package.json found, package watcher not available"); return None; }; - - let root_turbo_json = TurboJson::load( - &self.repo_root, - &self.repo_root.join_component(CONFIG_FILE), - &root_package_json, - false, - ) - .ok(); - - let gitignore_path = self.repo_root.join_component(".gitignore"); - let (root_gitignore, _) = Gitignore::new(&gitignore_path); - let Ok(pkg_dep_graph) = PackageGraphBuilder::new(&self.repo_root, root_package_json) .build() .await @@ -181,6 +169,18 @@ impl Subscriber { return None; }; + let root_turbo_json = TurboJsonLoader::workspace( + self.repo_root.clone(), + self.repo_root.join_component(CONFIG_FILE), + pkg_dep_graph.packages(), + ) + .load(&PackageName::Root) + .ok() + .cloned(); + + let gitignore_path = self.repo_root.join_component(".gitignore"); + let (root_gitignore, _) = Gitignore::new(&gitignore_path); + Some(( RepoState { root_turbo_json, diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index 04641f93df66c..aee20d56975b5 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -45,7 +45,7 @@ use crate::{ run::{scope, task_access::TaskAccess, task_id::TaskName, Error, Run, RunCache}, shim::TurboState, signal::{SignalHandler, SignalSubscriber}, - turbo_json::{TurboJson, UIMode}, + turbo_json::{TurboJson, TurboJsonLoader, UIMode}, DaemonConnector, }; @@ -65,6 +65,7 @@ pub struct RunBuilder { entrypoint_packages: Option>, should_print_prelude_override: Option, allow_missing_package_manager: bool, + allow_no_turbo_json: bool, } impl RunBuilder { @@ -85,6 +86,7 @@ impl RunBuilder { (!cfg!(windows) || matches!(opts.run_opts.ui_mode, UIMode::Tui)), ); let root_turbo_json_path = config.root_turbo_json_path(&base.repo_root); + let allow_no_turbo_json = config.allow_no_turbo_json(); let CommandBase { repo_root, @@ -105,6 +107,7 @@ impl RunBuilder { should_print_prelude_override: None, allow_missing_package_manager, root_turbo_json_path, + allow_no_turbo_json, }) } @@ -359,19 +362,32 @@ impl RunBuilder { let task_access = TaskAccess::new(self.repo_root.clone(), async_cache.clone(), &scm); task_access.restore_config().await; - let root_turbo_json = task_access - .load_turbo_json(&self.root_turbo_json_path) - .map_or_else( - || { - TurboJson::load( - &self.repo_root, - &self.root_turbo_json_path, - &root_package_json, - is_single_package, - ) - }, - Result::Ok, - )?; + let mut turbo_json_loader = if task_access.is_enabled() { + TurboJsonLoader::task_access( + self.repo_root.clone(), + self.root_turbo_json_path.clone(), + root_package_json.clone(), + ) + } else if is_single_package { + TurboJsonLoader::single_package( + self.repo_root.clone(), + self.root_turbo_json_path.clone(), + root_package_json.clone(), + ) + } else if self.allow_no_turbo_json && !self.root_turbo_json_path.exists() { + TurboJsonLoader::workspace_no_turbo_json( + self.repo_root.clone(), + pkg_dep_graph.packages(), + ) + } else { + TurboJsonLoader::workspace( + self.repo_root.clone(), + self.root_turbo_json_path.clone(), + pkg_dep_graph.packages(), + ) + }; + + let root_turbo_json = turbo_json_loader.load(&PackageName::Root)?.clone(); pkg_dep_graph.validate()?; @@ -384,11 +400,21 @@ impl RunBuilder { )?; let env_at_execution_start = EnvironmentVariableMap::infer(); - let mut engine = self.build_engine(&pkg_dep_graph, &root_turbo_json, &filtered_pkgs)?; + let mut engine = self.build_engine( + &pkg_dep_graph, + &root_turbo_json, + &filtered_pkgs, + turbo_json_loader.clone(), + )?; if self.opts.run_opts.parallel { pkg_dep_graph.remove_package_dependencies(); - engine = self.build_engine(&pkg_dep_graph, &root_turbo_json, &filtered_pkgs)?; + engine = self.build_engine( + &pkg_dep_graph, + &root_turbo_json, + &filtered_pkgs, + turbo_json_loader, + )?; } let color_selector = ColorSelector::default(); @@ -436,18 +462,15 @@ impl RunBuilder { pkg_dep_graph: &PackageGraph, root_turbo_json: &TurboJson, filtered_pkgs: &HashSet, + turbo_json_loader: TurboJsonLoader, ) -> Result { let mut engine = EngineBuilder::new( &self.repo_root, pkg_dep_graph, + turbo_json_loader, self.opts.run_opts.single_package, ) .with_root_tasks(root_turbo_json.tasks.keys().cloned()) - .with_turbo_jsons(Some( - Some((PackageName::Root, root_turbo_json.clone())) - .into_iter() - .collect(), - )) .with_tasks_only(self.opts.run_opts.only) .with_workspaces(filtered_pkgs.clone().into_iter().collect()) .with_tasks(self.opts.run_opts.tasks.iter().map(|task| { diff --git a/crates/turborepo-lib/src/run/summary/task.rs b/crates/turborepo-lib/src/run/summary/task.rs index 77aaa18c2689a..2f87ba15aef62 100644 --- a/crates/turborepo-lib/src/run/summary/task.rs +++ b/crates/turborepo-lib/src/run/summary/task.rs @@ -104,6 +104,8 @@ pub struct TaskSummaryTaskDefinition { env: Vec, pass_through_env: Option>, interactive: bool, + #[serde(skip_serializing_if = "Option::is_none")] + env_mode: Option, } #[derive(Debug, Serialize, Clone)] @@ -279,6 +281,7 @@ impl From for TaskSummaryTaskDefinition { output_logs, persistent, interactive, + env_mode, } = value; let mut outputs = inclusions; @@ -313,6 +316,7 @@ impl From for TaskSummaryTaskDefinition { interactive, env, pass_through_env, + env_mode, } } } diff --git a/crates/turborepo-lib/src/run/task_access.rs b/crates/turborepo-lib/src/run/task_access.rs index 65fa374b9c26b..c6fc7798e3275 100644 --- a/crates/turborepo-lib/src/run/task_access.rs +++ b/crates/turborepo-lib/src/run/task_access.rs @@ -7,13 +7,13 @@ use std::{ use serde::Deserialize; use tracing::{debug, error, warn}; -use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, PathRelation}; +use turbopath::{AbsoluteSystemPathBuf, PathRelation}; use turborepo_cache::AsyncCache; use turborepo_scm::SCM; use turborepo_unescape::UnescapedString; use super::ConfigCache; -use crate::{config::RawTurboJson, gitignore::ensure_turbo_is_gitignored, turbo_json::TurboJson}; +use crate::{config::RawTurboJson, gitignore::ensure_turbo_is_gitignored}; // Environment variable key that will be used to enable, and set the expected // trace location @@ -245,25 +245,6 @@ impl TaskAccess { } } - /// Attempt to load a task traced turbo.json - pub fn load_turbo_json(&self, root_turbo_json_path: &AbsoluteSystemPath) -> Option { - if !self.enabled { - return None; - } - let trace_json_path = self.repo_root.join_components(&TASK_ACCESS_CONFIG_PATH); - let turbo_from_trace = TurboJson::read(&self.repo_root, &trace_json_path); - - // check the zero config case (turbo trace file, but no turbo.json file) - if let Ok(turbo_from_trace) = turbo_from_trace { - if !root_turbo_json_path.exists() { - debug!("Using turbo.json synthesized from trace file"); - return Some(turbo_from_trace); - } - } - - None - } - async fn to_file(&self) -> Result<(), ToFileError> { // if task access tracing is not enabled, we don't need to do anything if !self.is_enabled() { diff --git a/crates/turborepo-lib/src/task_graph/mod.rs b/crates/turborepo-lib/src/task_graph/mod.rs index e1042db9d87f9..43cd452b296c6 100644 --- a/crates/turborepo-lib/src/task_graph/mod.rs +++ b/crates/turborepo-lib/src/task_graph/mod.rs @@ -9,7 +9,7 @@ use turborepo_errors::Spanned; pub use visitor::{Error as VisitorError, Visitor}; use crate::{ - cli::OutputLogsMode, + cli::{EnvMode, OutputLogsMode}, run::task_id::{TaskId, TaskName}, turbo_json::RawTaskDefinition, }; @@ -76,6 +76,9 @@ pub struct TaskDefinition { // Tasks that take stdin input cannot be cached as their outputs may depend on the // input. pub interactive: bool, + + // Override for global env mode setting + pub env_mode: Option, } impl Default for TaskDefinition { @@ -91,6 +94,7 @@ impl Default for TaskDefinition { output_logs: Default::default(), persistent: Default::default(), interactive: Default::default(), + env_mode: Default::default(), } } } diff --git a/crates/turborepo-lib/src/task_graph/visitor.rs b/crates/turborepo-lib/src/task_graph/visitor.rs index 4c37eaa77d943..f2313e4ad9584 100644 --- a/crates/turborepo-lib/src/task_graph/visitor.rs +++ b/crates/turborepo-lib/src/task_graph/visitor.rs @@ -219,7 +219,7 @@ impl<'a> Visitor<'a> { .task_definition(&info) .ok_or(Error::MissingDefinition)?; - let task_env_mode = self.global_env_mode; + let task_env_mode = task_definition.env_mode.unwrap_or(self.global_env_mode); package_task_event.track_env_mode(&task_env_mode.to_string()); let dependency_set = engine.dependencies(&info).ok_or(Error::MissingDefinition)?; diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs new file mode 100644 index 0000000000000..b01fb054babfc --- /dev/null +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -0,0 +1,679 @@ +use std::collections::HashMap; + +use tracing::debug; +use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; +use turborepo_errors::Spanned; +use turborepo_repository::{ + package_graph::{PackageInfo, PackageName}, + package_json::PackageJson, +}; + +use super::{Pipeline, RawTaskDefinition, TurboJson, CONFIG_FILE}; +use crate::{ + cli::EnvMode, + config::Error, + run::{task_access::TASK_ACCESS_CONFIG_PATH, task_id::TaskName}, +}; + +/// Structure for loading TurboJson structures. +/// Depending on the strategy used, TurboJson might not correspond to +/// `turbo.json` file. +#[derive(Debug, Clone)] +pub struct TurboJsonLoader { + repo_root: AbsoluteSystemPathBuf, + cache: HashMap, + strategy: Strategy, +} + +#[derive(Debug, Clone)] +enum Strategy { + SinglePackage { + root_turbo_json: AbsoluteSystemPathBuf, + package_json: PackageJson, + }, + Workspace { + // Map of package names to their package specific turbo.json + packages: HashMap, + }, + WorkspaceNoTurboJson { + // Map of package names to their scripts + packages: HashMap>, + }, + TaskAccess { + root_turbo_json: AbsoluteSystemPathBuf, + package_json: PackageJson, + }, + Noop, +} + +impl TurboJsonLoader { + /// Create a loader that will load turbo.json files throughout the workspace + pub fn workspace<'a>( + repo_root: AbsoluteSystemPathBuf, + root_turbo_json_path: AbsoluteSystemPathBuf, + packages: impl Iterator, + ) -> Self { + let packages = package_turbo_jsons(&repo_root, root_turbo_json_path, packages); + Self { + repo_root, + cache: HashMap::new(), + strategy: Strategy::Workspace { packages }, + } + } + + /// Create a loader that will construct turbo.json structures based on + /// workspace `package.json`s. + pub fn workspace_no_turbo_json<'a>( + repo_root: AbsoluteSystemPathBuf, + packages: impl Iterator, + ) -> Self { + let packages = workspace_package_scripts(packages); + Self { + repo_root, + cache: HashMap::new(), + strategy: Strategy::WorkspaceNoTurboJson { packages }, + } + } + + /// Create a loader that will load a root turbo.json or synthesize one if + /// the file doesn't exist + pub fn single_package( + repo_root: AbsoluteSystemPathBuf, + root_turbo_json: AbsoluteSystemPathBuf, + package_json: PackageJson, + ) -> Self { + Self { + repo_root, + cache: HashMap::new(), + strategy: Strategy::SinglePackage { + root_turbo_json, + package_json, + }, + } + } + + /// Create a loader that will load a root turbo.json or synthesize one if + /// the file doesn't exist + pub fn task_access( + repo_root: AbsoluteSystemPathBuf, + root_turbo_json: AbsoluteSystemPathBuf, + package_json: PackageJson, + ) -> Self { + Self { + repo_root, + cache: HashMap::new(), + strategy: Strategy::TaskAccess { + root_turbo_json, + package_json, + }, + } + } + + /// Create a loader that will only return provided turbo.jsons and will + /// never hit the file system. + /// Primarily intended for testing + pub fn noop(turbo_jsons: HashMap) -> Self { + Self { + // This never gets read from so we populate it with + repo_root: AbsoluteSystemPath::new(if cfg!(windows) { "C:\\" } else { "/" }) + .expect("wasn't able to create absolute system path") + .to_owned(), + cache: turbo_jsons, + strategy: Strategy::Noop, + } + } + + /// Load a turbo.json for a given package + pub fn load<'a>(&'a mut self, package: &PackageName) -> Result<&'a TurboJson, Error> { + if !self.cache.contains_key(package) { + let turbo_json = self.uncached_load(package)?; + self.cache.insert(package.clone(), turbo_json); + } + Ok(self + .cache + .get(package) + .expect("just inserted value for this key")) + } + + fn uncached_load(&self, package: &PackageName) -> Result { + match &self.strategy { + Strategy::SinglePackage { + package_json, + root_turbo_json, + } => { + if !matches!(package, PackageName::Root) { + Err(Error::InvalidTurboJsonLoad(package.clone())) + } else { + load_from_root_package_json(&self.repo_root, root_turbo_json, package_json) + } + } + Strategy::Workspace { packages } => { + let path = packages.get(package).ok_or_else(|| Error::NoTurboJSON)?; + load_from_file(&self.repo_root, path) + } + Strategy::WorkspaceNoTurboJson { packages } => { + let script_names = packages.get(package).ok_or(Error::NoTurboJSON)?; + if matches!(package, PackageName::Root) { + root_turbo_json_from_scripts(script_names) + } else { + workspace_turbo_json_from_scripts(script_names) + } + } + Strategy::TaskAccess { + package_json, + root_turbo_json, + } => { + if !matches!(package, PackageName::Root) { + Err(Error::InvalidTurboJsonLoad(package.clone())) + } else { + load_task_access_trace_turbo_json( + &self.repo_root, + root_turbo_json, + package_json, + ) + } + } + Strategy::Noop => Err(Error::NoTurboJSON), + } + } +} + +/// Map all packages in the package graph to their turbo.json path +fn package_turbo_jsons<'a>( + repo_root: &AbsoluteSystemPath, + root_turbo_json_path: AbsoluteSystemPathBuf, + packages: impl Iterator, +) -> HashMap { + let mut package_turbo_jsons = HashMap::new(); + package_turbo_jsons.insert(PackageName::Root, root_turbo_json_path); + package_turbo_jsons.extend(packages.filter_map(|(pkg, info)| { + if pkg == &PackageName::Root { + None + } else { + Some(( + pkg.clone(), + repo_root + .resolve(info.package_path()) + .join_component(CONFIG_FILE), + )) + } + })); + package_turbo_jsons +} + +/// Map all packages in the package graph to their scripts +fn workspace_package_scripts<'a>( + packages: impl Iterator, +) -> HashMap> { + packages + .map(|(pkg, info)| { + ( + pkg.clone(), + info.package_json.scripts.keys().cloned().collect(), + ) + }) + .collect() +} + +fn load_from_file( + repo_root: &AbsoluteSystemPath, + turbo_json_path: &AbsoluteSystemPath, +) -> Result { + match TurboJson::read(repo_root, turbo_json_path) { + // If the file didn't exist, throw a custom error here instead of propagating + Err(Error::Io(_)) => Err(Error::NoTurboJSON), + // There was an error, and we don't have any chance of recovering + // because we aren't synthesizing anything + Err(e) => Err(e), + // We're not synthesizing anything and there was no error, we're done + Ok(turbo) => Ok(turbo), + } +} + +fn load_from_root_package_json( + repo_root: &AbsoluteSystemPath, + turbo_json_path: &AbsoluteSystemPath, + root_package_json: &PackageJson, +) -> Result { + let mut turbo_json = match TurboJson::read(repo_root, turbo_json_path) { + // we're synthesizing, but we have a starting point + // Note: this will have to change to support task inference in a monorepo + // for now, we're going to error on any "root" tasks and turn non-root tasks into root + // tasks + Ok(mut turbo_json) => { + let mut pipeline = Pipeline::default(); + for (task_name, task_definition) in turbo_json.tasks { + if task_name.is_package_task() { + let (span, text) = task_definition.span_and_text("turbo.json"); + + return Err(Error::PackageTaskInSinglePackageMode { + task_id: task_name.to_string(), + span, + text, + }); + } + + pipeline.insert(task_name.into_root_task(), task_definition); + } + + turbo_json.tasks = pipeline; + + turbo_json + } + // turbo.json doesn't exist, but we're going try to synthesize something + Err(Error::Io(_)) => TurboJson::default(), + // some other happened, we can't recover + Err(e) => { + return Err(e); + } + }; + + // TODO: Add location info from package.json + for script_name in root_package_json.scripts.keys() { + let task_name = TaskName::from(script_name.as_str()); + if !turbo_json.has_task(&task_name) { + let task_name = task_name.into_root_task(); + // Explicitly set cache to Some(false) in this definition + // so we can pretend it was set on purpose. That way it + // won't get clobbered by the merge function. + turbo_json.tasks.insert( + task_name, + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + ..RawTaskDefinition::default() + }), + ); + } + } + + Ok(turbo_json) +} + +fn root_turbo_json_from_scripts(scripts: &[String]) -> Result { + let mut turbo_json = TurboJson { + ..Default::default() + }; + for script in scripts { + let task_name = TaskName::from(script.as_str()).into_root_task(); + turbo_json.tasks.insert( + task_name, + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + env_mode: Some(EnvMode::Loose), + ..Default::default() + }), + ); + } + Ok(turbo_json) +} + +fn workspace_turbo_json_from_scripts(scripts: &[String]) -> Result { + let mut turbo_json = TurboJson { + extends: Spanned::new(vec!["//".to_owned()]), + ..Default::default() + }; + for script in scripts { + let task_name = TaskName::from(script.clone()); + turbo_json.tasks.insert( + task_name, + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + env_mode: Some(EnvMode::Loose), + ..Default::default() + }), + ); + } + Ok(turbo_json) +} + +fn load_task_access_trace_turbo_json( + repo_root: &AbsoluteSystemPath, + turbo_json_path: &AbsoluteSystemPath, + root_package_json: &PackageJson, +) -> Result { + let trace_json_path = repo_root.join_components(&TASK_ACCESS_CONFIG_PATH); + let turbo_from_trace = TurboJson::read(repo_root, &trace_json_path); + + // check the zero config case (turbo trace file, but no turbo.json file) + if let Ok(turbo_from_trace) = turbo_from_trace { + if !turbo_json_path.exists() { + debug!("Using turbo.json synthesized from trace file"); + return Ok(turbo_from_trace); + } + } + load_from_root_package_json(repo_root, turbo_json_path, root_package_json) +} + +#[cfg(test)] +mod test { + use std::{collections::BTreeMap, fs}; + + use anyhow::Result; + use tempfile::tempdir; + use test_case::test_case; + + use super::*; + use crate::{task_graph::TaskDefinition, turbo_json::CONFIG_FILE}; + + #[test_case(r"{}", TurboJson::default() ; "empty")] + #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.js"] }"#, + TurboJson { + global_deps: vec!["jest.config.js".to_string(), "tsconfig.json".to_string()], + ..TurboJson::default() + } + ; "global dependencies (sorted)")] + #[test_case(r#"{ "globalPassThroughEnv": ["GITHUB_TOKEN", "AWS_SECRET_KEY"] }"#, + TurboJson { + global_pass_through_env: Some(vec!["AWS_SECRET_KEY".to_string(), "GITHUB_TOKEN".to_string()]), + ..TurboJson::default() + } + )] + #[test_case(r#"{ "//": "A comment"}"#, TurboJson::default() ; "faux comment")] + #[test_case(r#"{ "//": "A comment", "//": "Another comment" }"#, TurboJson::default() ; "two faux comments")] + fn test_get_root_turbo_no_synthesizing( + turbo_json_content: &str, + expected_turbo_json: TurboJson, + ) -> Result<()> { + let root_dir = tempdir()?; + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path())?; + let root_turbo_json = repo_root.join_component("turbo.json"); + fs::write(&root_turbo_json, turbo_json_content)?; + let mut loader = TurboJsonLoader { + repo_root: repo_root.to_owned(), + cache: HashMap::new(), + strategy: Strategy::Workspace { + packages: vec![(PackageName::Root, root_turbo_json)] + .into_iter() + .collect(), + }, + }; + + let mut turbo_json = loader.load(&PackageName::Root)?.clone(); + + turbo_json.text = None; + turbo_json.path = None; + assert_eq!(turbo_json, expected_turbo_json); + + Ok(()) + } + + #[test_case( + None, + PackageJson { + scripts: [("build".to_string(), Spanned::new("echo build".to_string()))].into_iter().collect(), + ..PackageJson::default() + }, + TurboJson { + tasks: Pipeline([( + "//#build".into(), + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + ..RawTaskDefinition::default() + }) + )].into_iter().collect() + ), + ..TurboJson::default() + } + )] + #[test_case( + Some(r#"{ + "tasks": { + "build": { + "cache": true + } + } + }"#), + PackageJson { + scripts: [("test".to_string(), Spanned::new("echo test".to_string()))].into_iter().collect(), + ..PackageJson::default() + }, + TurboJson { + tasks: Pipeline([( + "//#build".into(), + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(true).with_range(81..85)), + ..RawTaskDefinition::default() + }).with_range(50..103) + ), + ( + "//#test".into(), + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + ..RawTaskDefinition::default() + }) + )].into_iter().collect()), + ..TurboJson::default() + } + )] + fn test_get_root_turbo_with_synthesizing( + turbo_json_content: Option<&str>, + root_package_json: PackageJson, + expected_turbo_json: TurboJson, + ) -> Result<()> { + let root_dir = tempdir()?; + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path())?; + let root_turbo_json = repo_root.join_component(CONFIG_FILE); + + if let Some(content) = turbo_json_content { + fs::write(&root_turbo_json, content)?; + } + + let mut loader = TurboJsonLoader::single_package( + repo_root.to_owned(), + root_turbo_json, + root_package_json, + ); + let mut turbo_json = loader.load(&PackageName::Root)?.clone(); + turbo_json.text = None; + turbo_json.path = None; + for (_, task_definition) in turbo_json.tasks.iter_mut() { + task_definition.path = None; + task_definition.text = None; + } + assert_eq!(turbo_json, expected_turbo_json); + + Ok(()) + } + + #[test_case( + Some(r#"{ "tasks": {"//#build": {"env": ["SPECIAL_VAR"]}} }"#), + Some(r#"{ "tasks": {"build": {"env": ["EXPLICIT_VAR"]}} }"#), + TaskDefinition { env: vec!["EXPLICIT_VAR".to_string()], .. Default::default() } + ; "both present")] + #[test_case( + None, + Some(r#"{ "tasks": {"build": {"env": ["EXPLICIT_VAR"]}} }"#), + TaskDefinition { env: vec!["EXPLICIT_VAR".to_string()], .. Default::default() } + ; "no trace")] + #[test_case( + Some(r#"{ "tasks": {"//#build": {"env": ["SPECIAL_VAR"]}} }"#), + None, + TaskDefinition { env: vec!["SPECIAL_VAR".to_string()], .. Default::default() } + ; "no turbo.json")] + #[test_case( + None, + None, + TaskDefinition { cache: false, .. Default::default() } + ; "both missing")] + fn test_task_access_loading( + trace_contents: Option<&str>, + turbo_json_content: Option<&str>, + expected_root_build: TaskDefinition, + ) -> Result<()> { + let root_dir = tempdir()?; + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path())?; + let root_turbo_json = repo_root.join_component(CONFIG_FILE); + + if let Some(content) = turbo_json_content { + root_turbo_json.create_with_contents(content.as_bytes())?; + } + if let Some(content) = trace_contents { + let trace_path = repo_root.join_components(&TASK_ACCESS_CONFIG_PATH); + trace_path.ensure_dir()?; + trace_path.create_with_contents(content.as_bytes())?; + } + + let mut scripts = BTreeMap::new(); + scripts.insert("build".into(), Spanned::new("echo building".into())); + let root_package_json = PackageJson { + scripts, + ..Default::default() + }; + + let mut loader = + TurboJsonLoader::task_access(repo_root.to_owned(), root_turbo_json, root_package_json); + let turbo_json = loader.load(&PackageName::Root)?; + let root_build = turbo_json + .tasks + .get(&TaskName::from("//#build")) + .expect("root build should always exist") + .as_inner(); + + assert_eq!( + expected_root_build, + TaskDefinition::try_from(root_build.clone())? + ); + + Ok(()) + } + + #[test] + fn test_single_package_loading_non_root() { + let junk_path = AbsoluteSystemPath::new(if cfg!(windows) { + "C:\\never\\loaded" + } else { + "/never/loaded" + }) + .unwrap(); + let non_root = PackageName::from("some-pkg"); + let single_loader = TurboJsonLoader::single_package( + junk_path.to_owned(), + junk_path.to_owned(), + PackageJson::default(), + ); + let task_access_loader = TurboJsonLoader::task_access( + junk_path.to_owned(), + junk_path.to_owned(), + PackageJson::default(), + ); + + for mut loader in [single_loader, task_access_loader] { + let result = loader.load(&non_root); + assert!(result.is_err()); + let err = result.unwrap_err(); + assert!( + matches!(err, Error::InvalidTurboJsonLoad(_)), + "expected {err} to be no turbo json" + ); + } + } + + #[test] + fn test_workspace_turbo_json_loading() { + let root_dir = tempdir().unwrap(); + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path()).unwrap(); + let a_turbo_json = repo_root.join_components(&["packages", "a", "turbo.json"]); + a_turbo_json.ensure_dir().unwrap(); + let packages = vec![(PackageName::from("a"), a_turbo_json.clone())] + .into_iter() + .collect(); + + let mut loader = TurboJsonLoader { + repo_root: repo_root.to_owned(), + cache: HashMap::new(), + strategy: Strategy::Workspace { packages }, + }; + let result = loader.load(&PackageName::from("a")); + assert!( + matches!(result.unwrap_err(), Error::NoTurboJSON), + "expected parsing to fail with missing turbo.json" + ); + + a_turbo_json + .create_with_contents(r#"{"tasks": {"build": {}}}"#) + .unwrap(); + + let turbo_json = loader.load(&PackageName::from("a")).unwrap(); + assert_eq!(turbo_json.tasks.len(), 1); + } + + #[test] + fn test_turbo_json_caching() { + let root_dir = tempdir().unwrap(); + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path()).unwrap(); + let a_turbo_json = repo_root.join_components(&["packages", "a", "turbo.json"]); + a_turbo_json.ensure_dir().unwrap(); + let packages = vec![(PackageName::from("a"), a_turbo_json.clone())] + .into_iter() + .collect(); + + let mut loader = TurboJsonLoader { + repo_root: repo_root.to_owned(), + cache: HashMap::new(), + strategy: Strategy::Workspace { packages }, + }; + a_turbo_json + .create_with_contents(r#"{"tasks": {"build": {}}}"#) + .unwrap(); + + let turbo_json = loader.load(&PackageName::from("a")).unwrap(); + assert_eq!(turbo_json.tasks.len(), 1); + a_turbo_json.remove().unwrap(); + assert!(loader.load(&PackageName::from("a")).is_ok()); + } + + #[test] + fn test_no_turbo_json() { + let root_dir = tempdir().unwrap(); + let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path()).unwrap(); + let packages = vec![ + ( + PackageName::Root, + vec!["build".to_owned(), "lint".to_owned(), "test".to_owned()], + ), + ( + PackageName::from("pkg-a"), + vec!["build".to_owned(), "lint".to_owned(), "special".to_owned()], + ), + ] + .into_iter() + .collect(); + + let mut loader = TurboJsonLoader { + repo_root: repo_root.to_owned(), + cache: HashMap::new(), + strategy: Strategy::WorkspaceNoTurboJson { packages }, + }; + + { + let root_json = loader.load(&PackageName::Root).unwrap(); + for task_name in ["//#build", "//#lint", "//#test"] { + if let Some(def) = root_json.tasks.get(&TaskName::from(task_name)) { + assert_eq!( + def.cache.as_ref().map(|cache| *cache.as_inner()), + Some(false) + ); + } else { + panic!("didn't find {task_name}"); + } + } + } + + { + let pkg_a_json = loader.load(&PackageName::from("pkg-a")).unwrap(); + for task_name in ["build", "lint", "special"] { + if let Some(def) = pkg_a_json.tasks.get(&TaskName::from(task_name)) { + assert_eq!( + def.cache.as_ref().map(|cache| *cache.as_inner()), + Some(false) + ); + } else { + panic!("didn't find {task_name}"); + } + } + } + // Should get no turbo.json error if package wasn't declared + let goose_err = loader.load(&PackageName::from("goose")).unwrap_err(); + assert!(matches!(goose_err, Error::NoTurboJSON)); + } +} diff --git a/crates/turborepo-lib/src/turbo_json/mod.rs b/crates/turborepo-lib/src/turbo_json/mod.rs index e84b0cf6073c1..471990a7ec066 100644 --- a/crates/turborepo-lib/src/turbo_json/mod.rs +++ b/crates/turborepo-lib/src/turbo_json/mod.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; use struct_iterable::Iterable; use turbopath::AbsoluteSystemPath; use turborepo_errors::Spanned; -use turborepo_repository::{package_graph::ROOT_PKG_NAME, package_json::PackageJson}; +use turborepo_repository::package_graph::ROOT_PKG_NAME; use turborepo_unescape::UnescapedString; use crate::{ @@ -25,8 +25,11 @@ use crate::{ task_graph::{TaskDefinition, TaskOutputs}, }; +mod loader; pub mod parser; +pub use loader::TurboJsonLoader; + #[derive(Serialize, Deserialize, Debug, Default, PartialEq, Clone, Deserializable)] #[serde(rename_all = "camelCase")] pub struct SpacesJson { @@ -221,6 +224,10 @@ pub struct RawTaskDefinition { output_logs: Option>, #[serde(skip_serializing_if = "Option::is_none")] interactive: Option>, + // TODO: Remove this once we have the ability to load task definitions directly + // instead of deriving them from a TurboJson + #[serde(skip)] + env_mode: Option, } macro_rules! set_field { @@ -253,6 +260,7 @@ impl RawTaskDefinition { set_field!(self, other, env); set_field!(self, other, pass_through_env); set_field!(self, other, interactive); + set_field!(self, other, env_mode); } } @@ -401,6 +409,7 @@ impl TryFrom for TaskDefinition { output_logs: *raw_task.output_logs.unwrap_or_default(), persistent: *raw_task.persistent.unwrap_or_default(), interactive, + env_mode: raw_task.env_mode, }) } } @@ -548,75 +557,6 @@ impl TryFrom for TurboJson { } impl TurboJson { - /// Loads turbo.json by reading the file at `dir` and optionally combining - /// with synthesized information from the provided package.json - pub fn load( - repo_root: &AbsoluteSystemPath, - turbo_json_path: &AbsoluteSystemPath, - root_package_json: &PackageJson, - include_synthesized_from_root_package_json: bool, - ) -> Result { - let turbo_from_files = Self::read(repo_root, turbo_json_path); - - let mut turbo_json = match (include_synthesized_from_root_package_json, turbo_from_files) { - // If the file didn't exist, throw a custom error here instead of propagating - (false, Err(Error::Io(_))) => return Err(Error::NoTurboJSON), - // There was an error, and we don't have any chance of recovering - // because we aren't synthesizing anything - (false, Err(e)) => return Err(e), - // We're not synthesizing anything and there was no error, we're done - (false, Ok(turbo)) => return Ok(turbo), - // turbo.json doesn't exist, but we're going try to synthesize something - (true, Err(Error::Io(_))) => TurboJson::default(), - // some other happened, we can't recover - (true, Err(e)) => return Err(e), - // we're synthesizing, but we have a starting point - // Note: this will have to change to support task inference in a monorepo - // for now, we're going to error on any "root" tasks and turn non-root tasks into root - // tasks - (true, Ok(mut turbo_from_files)) => { - let mut pipeline = Pipeline::default(); - for (task_name, task_definition) in turbo_from_files.tasks { - if task_name.is_package_task() { - let (span, text) = task_definition.span_and_text("turbo.json"); - - return Err(Error::PackageTaskInSinglePackageMode { - task_id: task_name.to_string(), - span, - text, - }); - } - - pipeline.insert(task_name.into_root_task(), task_definition); - } - - turbo_from_files.tasks = pipeline; - - turbo_from_files - } - }; - - // TODO: Add location info from package.json - for script_name in root_package_json.scripts.keys() { - let task_name = TaskName::from(script_name.as_str()); - if !turbo_json.has_task(&task_name) { - let task_name = task_name.into_root_task(); - // Explicitly set cache to Some(false) in this definition - // so we can pretend it was set on purpose. That way it - // won't get clobbered by the merge function. - turbo_json.tasks.insert( - task_name, - Spanned::new(RawTaskDefinition { - cache: Some(Spanned::new(false)), - ..RawTaskDefinition::default() - }), - ); - } - } - - Ok(turbo_json) - } - fn has_task(&self, task_name: &TaskName) -> bool { for key in self.tasks.keys() { if key == task_name || (key.task() == task_name.task() && !task_name.is_package_task()) @@ -740,142 +680,22 @@ fn gather_env_vars( #[cfg(test)] mod tests { - use std::fs; - use anyhow::Result; use biome_deserialize::json::deserialize_from_json_str; use biome_json_parser::JsonParserOptions; use pretty_assertions::assert_eq; use serde_json::json; - use tempfile::tempdir; use test_case::test_case; - use turbopath::AbsoluteSystemPath; - use turborepo_repository::package_json::PackageJson; use turborepo_unescape::UnescapedString; - use super::{Pipeline, RawTurboJson, Spanned, UIMode}; + use super::{RawTurboJson, Spanned, UIMode}; use crate::{ cli::OutputLogsMode, run::task_id::TaskName, task_graph::{TaskDefinition, TaskOutputs}, - turbo_json::{RawTaskDefinition, TurboJson, CONFIG_FILE}, + turbo_json::RawTaskDefinition, }; - #[test_case(r"{}", TurboJson::default() ; "empty")] - #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.js"] }"#, - TurboJson { - global_deps: vec!["jest.config.js".to_string(), "tsconfig.json".to_string()], - ..TurboJson::default() - } - ; "global dependencies (sorted)")] - #[test_case(r#"{ "globalPassThroughEnv": ["GITHUB_TOKEN", "AWS_SECRET_KEY"] }"#, - TurboJson { - global_pass_through_env: Some(vec!["AWS_SECRET_KEY".to_string(), "GITHUB_TOKEN".to_string()]), - ..TurboJson::default() - } - )] - #[test_case(r#"{ "//": "A comment"}"#, TurboJson::default() ; "faux comment")] - #[test_case(r#"{ "//": "A comment", "//": "Another comment" }"#, TurboJson::default() ; "two faux comments")] - fn test_get_root_turbo_no_synthesizing( - turbo_json_content: &str, - expected_turbo_json: TurboJson, - ) -> Result<()> { - let root_dir = tempdir()?; - let root_package_json = PackageJson::default(); - let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path())?; - fs::write(repo_root.join_component("turbo.json"), turbo_json_content)?; - - let mut turbo_json = TurboJson::load( - repo_root, - &repo_root.join_component(CONFIG_FILE), - &root_package_json, - false, - )?; - - turbo_json.text = None; - turbo_json.path = None; - assert_eq!(turbo_json, expected_turbo_json); - - Ok(()) - } - - #[test_case( - None, - PackageJson { - scripts: [("build".to_string(), Spanned::new("echo build".to_string()))].into_iter().collect(), - ..PackageJson::default() - }, - TurboJson { - tasks: Pipeline([( - "//#build".into(), - Spanned::new(RawTaskDefinition { - cache: Some(Spanned::new(false)), - ..RawTaskDefinition::default() - }) - )].into_iter().collect() - ), - ..TurboJson::default() - } - )] - #[test_case( - Some(r#"{ - "tasks": { - "build": { - "cache": true - } - } - }"#), - PackageJson { - scripts: [("test".to_string(), Spanned::new("echo test".to_string()))].into_iter().collect(), - ..PackageJson::default() - }, - TurboJson { - tasks: Pipeline([( - "//#build".into(), - Spanned::new(RawTaskDefinition { - cache: Some(Spanned::new(true).with_range(81..85)), - ..RawTaskDefinition::default() - }).with_range(50..103) - ), - ( - "//#test".into(), - Spanned::new(RawTaskDefinition { - cache: Some(Spanned::new(false)), - ..RawTaskDefinition::default() - }) - )].into_iter().collect()), - ..TurboJson::default() - } - )] - fn test_get_root_turbo_with_synthesizing( - turbo_json_content: Option<&str>, - root_package_json: PackageJson, - expected_turbo_json: TurboJson, - ) -> Result<()> { - let root_dir = tempdir()?; - let repo_root = AbsoluteSystemPath::from_std_path(root_dir.path())?; - - if let Some(content) = turbo_json_content { - fs::write(repo_root.join_component("turbo.json"), content)?; - } - - let mut turbo_json = TurboJson::load( - repo_root, - &repo_root.join_component(CONFIG_FILE), - &root_package_json, - true, - )?; - turbo_json.text = None; - turbo_json.path = None; - for (_, task_definition) in turbo_json.tasks.iter_mut() { - task_definition.path = None; - task_definition.text = None; - } - assert_eq!(turbo_json, expected_turbo_json); - - Ok(()) - } - #[test_case( "{}", RawTaskDefinition::default(), @@ -912,6 +732,7 @@ mod tests { output_logs: Some(Spanned::new(OutputLogsMode::Full).with_range(246..252)), persistent: Some(Spanned::new(true).with_range(278..282)), interactive: Some(Spanned::new(true).with_range(309..313)), + env_mode: None, }, TaskDefinition { env: vec!["OS".to_string()], @@ -927,6 +748,7 @@ mod tests { topological_dependencies: vec![], persistent: true, interactive: true, + env_mode: None, } ; "full" )] @@ -951,6 +773,7 @@ mod tests { output_logs: Some(Spanned::new(OutputLogsMode::Full).with_range(279..285)), persistent: Some(Spanned::new(true).with_range(315..319)), interactive: None, + env_mode: None, }, TaskDefinition { env: vec!["OS".to_string()], @@ -966,6 +789,7 @@ mod tests { topological_dependencies: vec![], persistent: true, interactive: false, + env_mode: None, } ; "full (windows)" )] diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/.gitignore b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/.gitignore new file mode 100644 index 0000000000000..77af9fc60321d --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.turbo +.npmrc diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/.env.local b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/.env.local new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/package.json b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/package.json new file mode 100644 index 0000000000000..37523c1c8e838 --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/apps/my-app/package.json @@ -0,0 +1,10 @@ +{ + "name": "my-app", + "scripts": { + "build": "echo building", + "test": "echo $MY_VAR" + }, + "dependencies": { + "util": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/bar.txt b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/bar.txt new file mode 100644 index 0000000000000..5e849f85df5d1 --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/bar.txt @@ -0,0 +1 @@ +other file, not a global dependency diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/foo.txt b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/foo.txt new file mode 100644 index 0000000000000..eebae5f3ca7b5 --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/foo.txt @@ -0,0 +1 @@ +global dep! all tasks depend on this content! diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/package.json b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/package.json new file mode 100644 index 0000000000000..e86a3bf3c329b --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/package.json @@ -0,0 +1,11 @@ +{ + "name": "monorepo", + "scripts": { + "something": "turbo run build" + }, + "packageManager": "bower", + "workspaces": [ + "apps/**", + "packages/**" + ] +} diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/another/package.json b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/another/package.json new file mode 100644 index 0000000000000..e9e34ea52c154 --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/another/package.json @@ -0,0 +1,4 @@ +{ + "name": "another", + "scripts": {} +} diff --git a/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/util/package.json b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/util/package.json new file mode 100644 index 0000000000000..7309726a1df4e --- /dev/null +++ b/turborepo-tests/integration/fixtures/monorepo_no_turbo_json/packages/util/package.json @@ -0,0 +1,6 @@ +{ + "name": "util", + "scripts": { + "build": "echo building" + } +} diff --git a/turborepo-tests/integration/tests/run/allow-no-root-turbo.t b/turborepo-tests/integration/tests/run/allow-no-root-turbo.t new file mode 100644 index 0000000000000..cb0ae8d7b1174 --- /dev/null +++ b/turborepo-tests/integration/tests/run/allow-no-root-turbo.t @@ -0,0 +1,50 @@ +Setup + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh monorepo_no_turbo_json + +Run fails if not configured to allow missing turbo.json + $ ${TURBO} test + x Could not find turbo.json. + | Follow directions at https://turbo.build/repo/docs to create one + + [1] +Runs test tasks + $ MY_VAR=foo ${TURBO} test --experimental-allow-no-turbo-json + \xe2\x80\xa2 Packages in scope: another, my-app, util (esc) + \xe2\x80\xa2 Running test in 3 packages (esc) + \xe2\x80\xa2 Remote caching disabled (esc) + my-app:test: cache bypass, force executing d80016a1a60c4c0a + my-app:test: + my-app:test: > test + my-app:test: > echo $MY_VAR + my-app:test: + my-app:test: foo + + Tasks: 1 successful, 1 total + Cached: 0 cached, 1 total + Time:\s*[\.0-9]+m?s (re) + + + +Ensure caching is disabled + $ MY_VAR=foo ${TURBO} test --experimental-allow-no-turbo-json + \xe2\x80\xa2 Packages in scope: another, my-app, util (esc) + \xe2\x80\xa2 Running test in 3 packages (esc) + \xe2\x80\xa2 Remote caching disabled (esc) + my-app:test: cache bypass, force executing d80016a1a60c4c0a + my-app:test: + my-app:test: > test + my-app:test: > echo $MY_VAR + my-app:test: + my-app:test: foo + + Tasks: 1 successful, 1 total + Cached: 0 cached, 1 total + Time:\s*[\.0-9]+m?s (re) + +Finds all tasks based on scripts + $ TURBO_ALLOW_NO_TURBO_JSON=true ${TURBO} build test --dry=json | jq '.tasks | map(.taskId)| sort' + [ + "my-app#build", + "my-app#test", + "util#build" + ] From 2947eaafb1a8c31ad8eb245f2fe00e49472d5a12 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Tue, 17 Sep 2024 11:01:10 -0400 Subject: [PATCH 010/218] hotfix docs (#9159) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description ### Testing Instructions --- .../using-environment-variables.mdx | 34 ++++++++----------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index aa3015494b854..dd244a4baa668 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -6,7 +6,6 @@ description: Learn how to handle environments for your applications. import { Callout } from '#/components/callout'; import { Tabs, Tab } from '#/components/tabs'; import { Accordion, Accordions } from '#/components/accordion'; -import { frameworks } from '@turbo/types'; Environment variable inputs are a vital part of your applications that you'll need to account for in your Turborepo configuration. @@ -57,24 +56,21 @@ Turborepo needs to be aware of your environment variables to account for changes Turborepo automatically adds prefix wildcards to your [`env`](/repo/docs/reference/configuration#env) key for common frameworks. If you're using one of the frameworks below in a package, you don't need to specify environment variables with these prefixes: - - - - - - - - - {frameworks.map(({ name, envWildcards }) => ( - - - - - ))} - -
Framework - env wildcards -
{name}{envWildcards.map((w) => {w}).join(', ')}
+| Framework | `env` wildcard | +| ---------------- | ------------------- | +| Astro | `PUBLIC_*` | +| Blitz | `NEXT_PUBLIC_*` | +| Create React App | `REACT_APP_*` | +| Gatsby | `GATSBY_*` | +| Next.js | `NEXT_PUBLIC_*` | +| Nitro | `NITRO_*` | +| Nuxt.js | `NUXT_*`, `NITRO_*` | +| RedwoodJS | `REDWOOD_ENV_*` | +| Sanity Studio | `SANITY_STUDIO_*` | +| Solid | `VITE_*` | +| SvelteKit | `VITE_*` | +| Vite | `VITE_*` | +| Vue | `VUE_APP_*` | Framework inference is per-package. From ed8ff7233569ea016e963cf59ea96f81f4b407df Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 17 Sep 2024 11:30:35 -0400 Subject: [PATCH 011/218] chore(watch): simplify watch data synchronization (#9154) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Basic view of the futures involved with running `watch` - The `events_fut` takes events from the package changes watcher and folds them into a `ChangedPackages` struct. It then triggers a notify. - The `run_fut` loops waiting for a notification and then performing a run. - Signal handler watching for `SIGINT`s This PR cleans up how packages changes are synchronized between futures: - Removes `RefCell` as `Mutex` already implies mutually exclusive access the the underlying resource - Remove `run_fut` holding onto the changed packages lock for the entirety of it's run. This allows us to switch from `tokio::sync::Mutex` to `std::sync::Mutex`. Which is suggested by the [`tokio::sync::Mutex` docs](https://docs.rs/tokio/latest/tokio/sync/struct.Mutex.html#which-kind-of-mutex-should-you-use) ### Testing Instructions `rustc` + 👀 . Quick gut check by running `turbo watch` and triggering package changes --- crates/turborepo-lib/src/run/watch.rs | 34 +++++++++++++++------------ 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index f72bd2b0b0c8b..ce16c4c02979a 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -1,13 +1,13 @@ -use std::{cell::RefCell, collections::HashSet, sync::Arc}; +use std::{ + collections::HashSet, + ops::DerefMut as _, + sync::{Arc, Mutex}, +}; use futures::StreamExt; use miette::{Diagnostic, SourceSpan}; use thiserror::Error; -use tokio::{ - select, - sync::{Mutex, Notify}, - task::JoinHandle, -}; +use tokio::{select, sync::Notify, task::JoinHandle}; use tracing::{instrument, trace}; use turborepo_repository::package_graph::PackageName; use turborepo_telemetry::events::command::CommandEventBuilder; @@ -172,14 +172,14 @@ impl WatchClient { // We explicitly use a tokio::sync::Mutex here to avoid deadlocks. // If we used a std::sync::Mutex, we could deadlock by spinning the lock // and not yielding back to the tokio runtime. - let changed_packages = Mutex::new(RefCell::new(ChangedPackages::default())); + let changed_packages = Mutex::new(ChangedPackages::default()); let notify_run = Arc::new(Notify::new()); let notify_event = notify_run.clone(); let event_fut = async { while let Some(event) = events.next().await { let event = event?; - Self::handle_change_event(&changed_packages, event.event.unwrap()).await?; + Self::handle_change_event(&changed_packages, event.event.unwrap())?; notify_event.notify_one(); } @@ -189,9 +189,13 @@ impl WatchClient { let run_fut = async { loop { notify_run.notified().await; - let changed_packages_guard = changed_packages.lock().await; - if !changed_packages_guard.borrow().is_empty() { - let changed_packages = changed_packages_guard.take(); + let some_changed_packages = { + let mut changed_packages_guard = + changed_packages.lock().expect("poisoned lock"); + (!changed_packages_guard.is_empty()) + .then(|| std::mem::take(changed_packages_guard.deref_mut())) + }; + if let Some(changed_packages) = some_changed_packages { self.execute_run(changed_packages).await?; } } @@ -214,8 +218,8 @@ impl WatchClient { } #[instrument(skip(changed_packages))] - async fn handle_change_event( - changed_packages: &Mutex>, + fn handle_change_event( + changed_packages: &Mutex, event: proto::package_change_event::Event, ) -> Result<(), Error> { // Should we recover here? @@ -225,7 +229,7 @@ impl WatchClient { }) => { let package_name = PackageName::from(package_name); - match changed_packages.lock().await.get_mut() { + match changed_packages.lock().expect("poisoned lock").deref_mut() { ChangedPackages::All => { // If we've already changed all packages, ignore } @@ -235,7 +239,7 @@ impl WatchClient { } } proto::package_change_event::Event::RediscoverPackages(_) => { - *changed_packages.lock().await.get_mut() = ChangedPackages::All; + *changed_packages.lock().expect("poisoned lock") = ChangedPackages::All; } proto::package_change_event::Event::Error(proto::PackageChangeError { message }) => { return Err(DaemonError::Unavailable(message).into()); From c482ce3f26ce2f3b6c3317694bf42650a4663583 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 17 Sep 2024 17:06:49 -0400 Subject: [PATCH 012/218] feat(query): add array type (#9161) ### Description Added an `Array` type that automatically adds a `length` and `items` field to GraphQL responses. ### Testing Instructions --- crates/turborepo-lib/src/query.rs | 32 ++- turborepo-tests/integration/package.json | 2 +- turborepo-tests/integration/tests/affected.t | 132 +++++++------ .../integration/tests/command-query.t | 186 ++++++++++-------- 4 files changed, 204 insertions(+), 148 deletions(-) diff --git a/crates/turborepo-lib/src/query.rs b/crates/turborepo-lib/src/query.rs index b939b898663c5..c1ce6a1314399 100644 --- a/crates/turborepo-lib/src/query.rs +++ b/crates/turborepo-lib/src/query.rs @@ -38,6 +38,20 @@ impl Query { } } +#[derive(Debug, SimpleObject)] +struct Array { + items: Vec, + length: usize, +} + +impl FromIterator for Array { + fn from_iter>(iter: I) -> Self { + let items: Vec<_> = iter.into_iter().collect(); + let length = items.len(); + Self { items, length } + } +} + struct Package { run: Arc, name: PackageName, @@ -293,7 +307,7 @@ impl Query { &self, base: Option, head: Option, - ) -> Result, Error> { + ) -> Result, Error> { let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); @@ -322,7 +336,7 @@ impl Query { } /// Gets a list of packages that match the given filter - async fn packages(&self, filter: Option) -> Result, Error> { + async fn packages(&self, filter: Option) -> Result, Error> { let Some(filter) = filter else { return Ok(self .run @@ -369,7 +383,7 @@ impl Package { } /// The upstream packages that have this package as a direct dependency - async fn direct_dependents(&self) -> Result, Error> { + async fn direct_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -386,7 +400,7 @@ impl Package { } /// The downstream packages that directly depend on this package - async fn direct_dependencies(&self) -> Result, Error> { + async fn direct_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -402,7 +416,8 @@ impl Package { .collect()) } - async fn all_dependents(&self) -> Result, Error> { + /// The downstream packages that depend on this package, transitively + async fn all_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -417,7 +432,8 @@ impl Package { .collect()) } - async fn all_dependencies(&self) -> Result, Error> { + /// The upstream packages that this package depends on, transitively + async fn all_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); Ok(self .run @@ -433,7 +449,7 @@ impl Package { } /// The downstream packages that depend on this package, indirectly - async fn indirect_dependents(&self) -> Result, Error> { + async fn indirect_dependents(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); let immediate_dependents = self .run @@ -456,7 +472,7 @@ impl Package { } /// The upstream packages that this package depends on, indirectly - async fn indirect_dependencies(&self) -> Result, Error> { + async fn indirect_dependencies(&self) -> Result, Error> { let node: PackageNode = PackageNode::Workspace(self.name.clone()); let immediate_dependencies = self .run diff --git a/turborepo-tests/integration/package.json b/turborepo-tests/integration/package.json index 55edcdeb477ec..252724245b068 100644 --- a/turborepo-tests/integration/package.json +++ b/turborepo-tests/integration/package.json @@ -2,7 +2,7 @@ "name": "turborepo-tests-integration", "scripts": { "test": "prysk tests", - "test:interactive": "prysk --interactive tests", + "test:interactive": "PRYSK_INTERACTIVE=true prysk tests", "test:parallel": ".cram_env/bin/pytest -n auto tests --prysk-shell=`which bash`", "pretest:parallel": ".cram_env/bin/pip3 install --quiet pytest \"prysk[pytest-plugin]\" pytest-xdist" }, diff --git a/turborepo-tests/integration/tests/affected.t b/turborepo-tests/integration/tests/affected.t index 8828d73ddbcac..b35b50b173031 100644 --- a/turborepo-tests/integration/tests/affected.t +++ b/turborepo-tests/integration/tests/affected.t @@ -42,15 +42,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [ - { - "name": "my-app" - } - ] + "affectedPackages": { + "items": [ + { + "name": "my-app" + } + ] + } } } @@ -88,15 +90,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [ - { - "name": "my-app" - } - ] + "affectedPackages": { + "items": [ + { + "name": "my-app" + } + ] + } } } @@ -130,15 +134,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [ - { - "name": "my-app" - } - ] + "affectedPackages": { + "items": [ + { + "name": "my-app" + } + ] + } } } @@ -163,11 +169,13 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages(base: \"HEAD\") { name } }" + $ ${TURBO} query "query { affectedPackages(base: \"HEAD\") { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [] + "affectedPackages": { + "items": [] + } } } @@ -192,11 +200,13 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages(head: \"main\") { name } }" + $ ${TURBO} query "query { affectedPackages(head: \"main\") { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [] + "affectedPackages": { + "items": [] + } } } @@ -235,15 +245,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future { "data": { - "affectedPackages": [ - { - "name": "my-app" - } - ] + "affectedPackages": { + "items": [ + { + "name": "my-app" + } + ] + } } } @@ -277,26 +289,28 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found { "data": { - "affectedPackages": [ - { - "name": "//" - }, - { - "name": "another" - }, - { - "name": "my-app" - }, - { - "name": "util" - } - ] + "affectedPackages": { + "items": [ + { + "name": "//" + }, + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } } } @@ -330,25 +344,27 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { name } }" + $ ${TURBO} query "query { affectedPackages { items { name } } }" WARNING query command is experimental and may change in the future WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found { "data": { - "affectedPackages": [ - { - "name": "//" - }, - { - "name": "another" - }, - { - "name": "my-app" - }, - { - "name": "util" - } - ] + "affectedPackages": { + "items": [ + { + "name": "//" + }, + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } } } \ No newline at end of file diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index 9d1842ee72488..0d924f0de5172 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -2,145 +2,169 @@ Setup $ . ${TESTDIR}/../../helpers/setup_integration_test.sh Query packages - $ ${TURBO} query "query { packages { name } }" | jq + $ ${TURBO} query "query { packages { items { name } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "name": "//" - }, - { - "name": "another" - }, - { - "name": "my-app" - }, - { - "name": "util" - } - ] + "packages": { + "items": [ + { + "name": "//" + }, + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } } } Query packages with equals filter - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { name } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { items { name } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "name": "my-app" - } - ] + "packages": { + "items": [ + { + "name": "my-app" + } + ] + } } } Query packages that have at least one dependent package - $ ${TURBO} query "query { packages(filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 0 } }) { name } }" | jq + $ ${TURBO} query "query { packages(filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 0 } }) { items { name } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "name": "util" - } - ] + "packages": { + "items": [ + { + "name": "util" + } + ] + } } } Get dependents of `util` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"util\" } }) { directDependents { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"util\" } }) { items { directDependents { items { name } } } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "directDependents": [ - { - "name": "my-app" + "packages": { + "items": [ + { + "directDependents": { + "items": [ + { + "name": "my-app" + } + ] } - ] - } - ] + } + ] + } } } Get dependencies of `my-app` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { directDependencies { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { items { directDependencies { items { name } } } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "directDependencies": [ - { - "name": "util" + "packages": { + "items": [ + { + "directDependencies": { + "items": [ + { + "name": "util" + } + ] } - ] - } - ] + } + ] + } } } Get the indirect dependencies of `my-app` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { indirectDependencies { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { items { indirectDependencies { items { name } } } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "indirectDependencies": [ - { - "name": "//" + "packages": { + "items": [ + { + "indirectDependencies": { + "items": [ + { + "name": "//" + } + ] } - ] - } - ] + } + ] + } } } Get all dependencies of `my-app` - $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { allDependencies { name } } }" | jq + $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"my-app\" } }) { items { allDependencies { items { name } } } } }" | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "allDependencies": [ - { - "name": "//" - }, - { - "name": "util" + "packages": { + "items": [ + { + "allDependencies": { + "items": [ + { + "name": "//" + }, + { + "name": "util" + } + ] } - ] - } - ] + } + ] + } } } Write query to file - $ echo 'query { packages { name } }' > query.gql + $ echo 'query { packages { items { name } } }' > query.gql Run the query $ ${TURBO} query query.gql | jq WARNING query command is experimental and may change in the future { "data": { - "packages": [ - { - "name": "//" - }, - { - "name": "another" - }, - { - "name": "my-app" - }, - { - "name": "util" - } - ] + "packages": { + "items": [ + { + "name": "//" + }, + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } } } \ No newline at end of file From 1fbe47519419921992acc928b8a0707dfdda1824 Mon Sep 17 00:00:00 2001 From: James Pulec Date: Tue, 17 Sep 2024 21:34:14 -0700 Subject: [PATCH 013/218] Update constructing-ci.mdx (#9162) ### Description Fix minor typo. --- docs/repo-docs/crafting-your-repository/constructing-ci.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/crafting-your-repository/constructing-ci.mdx b/docs/repo-docs/crafting-your-repository/constructing-ci.mdx index 3c1d0321ba508..a55f348ede4e6 100644 --- a/docs/repo-docs/crafting-your-repository/constructing-ci.mdx +++ b/docs/repo-docs/crafting-your-repository/constructing-ci.mdx @@ -70,7 +70,7 @@ You'll want to use this flag in situations like: - You’re _not_ using a Remote Cache, but still want to do as little work as possible in CI. - You _are_ using a Remote Cache, and you’re in a large repository. By minimizing the amount of tasks that will be restored from cache, there will be less data to send across the network, resulting in faster cache restoration. - You’re already using [advanced filtering techniques](/repo/docs/reference/run#advanced-filtering-examples) or [`turbo-ignore`](/repo/docs/reference/turbo-ignore) to create the same or similar behavior as `--affected`. You likely have the opportunity to simplify your scripting using this new flag. - - `--affected` will can handle shallow clons more gracefully than bespoke filtering because it falls back to running all tasks. + - `--affected` will can handle shallow clones more gracefully than bespoke filtering because it falls back to running all tasks. ### Using `turbo-ignore` From 78e9b2dd6044b153618d98b3e173353e3f26981c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibaut=20Mar=C3=A9chal?= Date: Wed, 18 Sep 2024 22:21:17 +0200 Subject: [PATCH 014/218] Docs: fix line location for TURBO_TEAM env (#9165) ### Description The "UI" section was added at the wrong place in the documentation --- docs/repo-docs/reference/run.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/reference/run.mdx b/docs/repo-docs/reference/run.mdx index da7b54d8021ba..e4f950669bd59 100644 --- a/docs/repo-docs/reference/run.mdx +++ b/docs/repo-docs/reference/run.mdx @@ -518,12 +518,12 @@ turbo run build --team=my-team turbo run build --team=my-team --token=xxxxxxxxxxxxxxxxx ``` +This value can also be set using [the `TURBO_TEAM` system variable](/repo/docs/reference/system-environment-variables). If both are present, the flag value will override the system variable. + ### `--ui` Specify the UI to use for output. Accepts `stream` or `tui`. -This value can also be set using [the `TURBO_TEAM` system variable](/repo/docs/reference/system-environment-variables). If both are present, the flag value will override the system variable. - ### `--verbosity` To specify log level, use `--verbosity=` or `-v, -vv, -vvv`. From 213f659c9d1441bfef5615431792b4ee71043be8 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 18 Sep 2024 17:02:09 -0400 Subject: [PATCH 015/218] use frameworks.json for docs (#9163) --- .../using-environment-variables.mdx | 44 ++++++++++++------- 1 file changed, 29 insertions(+), 15 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index dd244a4baa668..bfef465df963f 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -3,9 +3,11 @@ title: Using environment variables description: Learn how to handle environments for your applications. --- +import { Fragment } from 'react'; import { Callout } from '#/components/callout'; import { Tabs, Tab } from '#/components/tabs'; import { Accordion, Accordions } from '#/components/accordion'; +import frameworks from '@turbo/types/src/json/frameworks.json'; Environment variable inputs are a vital part of your applications that you'll need to account for in your Turborepo configuration. @@ -56,21 +58,33 @@ Turborepo needs to be aware of your environment variables to account for changes Turborepo automatically adds prefix wildcards to your [`env`](/repo/docs/reference/configuration#env) key for common frameworks. If you're using one of the frameworks below in a package, you don't need to specify environment variables with these prefixes: -| Framework | `env` wildcard | -| ---------------- | ------------------- | -| Astro | `PUBLIC_*` | -| Blitz | `NEXT_PUBLIC_*` | -| Create React App | `REACT_APP_*` | -| Gatsby | `GATSBY_*` | -| Next.js | `NEXT_PUBLIC_*` | -| Nitro | `NITRO_*` | -| Nuxt.js | `NUXT_*`, `NITRO_*` | -| RedwoodJS | `REDWOOD_ENV_*` | -| Sanity Studio | `SANITY_STUDIO_*` | -| Solid | `VITE_*` | -| SvelteKit | `VITE_*` | -| Vite | `VITE_*` | -| Vue | `VUE_APP_*` | + + + + + + + + + {frameworks.map(({ name, envWildcards }) => ( + + + + + ))} + +
Framework + + env wildcards + +
{name} + {envWildcards.map((envWildcard, index) => ( + + {index !== 0 ? , : null} + {envWildcard} + + ))} +
Framework inference is per-package. From 98ad53005cf3922594e1d07a41bbde54c4671966 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 18 Sep 2024 20:09:54 -0400 Subject: [PATCH 016/218] Update using-environment-variables.mdx formatting to remove extra p tag (#9168) --- .../crafting-your-repository/using-environment-variables.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index bfef465df963f..a3f8c6f82fbce 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -63,9 +63,7 @@ Turborepo automatically adds prefix wildcards to your [`env`](/repo/docs/referen Framework - - env wildcards - + env wildcards From e6af7b1d87fccb48357f2f0b6f1a05682bc2e42e Mon Sep 17 00:00:00 2001 From: Michael McQuade Date: Thu, 19 Sep 2024 01:35:14 -0500 Subject: [PATCH 017/218] docs: add -w flag to pnpm example (#9160) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It's suggested to install this into the repository root. If you do this, you must use `--workspace-root` flag or you will get this error: >  ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don't want to see this warning anymore, you may set the ignore-workspace-root-check setting to true. --- docs/repo-docs/getting-started/add-to-existing-repository.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/getting-started/add-to-existing-repository.mdx b/docs/repo-docs/getting-started/add-to-existing-repository.mdx index 47464474031ef..a561e9c5c9879 100644 --- a/docs/repo-docs/getting-started/add-to-existing-repository.mdx +++ b/docs/repo-docs/getting-started/add-to-existing-repository.mdx @@ -69,7 +69,7 @@ We recommend you install `turbo` both globally and into your repository's root f # Global install pnpm add turbo --global # Install in repository - pnpm add turbo --save-dev + pnpm add turbo --save-dev --workspace-root ``` From 481212e4adb357785d34884897edf8253013264c Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 19 Sep 2024 17:55:46 -0400 Subject: [PATCH 018/218] feat: turbo-trace (#9134) ### Description A long long time ago we had a [node-file-trace](https://github.com/vercel/nft) implementation in the repository. Unfortunately this was tied to turbopack and the turbo-tasks code. Since that's now in a different repository, we're gonna implement our own version, because that's easier than coordinating multi-repo dependencies. This implementation uses `oxc_resolver` and `swc` to resolve dependencies and parse files. This PR hooks it up to `turbo query` but we'll probably have other uses later. ### Testing Instructions Adds some tests in `turbo-trace.t` using `query` --------- Co-authored-by: Turbobot --- Cargo.lock | 466 ++++++++++++++++-- Cargo.toml | 2 + crates/turbo-trace/Cargo.toml | 20 + crates/turbo-trace/src/import_finder.rs | 50 ++ crates/turbo-trace/src/lib.rs | 5 + crates/turbo-trace/src/main.rs | 49 ++ crates/turbo-trace/src/tracer.rs | 170 +++++++ crates/turborepo-lib/Cargo.toml | 1 + crates/turborepo-lib/src/query/file.rs | 61 +++ .../src/{query.rs => query/mod.rs} | 206 +------- crates/turborepo-lib/src/query/package.rs | 186 +++++++ .../fixtures/turbo_trace/.gitignore | 38 ++ .../fixtures/turbo_trace/README.md | 81 +++ .../fixtures/turbo_trace/button.tsx | 3 + .../fixtures/turbo_trace/circular.ts | 1 + .../fixtures/turbo_trace/circular2.ts | 1 + .../integration/fixtures/turbo_trace/foo.js | 6 + .../integration/fixtures/turbo_trace/main.ts | 9 + .../fixtures/turbo_trace/package.json | 14 + .../fixtures/turbo_trace/turbo.json | 18 + .../integration/tests/turbo-trace.t | 60 +++ 21 files changed, 1238 insertions(+), 209 deletions(-) create mode 100644 crates/turbo-trace/Cargo.toml create mode 100644 crates/turbo-trace/src/import_finder.rs create mode 100644 crates/turbo-trace/src/lib.rs create mode 100644 crates/turbo-trace/src/main.rs create mode 100644 crates/turbo-trace/src/tracer.rs create mode 100644 crates/turborepo-lib/src/query/file.rs rename crates/turborepo-lib/src/{query.rs => query/mod.rs} (65%) create mode 100644 crates/turborepo-lib/src/query/package.rs create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/.gitignore create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/README.md create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/button.tsx create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/circular.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/circular2.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/foo.js create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/main.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/package.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/turbo.json create mode 100644 turborepo-tests/integration/tests/turbo-trace.t diff --git a/Cargo.lock b/Cargo.lock index 4949c6e3246c1..234d5d4d63dc4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -163,6 +163,18 @@ dependencies = [ "wait-timeout", ] +[[package]] +name = "ast_node" +version = "0.9.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9184f2b369b3e8625712493c89b785881f27eedc6cde480a81883cef78868b2" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.58", +] + [[package]] name = "async-channel" version = "1.8.0" @@ -636,6 +648,15 @@ version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "better_scoped_tls" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "794edcc9b3fb07bb4aecaa11f093fd45663b4feadb782d68303a2268bc2701de" +dependencies = [ + "scoped-tls", +] + [[package]] name = "biome_console" version = "0.5.7" @@ -797,7 +818,7 @@ dependencies = [ "countme", "hashbrown 0.12.3", "memoffset 0.8.0", - "rustc-hash", + "rustc-hash 1.1.0", "tracing", ] @@ -931,9 +952,12 @@ checksum = "832133bbabbbaa9fbdba793456a2827627a7d2b8fb96032fa1e7666d7895832b" [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" +dependencies = [ + "allocator-api2", +] [[package]] name = "bytecount" @@ -1055,9 +1079,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.16" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed6719fffa43d0d87e5fd8caeab59be1554fb028cd30edc88fc4369b17971019" +checksum = "3e5a21b8495e732f1b3c364c9949b201ca7bae518c502c80256c96ad79eaf6ac" dependencies = [ "clap_builder", "clap_derive", @@ -1065,9 +1089,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.15" +version = "4.5.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "216aec2b177652e3846684cbfe25c9964d18ec45234f0f5da5157b207ed1aab6" +checksum = "8cf2dd12af7a047ad9d6da2b6b249759a22a7abc0f474c1dae1777afa4b21a73" dependencies = [ "anstream", "anstyle", @@ -1490,7 +1514,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" dependencies = [ "cfg-if", - "hashbrown 0.14.3", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", "lock_api", "once_cell", "parking_lot_core", @@ -1867,6 +1905,17 @@ dependencies = [ "percent-encoding", ] +[[package]] +name = "from_variant" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32016f1242eb82af5474752d00fd8ebcd9004bd69b462b1c91de833972d08ed4" +dependencies = [ + "proc-macro2", + "swc_macros_common", + "syn 2.0.58", +] + [[package]] name = "fs-err" version = "2.9.0" @@ -2165,9 +2214,9 @@ checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "hashbrown" -version = "0.14.3" +version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" dependencies = [ "ahash", "allocator-api2", @@ -2226,6 +2275,20 @@ dependencies = [ "winapi", ] +[[package]] +name = "hstr" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dae404c0c5d4e95d4858876ab02eecd6a196bb8caa42050dfa809938833fc412" +dependencies = [ + "hashbrown 0.14.5", + "new_debug_unreachable", + "once_cell", + "phf", + "rustc-hash 1.1.0", + "triomphe", +] + [[package]] name = "http" version = "0.2.11" @@ -2518,7 +2581,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" dependencies = [ "equivalent", - "hashbrown 0.14.3", + "hashbrown 0.14.5", "serde", ] @@ -2609,6 +2672,18 @@ version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "30e22bd8629359895450b59ea7a776c850561b96a3b1d31321c1949d9e6c9146" +[[package]] +name = "is-macro" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2069faacbe981460232f880d26bf3c7634e322d49053aa48c27e3ae642f728f1" +dependencies = [ + "Inflector", + "proc-macro2", + "quote", + "syn 2.0.58", +] + [[package]] name = "is-terminal" version = "0.4.9" @@ -2810,9 +2885,9 @@ checksum = "db13adb97ab515a3691f56e4dbab09283d0b86cb45abd991d8634a9d6f501760" [[package]] name = "libc" -version = "0.2.155" +version = "0.2.158" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" +checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" [[package]] name = "libgit2-sys" @@ -2907,7 +2982,7 @@ version = "0.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db2c024b41519440580066ba82aab04092b333e09066a5eb86c7c4890df31f22" dependencies = [ - "hashbrown 0.14.3", + "hashbrown 0.14.5", ] [[package]] @@ -3218,6 +3293,12 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "27b02d87554356db9e9a873add8782d4ea6e3e58ea071a9adb9a2e8ddb884a8b" +[[package]] +name = "new_debug_unreachable" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" + [[package]] name = "nibble_vec" version = "0.1.0" @@ -3328,12 +3409,32 @@ dependencies = [ "winapi", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "serde", +] + [[package]] name = "num-conv" version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -3441,7 +3542,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a4d6a8c22fc714f0c2373e6091bf6f5e9b37b1bc0b1184874b7e0a4e303d318f" dependencies = [ "dlv-list", - "hashbrown 0.14.3", + "hashbrown 0.14.5", ] [[package]] @@ -3478,18 +3579,20 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "oxc_resolver" -version = "1.5.4" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2033cc3b0e72446d3321866db0954804b9ca559ad692480205053f6aea4bfc15" +checksum = "e7fe4d07afdfcf6b1d7fb952e6691d82692a54b71964a377cf49f3e47dac283d" dependencies = [ - "dashmap", + "cfg-if", + "dashmap 6.1.0", "dunce", "indexmap 2.2.6", "json-strip-comments", "once_cell", - "rustc-hash", + "rustc-hash 2.0.0", "serde", "serde_json", + "simdutf8", "thiserror", "tracing", ] @@ -3608,6 +3711,48 @@ dependencies = [ "indexmap 1.9.3", ] +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_macros", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_macros" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3444646e286606587e49f3bcf1679b8cef1dc2c5ecc29ddacaffc305180d464b" +dependencies = [ + "phf_generator", + "phf_shared", + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + [[package]] name = "pidlock" version = "0.1.4" @@ -3925,6 +4070,35 @@ dependencies = [ "prost 0.11.8", ] +[[package]] +name = "psm" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + [[package]] name = "quickcheck" version = "1.0.3" @@ -4200,6 +4374,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc-hash" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" + [[package]] name = "rustc_version" version = "0.2.3" @@ -4364,6 +4544,12 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "scoped-tls" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" + [[package]] name = "scopeguard" version = "1.2.0" @@ -4426,18 +4612,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.201" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "780f1cebed1629e4753a1a38a3c72d30b97ec044f0aef68cb26650a3c5cf363c" +checksum = "c8e3592472072e6e22e0a54d5904d9febf8508f65fb8552499a1abc7d1078c3a" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.201" +version = "1.0.210" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c5e405930b9796f1c00bee880d03fc7e0bb4b9a11afc776885ffe84320da2865" +checksum = "243902eda00fad750862fc144cea25caca5e20d615af0a81bee94ca738f1df1f" dependencies = [ "proc-macro2", "quote", @@ -4661,6 +4847,12 @@ dependencies = [ "libc", ] +[[package]] +name = "simdutf8" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a" + [[package]] name = "similar" version = "2.5.0" @@ -4671,6 +4863,12 @@ dependencies = [ "unicode-segmentation", ] +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + [[package]] name = "slab" version = "0.4.9" @@ -4697,6 +4895,17 @@ version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +[[package]] +name = "smartstring" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fb72c633efbaa2dd666986505016c32c3044395ceaf881518399d2f4127ee29" +dependencies = [ + "autocfg", + "static_assertions", + "version_check", +] + [[package]] name = "smawk" version = "0.3.1" @@ -4751,6 +4960,19 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "stacker" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.59.0", +] + [[package]] name = "static_assertions" version = "1.1.0" @@ -4781,6 +5003,18 @@ version = "0.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e9557cb6521e8d009c51a8666f09356f4b817ba9ba0981a305bd86aee47bd35c" +[[package]] +name = "string_enum" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05e383308aebc257e7d7920224fa055c632478d92744eca77f99be8fa1545b90" +dependencies = [ + "proc-macro2", + "quote", + "swc_macros_common", + "syn 2.0.58", +] + [[package]] name = "strsim" version = "0.11.1" @@ -4885,6 +5119,143 @@ dependencies = [ "time", ] +[[package]] +name = "swc_allocator" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc8bd3075d1c6964010333fae9ddcd91ad422a4f8eb8b3206a9b2b6afb4209e" +dependencies = [ + "bumpalo", + "hashbrown 0.14.5", + "ptr_meta", + "rustc-hash 1.1.0", + "triomphe", +] + +[[package]] +name = "swc_atoms" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb6567e4e67485b3e7662b486f1565bdae54bd5b9d6b16b2ba1a9babb1e42125" +dependencies = [ + "hstr", + "once_cell", + "rustc-hash 1.1.0", + "serde", +] + +[[package]] +name = "swc_common" +version = "0.37.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "12d0a8eaaf1606c9207077d75828008cb2dfb51b095a766bd2b72ef893576e31" +dependencies = [ + "ast_node", + "better_scoped_tls", + "cfg-if", + "either", + "from_variant", + "new_debug_unreachable", + "num-bigint", + "once_cell", + "rustc-hash 1.1.0", + "serde", + "siphasher", + "swc_allocator", + "swc_atoms", + "swc_eq_ignore_macros", + "swc_visit", + "tracing", + "unicode-width", + "url", +] + +[[package]] +name = "swc_ecma_ast" +version = "0.118.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6f866d12e4d519052b92a0a86d1ac7ff17570da1272ca0c89b3d6f802cd79df" +dependencies = [ + "bitflags 2.5.0", + "is-macro", + "num-bigint", + "phf", + "scoped-tls", + "string_enum", + "swc_atoms", + "swc_common", + "unicode-id-start", +] + +[[package]] +name = "swc_ecma_parser" +version = "0.149.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683dada14722714588b56481399c699378b35b2ba4deb5c4db2fb627a97fb54b" +dependencies = [ + "either", + "new_debug_unreachable", + "num-bigint", + "num-traits", + "phf", + "serde", + "smallvec", + "smartstring", + "stacker", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "tracing", + "typed-arena", +] + +[[package]] +name = "swc_ecma_visit" +version = "0.104.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b1c6802e68e51f336e8bc9644e9ff9da75d7da9c1a6247d532f2e908aa33e81" +dependencies = [ + "new_debug_unreachable", + "num-bigint", + "swc_atoms", + "swc_common", + "swc_ecma_ast", + "swc_visit", + "tracing", +] + +[[package]] +name = "swc_eq_ignore_macros" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63db0adcff29d220c3d151c5b25c0eabe7e32dd936212b84cdaa1392e3130497" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "swc_macros_common" +version = "0.3.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f486687bfb7b5c560868f69ed2d458b880cebc9babebcb67e49f31b55c5bf847" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.58", +] + +[[package]] +name = "swc_visit" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ceb044142ba2719ef9eb3b6b454fce61ab849eb696c34d190f04651955c613d" +dependencies = [ + "either", + "new_debug_unreachable", +] + [[package]] name = "symbolic-common" version = "12.4.1" @@ -5098,18 +5469,18 @@ dependencies = [ [[package]] name = "thiserror" -version = "1.0.58" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" +checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.58" +version = "1.0.63" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" +checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" dependencies = [ "proc-macro2", "quote", @@ -5444,7 +5815,7 @@ dependencies = [ "async-trait", "auto_impl", "bytes", - "dashmap", + "dashmap 5.5.3", "futures", "httparse", "lsp-types", @@ -5603,6 +5974,16 @@ dependencies = [ "syn 1.0.109", ] +[[package]] +name = "triomphe" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6631e42e10b40c0690bf92f404ebcfe6e1fdb480391d15f17cc8e96eeed5369" +dependencies = [ + "serde", + "stable_deref_trait", +] + [[package]] name = "try-lock" version = "0.2.4" @@ -5651,6 +6032,22 @@ dependencies = [ "winapi", ] +[[package]] +name = "turbo-trace" +version = "0.1.0" +dependencies = [ + "camino", + "clap", + "miette", + "oxc_resolver", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", + "swc_ecma_visit", + "thiserror", + "turbopath", +] + [[package]] name = "turbo-updater" version = "0.1.0" @@ -5979,6 +6376,7 @@ dependencies = [ "tracing-chrome", "tracing-subscriber", "tracing-test", + "turbo-trace", "turbo-updater", "turbopath", "turborepo-analytics", @@ -6250,6 +6648,12 @@ dependencies = [ "static_assertions", ] +[[package]] +name = "typed-arena" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" + [[package]] name = "typenum" version = "1.16.0" @@ -6334,6 +6738,12 @@ version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7eec5d1121208364f6793f7d2e222bf75a915c19557537745b195b253dd64217" +[[package]] +name = "unicode-id-start" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc3882f69607a2ac8cc4de3ee7993d8f68bb06f2974271195065b3bd07f2edea" + [[package]] name = "unicode-ident" version = "1.0.11" diff --git a/Cargo.toml b/Cargo.toml index d655030df1620..80484ff05f4b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -3,6 +3,7 @@ resolver = "2" members = [ "crates/tower-uds", + "crates/turbo-trace", "crates/turborepo*", "packages/turbo-repository/rust", ] @@ -43,6 +44,7 @@ async-recursion = "1.0.2" miette = { version = "5.10.0", features = ["fancy"] } markdown = "1.0.0-alpha.18" +turbo-trace = { path = "crates/turbo-trace" } turbo-updater = { path = "crates/turborepo-updater" } turbopath = { path = "crates/turborepo-paths" } turborepo = { path = "crates/turborepo" } diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml new file mode 100644 index 0000000000000..5eeb45bfc5c34 --- /dev/null +++ b/crates/turbo-trace/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "turbo-trace" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +camino.workspace = true +clap = { version = "4.5.17", features = ["derive"] } +miette = { workspace = true, features = ["fancy"] } +oxc_resolver = "1.11.0" +swc_common = "0.37.5" +swc_ecma_ast = "0.118.2" +swc_ecma_parser = "0.149.1" +swc_ecma_visit = "0.104.8" +thiserror = { workspace = true } +turbopath = { workspace = true } + +[lints] +workspace = true diff --git a/crates/turbo-trace/src/import_finder.rs b/crates/turbo-trace/src/import_finder.rs new file mode 100644 index 0000000000000..ddfbf83875418 --- /dev/null +++ b/crates/turbo-trace/src/import_finder.rs @@ -0,0 +1,50 @@ +use swc_common::{Span, Spanned}; +use swc_ecma_ast::{Decl, ModuleDecl, Stmt}; +use swc_ecma_visit::{Visit, VisitWith}; + +#[derive(Default)] +pub struct ImportFinder { + imports: Vec<(String, Span)>, +} + +impl ImportFinder { + pub fn imports(&self) -> &[(String, Span)] { + &self.imports + } +} + +impl Visit for ImportFinder { + fn visit_module_decl(&mut self, decl: &ModuleDecl) { + if let ModuleDecl::Import(import) = decl { + self.imports + .push((import.src.value.to_string(), import.span)); + } + } + + fn visit_stmt(&mut self, stmt: &Stmt) { + if let Stmt::Decl(Decl::Var(var_decl)) = stmt { + for decl in &var_decl.decls { + if let Some(init) = &decl.init { + if let swc_ecma_ast::Expr::Call(call_expr) = &**init { + if let swc_ecma_ast::Callee::Expr(expr) = &call_expr.callee { + if let swc_ecma_ast::Expr::Ident(ident) = &**expr { + if ident.sym == *"require" { + if let Some(arg) = call_expr.args.first() { + if let swc_ecma_ast::Expr::Lit(swc_ecma_ast::Lit::Str( + lit_str, + )) = &*arg.expr + { + self.imports + .push((lit_str.value.to_string(), expr.span())); + } + } + } + } + } + } + } + } + } + stmt.visit_children_with(self); + } +} diff --git a/crates/turbo-trace/src/lib.rs b/crates/turbo-trace/src/lib.rs new file mode 100644 index 0000000000000..b8f162159e1ba --- /dev/null +++ b/crates/turbo-trace/src/lib.rs @@ -0,0 +1,5 @@ +#![deny(clippy::all)] +mod import_finder; +mod tracer; + +pub use tracer::{TraceError, Tracer}; diff --git a/crates/turbo-trace/src/main.rs b/crates/turbo-trace/src/main.rs new file mode 100644 index 0000000000000..be8c5cd79857c --- /dev/null +++ b/crates/turbo-trace/src/main.rs @@ -0,0 +1,49 @@ +mod import_finder; +mod tracer; + +use camino::Utf8PathBuf; +use clap::Parser; +use tracer::Tracer; +use turbopath::{AbsoluteSystemPathBuf, PathError}; + +#[derive(Parser, Debug)] +struct Args { + #[clap(long, value_parser)] + cwd: Option, + #[clap(long)] + ts_config: Option, + files: Vec, +} + +fn main() -> Result<(), PathError> { + let args = Args::parse(); + + let abs_cwd = if let Some(cwd) = args.cwd { + AbsoluteSystemPathBuf::from_cwd(cwd)? + } else { + AbsoluteSystemPathBuf::cwd()? + }; + + let files = args + .files + .into_iter() + .map(|f| AbsoluteSystemPathBuf::from_unknown(&abs_cwd, f)) + .collect(); + + let tracer = Tracer::new(abs_cwd, files, args.ts_config)?; + + let result = tracer.trace(); + + if !result.errors.is_empty() { + for error in &result.errors { + eprintln!("error: {}", error); + } + std::process::exit(1); + } else { + for file in &result.files { + println!("{}", file); + } + } + + Ok(()) +} diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs new file mode 100644 index 0000000000000..2d236fc9ef482 --- /dev/null +++ b/crates/turbo-trace/src/tracer.rs @@ -0,0 +1,170 @@ +use std::{collections::HashSet, fs, rc::Rc}; + +use camino::Utf8PathBuf; +use miette::{Diagnostic, NamedSource, SourceSpan}; +use oxc_resolver::{ + EnforceExtension, ResolveError, ResolveOptions, Resolver, TsconfigOptions, TsconfigReferences, +}; +use swc_common::{comments::SingleThreadedComments, input::StringInput, FileName, SourceMap}; +use swc_ecma_ast::EsVersion; +use swc_ecma_parser::{lexer::Lexer, Capturing, EsSyntax, Parser, Syntax, TsSyntax}; +use swc_ecma_visit::VisitWith; +use thiserror::Error; +use turbopath::{AbsoluteSystemPathBuf, PathError}; + +use crate::import_finder::ImportFinder; + +pub struct Tracer { + files: Vec, + seen: HashSet, + ts_config: Option, + source_map: Rc, +} + +#[derive(Debug, Error, Diagnostic)] +pub enum TraceError { + #[error("failed to read file: {0}")] + FileNotFound(AbsoluteSystemPathBuf), + #[error(transparent)] + PathEncoding(PathError), + #[error("tracing a root file `{0}`, no parent found")] + RootFile(AbsoluteSystemPathBuf), + #[error("failed to resolve import")] + Resolve { + #[label("import here")] + span: SourceSpan, + #[source_code] + text: NamedSource, + }, +} + +pub struct TraceResult { + pub errors: Vec, + pub files: HashSet, +} + +impl Tracer { + pub fn new( + cwd: AbsoluteSystemPathBuf, + files: Vec, + ts_config: Option, + ) -> Result { + let ts_config = + ts_config.map(|ts_config| AbsoluteSystemPathBuf::from_unknown(&cwd, ts_config)); + + let seen = HashSet::new(); + + Ok(Self { + files, + seen, + ts_config, + source_map: Rc::new(SourceMap::default()), + }) + } + + pub fn trace(mut self) -> TraceResult { + let mut options = ResolveOptions::default() + .with_builtin_modules(true) + .with_force_extension(EnforceExtension::Disabled) + .with_extension(".ts") + .with_extension(".tsx"); + if let Some(ts_config) = self.ts_config.take() { + options.tsconfig = Some(TsconfigOptions { + config_file: ts_config.into(), + references: TsconfigReferences::Auto, + }); + } + + let resolver = Resolver::new(options); + let mut errors = vec![]; + + while let Some(file_path) = self.files.pop() { + if matches!(file_path.extension(), Some("json") | Some("css")) { + continue; + } + + if self.seen.contains(&file_path) { + continue; + } + + self.seen.insert(file_path.clone()); + + // Read the file content + let Ok(file_content) = fs::read_to_string(&file_path) else { + errors.push(TraceError::FileNotFound(file_path.clone())); + continue; + }; + + let comments = SingleThreadedComments::default(); + + let source_file = self.source_map.new_source_file( + FileName::Custom(file_path.to_string()).into(), + file_content.clone(), + ); + + let syntax = + if file_path.extension() == Some("ts") || file_path.extension() == Some("tsx") { + Syntax::Typescript(TsSyntax { + tsx: file_path.extension() == Some("tsx"), + decorators: true, + ..Default::default() + }) + } else { + Syntax::Es(EsSyntax { + jsx: file_path.ends_with(".jsx"), + ..Default::default() + }) + }; + + let lexer = Lexer::new( + syntax, + EsVersion::EsNext, + StringInput::from(&*source_file), + Some(&comments), + ); + + let mut parser = Parser::new_from(Capturing::new(lexer)); + + // Parse the file as a module + let Ok(module) = parser.parse_module() else { + errors.push(TraceError::FileNotFound(file_path.to_owned())); + continue; + }; + + // Visit the AST and find imports + let mut finder = ImportFinder::default(); + module.visit_with(&mut finder); + + // Convert found imports/requires to absolute paths and add them to files to + // visit + for (import, span) in finder.imports() { + let Some(file_dir) = file_path.parent() else { + errors.push(TraceError::RootFile(file_path.to_owned())); + continue; + }; + match resolver.resolve(file_dir, import) { + Ok(resolved) => match resolved.into_path_buf().try_into() { + Ok(path) => self.files.push(path), + Err(err) => { + errors.push(TraceError::PathEncoding(err)); + } + }, + Err(ResolveError::Builtin(_)) => {} + Err(_) => { + let (start, end) = self.source_map.span_to_char_offset(&source_file, *span); + + errors.push(TraceError::Resolve { + span: (start as usize, end as usize).into(), + text: NamedSource::new(file_path.to_string(), file_content.clone()), + }); + } + } + } + } + + TraceResult { + files: self.seen, + errors, + } + } +} diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index 92a2976c76d54..701d3e2084aa1 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -113,6 +113,7 @@ tracing-appender = "0.2.2" tracing-chrome = "0.7.1" tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } tracing.workspace = true +turbo-trace = { workspace = true } turbo-updater = { workspace = true } turbopath = { workspace = true } turborepo-analytics = { path = "../turborepo-analytics" } diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs new file mode 100644 index 0000000000000..717f4d136fd94 --- /dev/null +++ b/crates/turborepo-lib/src/query/file.rs @@ -0,0 +1,61 @@ +use std::sync::Arc; + +use async_graphql::Object; +use itertools::Itertools; +use turbo_trace::Tracer; +use turbopath::AbsoluteSystemPathBuf; + +use crate::{query::Error, run::Run}; + +pub struct File { + run: Arc, + path: AbsoluteSystemPathBuf, +} + +impl File { + pub fn new(run: Arc, path: AbsoluteSystemPathBuf) -> Self { + Self { run, path } + } +} + +#[Object] +impl File { + async fn contents(&self) -> Result { + let contents = self.path.read_to_string()?; + Ok(contents) + } + + async fn path(&self) -> Result { + Ok(self + .run + .repo_root() + .anchor(&self.path) + .map(|path| path.to_string())?) + } + + async fn absolute_path(&self) -> Result { + Ok(self.path.to_string()) + } + + async fn dependencies(&self) -> Result, Error> { + let tracer = Tracer::new( + self.run.repo_root().to_owned(), + vec![self.path.clone()], + None, + )?; + + let result = tracer.trace(); + if !result.errors.is_empty() { + return Err(Error::Trace(result.errors)); + } + + Ok(result + .files + .into_iter() + // Filter out the file we're looking at + .filter(|file| file != &self.path) + .map(|path| File::new(self.run.clone(), path)) + .sorted_by(|a, b| a.path.cmp(&b.path)) + .collect()) + } +} diff --git a/crates/turborepo-lib/src/query.rs b/crates/turborepo-lib/src/query/mod.rs similarity index 65% rename from crates/turborepo-lib/src/query.rs rename to crates/turborepo-lib/src/query/mod.rs index c1ce6a1314399..d26594ff2017e 100644 --- a/crates/turborepo-lib/src/query.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -1,3 +1,6 @@ +mod file; +mod package; + use std::{io, sync::Arc}; use async_graphql::{http::GraphiQLSource, *}; @@ -5,19 +8,27 @@ use async_graphql_axum::GraphQL; use axum::{response, response::IntoResponse, routing::get, Router}; use itertools::Itertools; use miette::Diagnostic; +use package::Package; use thiserror::Error; use tokio::{net::TcpListener, select}; -use turborepo_repository::package_graph::{PackageName, PackageNode}; +use turbo_trace::TraceError; +use turbopath::AbsoluteSystemPathBuf; +use turborepo_repository::package_graph::PackageName; use crate::{ + query::file::File, run::{builder::RunBuilder, Run}, signal::SignalHandler, }; #[derive(Error, Debug, Diagnostic)] pub enum Error { + #[error("failed to get file dependencies")] + Trace(#[related] Vec), #[error("no signal handler")] NoSignalHandler, + #[error("file `{0}` not found")] + FileNotFound(String), #[error("failed to start GraphQL server")] Server(#[from] io::Error), #[error("package not found: {0}")] @@ -26,6 +37,8 @@ pub enum Error { Serde(#[from] serde_json::Error), #[error(transparent)] Run(#[from] crate::run::Error), + #[error(transparent)] + Path(#[from] turbopath::PathError), } pub struct Query { @@ -39,7 +52,7 @@ impl Query { } #[derive(Debug, SimpleObject)] -struct Array { +pub struct Array { items: Vec, length: usize, } @@ -51,54 +64,6 @@ impl FromIterator for Array { Self { items, length } } } - -struct Package { - run: Arc, - name: PackageName, -} - -impl Package { - fn direct_dependents_count(&self) -> usize { - self.run - .pkg_dep_graph() - .immediate_ancestors(&PackageNode::Workspace(self.name.clone())) - .map_or(0, |pkgs| pkgs.len()) - } - - fn direct_dependencies_count(&self) -> usize { - self.run - .pkg_dep_graph() - .immediate_dependencies(&PackageNode::Workspace(self.name.clone())) - .map_or(0, |pkgs| pkgs.len()) - } - - fn indirect_dependents_count(&self) -> usize { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - - self.run.pkg_dep_graph().ancestors(&node).len() - self.direct_dependents_count() - } - - fn indirect_dependencies_count(&self) -> usize { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - - self.run.pkg_dep_graph().dependencies(&node).len() - self.direct_dependencies_count() - } - - fn all_dependents_count(&self) -> usize { - self.run - .pkg_dep_graph() - .ancestors(&PackageNode::Workspace(self.name.clone())) - .len() - } - - fn all_dependencies_count(&self) -> usize { - self.run - .pkg_dep_graph() - .dependencies(&PackageNode::Workspace(self.name.clone())) - .len() - } -} - #[derive(Enum, Copy, Clone, Eq, PartialEq, Debug)] enum PackageFields { Name, @@ -335,6 +300,16 @@ impl Query { }) } + async fn file(&self, path: String) -> Result { + let abs_path = AbsoluteSystemPathBuf::from_unknown(self.run.repo_root(), path); + + if !abs_path.exists() { + return Err(Error::FileNotFound(abs_path.to_string())); + } + + Ok(File::new(self.run.clone(), abs_path)) + } + /// Gets a list of packages that match the given filter async fn packages(&self, filter: Option) -> Result, Error> { let Some(filter) = filter else { @@ -364,137 +339,6 @@ impl Query { } } -#[Object] -impl Package { - /// The name of the package - async fn name(&self) -> String { - self.name.to_string() - } - - /// The path to the package, relative to the repository root - async fn path(&self) -> Result { - Ok(self - .run - .pkg_dep_graph() - .package_info(&self.name) - .ok_or_else(|| Error::PackageNotFound(self.name.clone()))? - .package_path() - .to_string()) - } - - /// The upstream packages that have this package as a direct dependency - async fn direct_dependents(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - Ok(self - .run - .pkg_dep_graph() - .immediate_ancestors(&node) - .iter() - .flatten() - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } - - /// The downstream packages that directly depend on this package - async fn direct_dependencies(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - Ok(self - .run - .pkg_dep_graph() - .immediate_dependencies(&node) - .iter() - .flatten() - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } - - /// The downstream packages that depend on this package, transitively - async fn all_dependents(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - Ok(self - .run - .pkg_dep_graph() - .ancestors(&node) - .iter() - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } - - /// The upstream packages that this package depends on, transitively - async fn all_dependencies(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - Ok(self - .run - .pkg_dep_graph() - .dependencies(&node) - .iter() - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } - - /// The downstream packages that depend on this package, indirectly - async fn indirect_dependents(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - let immediate_dependents = self - .run - .pkg_dep_graph() - .immediate_ancestors(&node) - .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; - - Ok(self - .run - .pkg_dep_graph() - .ancestors(&node) - .iter() - .filter(|package| !immediate_dependents.contains(*package)) - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } - - /// The upstream packages that this package depends on, indirectly - async fn indirect_dependencies(&self) -> Result, Error> { - let node: PackageNode = PackageNode::Workspace(self.name.clone()); - let immediate_dependencies = self - .run - .pkg_dep_graph() - .immediate_dependencies(&node) - .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; - - Ok(self - .run - .pkg_dep_graph() - .dependencies(&node) - .iter() - .filter(|package| !immediate_dependencies.contains(*package)) - .map(|package| Package { - run: self.run.clone(), - name: package.as_package_name().clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) - } -} - async fn graphiql() -> impl IntoResponse { response::Html(GraphiQLSource::build().endpoint("/").finish()) } diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs new file mode 100644 index 0000000000000..789f0c5135ebc --- /dev/null +++ b/crates/turborepo-lib/src/query/package.rs @@ -0,0 +1,186 @@ +use std::sync::Arc; + +use async_graphql::Object; +use itertools::Itertools; +use turborepo_repository::package_graph::{PackageName, PackageNode}; + +use crate::{ + query::{Array, Error}, + run::Run, +}; + +pub struct Package { + pub run: Arc, + pub name: PackageName, +} + +impl Package { + pub fn direct_dependents_count(&self) -> usize { + self.run + .pkg_dep_graph() + .immediate_ancestors(&PackageNode::Workspace(self.name.clone())) + .map_or(0, |pkgs| pkgs.len()) + } + + pub fn direct_dependencies_count(&self) -> usize { + self.run + .pkg_dep_graph() + .immediate_dependencies(&PackageNode::Workspace(self.name.clone())) + .map_or(0, |pkgs| pkgs.len()) + } + + pub fn indirect_dependents_count(&self) -> usize { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + + self.run.pkg_dep_graph().ancestors(&node).len() - self.direct_dependents_count() + } + + pub fn indirect_dependencies_count(&self) -> usize { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + + self.run.pkg_dep_graph().dependencies(&node).len() - self.direct_dependencies_count() + } + + pub fn all_dependents_count(&self) -> usize { + self.run + .pkg_dep_graph() + .ancestors(&PackageNode::Workspace(self.name.clone())) + .len() + } + + pub fn all_dependencies_count(&self) -> usize { + self.run + .pkg_dep_graph() + .dependencies(&PackageNode::Workspace(self.name.clone())) + .len() + } +} + +#[Object] +impl Package { + /// The name of the package + async fn name(&self) -> String { + self.name.to_string() + } + + /// The path to the package, relative to the repository root + async fn path(&self) -> Result { + Ok(self + .run + .pkg_dep_graph() + .package_info(&self.name) + .ok_or_else(|| Error::PackageNotFound(self.name.clone()))? + .package_path() + .to_string()) + } + + /// The upstream packages that have this package as a direct dependency + async fn direct_dependents(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .immediate_ancestors(&node) + .iter() + .flatten() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + /// The downstream packages that directly depend on this package + async fn direct_dependencies(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .immediate_dependencies(&node) + .iter() + .flatten() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + async fn all_dependents(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .ancestors(&node) + .iter() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + async fn all_dependencies(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + Ok(self + .run + .pkg_dep_graph() + .dependencies(&node) + .iter() + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + /// The downstream packages that depend on this package, indirectly + async fn indirect_dependents(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + let immediate_dependents = self + .run + .pkg_dep_graph() + .immediate_ancestors(&node) + .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; + + Ok(self + .run + .pkg_dep_graph() + .ancestors(&node) + .iter() + .filter(|package| !immediate_dependents.contains(*package)) + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } + + /// The upstream packages that this package depends on, indirectly + async fn indirect_dependencies(&self) -> Result, Error> { + let node: PackageNode = PackageNode::Workspace(self.name.clone()); + let immediate_dependencies = self + .run + .pkg_dep_graph() + .immediate_dependencies(&node) + .ok_or_else(|| Error::PackageNotFound(self.name.clone()))?; + + Ok(self + .run + .pkg_dep_graph() + .dependencies(&node) + .iter() + .filter(|package| !immediate_dependencies.contains(*package)) + .map(|package| Package { + run: self.run.clone(), + name: package.as_package_name().clone(), + }) + .sorted_by(|a, b| a.name.cmp(&b.name)) + .collect()) + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/.gitignore b/turborepo-tests/integration/fixtures/turbo_trace/.gitignore new file mode 100644 index 0000000000000..96fab4fed3424 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/.gitignore @@ -0,0 +1,38 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# Dependencies +node_modules +.pnp +.pnp.js + +# Local env files +.env +.env.local +.env.development.local +.env.test.local +.env.production.local + +# Testing +coverage + +# Turbo +.turbo + +# Vercel +.vercel + +# Build Outputs +.next/ +out/ +build +dist + + +# Debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Misc +.DS_Store +*.pem diff --git a/turborepo-tests/integration/fixtures/turbo_trace/README.md b/turborepo-tests/integration/fixtures/turbo_trace/README.md new file mode 100644 index 0000000000000..7a4658aa87a77 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/README.md @@ -0,0 +1,81 @@ +# Turborepo starter + +This is an official starter Turborepo. + +## Using this example + +Run the following command: + +```sh +npx create-turbo@latest +``` + +## What's inside? + +This Turborepo includes the following packages/apps: + +### Apps and Packages + +- `docs`: a [Next.js](https://nextjs.org/) app +- `web`: another [Next.js](https://nextjs.org/) app +- `@repo/ui`: a stub React component library shared by both `web` and `docs` applications +- `@repo/eslint-config`: `eslint` configurations (includes `eslint-config-next` and `eslint-config-prettier`) +- `@repo/typescript-config`: `tsconfig.json`s used throughout the monorepo + +Each package/app is 100% [TypeScript](https://www.typescriptlang.org/). + +### Utilities + +This Turborepo has some additional tools already setup for you: + +- [TypeScript](https://www.typescriptlang.org/) for static type checking +- [ESLint](https://eslint.org/) for code linting +- [Prettier](https://prettier.io) for code formatting + +### Build + +To build all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm build +``` + +### Develop + +To develop all apps and packages, run the following command: + +``` +cd my-turborepo +pnpm dev +``` + +### Remote Caching + +Turborepo can use a technique known as [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) to share cache artifacts across machines, enabling you to share build caches with your team and CI/CD pipelines. + +By default, Turborepo will cache locally. To enable Remote Caching you will need an account with Vercel. If you don't have an account you can [create one](https://vercel.com/signup), then enter the following commands: + +``` +cd my-turborepo +npx turbo login +``` + +This will authenticate the Turborepo CLI with your [Vercel account](https://vercel.com/docs/concepts/personal-accounts/overview). + +Next, you can link your Turborepo to your Remote Cache by running the following command from the root of your Turborepo: + +``` +npx turbo link +``` + +## Useful Links + +Learn more about the power of Turborepo: + +- [Tasks](https://turbo.build/repo/docs/core-concepts/monorepos/running-tasks) +- [Caching](https://turbo.build/repo/docs/core-concepts/caching) +- [Remote Caching](https://turbo.build/repo/docs/core-concepts/remote-caching) +- [Filtering](https://turbo.build/repo/docs/core-concepts/monorepos/filtering) +- [Configuration Options](https://turbo.build/repo/docs/reference/configuration) +- [CLI Usage](https://turbo.build/repo/docs/reference/command-line-reference) diff --git a/turborepo-tests/integration/fixtures/turbo_trace/button.tsx b/turborepo-tests/integration/fixtures/turbo_trace/button.tsx new file mode 100644 index 0000000000000..0d23cb038dfae --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/button.tsx @@ -0,0 +1,3 @@ +export const Button = ({ children }: { children: React.ReactNode }) => { + return ; +}; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/circular.ts b/turborepo-tests/integration/fixtures/turbo_trace/circular.ts new file mode 100644 index 0000000000000..079562059f5a1 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/circular.ts @@ -0,0 +1 @@ +import circular2 from "./circular2"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/circular2.ts b/turborepo-tests/integration/fixtures/turbo_trace/circular2.ts new file mode 100644 index 0000000000000..ba85bbe368f26 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/circular2.ts @@ -0,0 +1 @@ +import circular from "./circular"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/foo.js b/turborepo-tests/integration/fixtures/turbo_trace/foo.js new file mode 100644 index 0000000000000..de9fc706c8115 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/foo.js @@ -0,0 +1,6 @@ +export default function foo() { + if (!process.env.IS_CI) { + return "bar"; + } + return "foo"; +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/main.ts b/turborepo-tests/integration/fixtures/turbo_trace/main.ts new file mode 100644 index 0000000000000..815521f02dd8d --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/main.ts @@ -0,0 +1,9 @@ +import { Button } from "./button"; +import foo from "./foo"; +import repeat from "repeat-string"; + +const button = new Button(); + +button.render(); +repeat("foo", 5); +foo(); diff --git a/turborepo-tests/integration/fixtures/turbo_trace/package.json b/turborepo-tests/integration/fixtures/turbo_trace/package.json new file mode 100644 index 0000000000000..3fb9d50ee0b59 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/package.json @@ -0,0 +1,14 @@ +{ + "name": "create_turbo", + "private": true, + "engines": { + "node": ">=18" + }, + "dependencies": { + "repeat-string": "^1.6.1" + }, + "workspaces": [ + "apps/*", + "packages/*" + ] +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/turbo.json b/turborepo-tests/integration/fixtures/turbo_trace/turbo.json new file mode 100644 index 0000000000000..807e324753413 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/turbo.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://turbo.build/schema.json", + "ui": "tui", + "tasks": { + "build": { + "dependsOn": ["^build"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], + "outputs": [".next/**", "!.next/cache/**"] + }, + "lint": { + "dependsOn": ["^lint"] + }, + "dev": { + "cache": false, + "persistent": true + } + } +} diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t new file mode 100644 index 0000000000000..c40b5a913eece --- /dev/null +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -0,0 +1,60 @@ +Setup + $ . ${TESTDIR}/../../helpers/setup_integration_test.sh turbo_trace + + $ ${TURBO} query "query { file(path: \"main.ts\") { path } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "main.ts" + } + } + } + + $ ${TURBO} query "query { file(path: \"main.ts\") { path, dependencies { path } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "main.ts", + "dependencies": [ + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules(\/|\\\\)repeat-string(\/|\\\\)index.js" (re) + } + ] + } + } + } + + $ ${TURBO} query "query { file(path: \"button.tsx\") { path, dependencies { path } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "button.tsx", + "dependencies": [] + } + } + } + + $ ${TURBO} query "query { file(path: \"circular.ts\") { path, dependencies { path } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "circular.ts", + "dependencies": [ + { + "path": "circular2.ts" + } + ] + } + } + } + From e4f73a055a3e788c2cf35c059ca975afdc1f14cc Mon Sep 17 00:00:00 2001 From: Max Schwenk Date: Tue, 24 Sep 2024 13:01:06 -0400 Subject: [PATCH 019/218] Invalid JSON in task docs (#9180) ### Description JSON looks wrong to my eyes ### Testing Instructions Use your eyes and your mind to discover the Truth --- docs/repo-docs/crafting-your-repository/configuring-tasks.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx b/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx index 8e1f15553e87f..341915773f50a 100644 --- a/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx +++ b/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx @@ -367,6 +367,7 @@ To meet both requirements (correctness and parallelism), you can introduce [Tran }, "check-types": { "dependsOn": ["transit"] + }, }, } ``` From 6d4e655b0120c96e20308adbf46380e5b71a7db1 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 24 Sep 2024 16:44:17 -0400 Subject: [PATCH 020/218] refactor: Add `query` resolvers into web UI (#9182) ### Description Adds the query resolvers such as `packages` and `file` into the web UI GraphQL server. This will allow us to display repo general info in studio. You can review this commit by commit ### Testing Instructions --- Cargo.lock | 2 +- crates/turborepo-lib/Cargo.toml | 1 + crates/turborepo-lib/src/commands/query.rs | 10 ++- crates/turborepo-lib/src/commands/run.rs | 12 ++-- crates/turborepo-lib/src/query/mod.rs | 18 +++-- .../turborepo-lib/src/query/package_graph.rs | 1 + crates/turborepo-lib/src/run/mod.rs | 11 +-- crates/turborepo-lib/src/run/ui.rs | 55 ++++++++++++++ crates/turborepo-lib/src/run/watch.rs | 19 ++--- crates/turborepo-lib/src/task_hash.rs | 2 +- crates/turborepo-ui/Cargo.toml | 1 - crates/turborepo-ui/src/wui/mod.rs | 5 +- crates/turborepo-ui/src/wui/server.rs | 71 +++---------------- crates/turborepo-ui/src/wui/subscriber.rs | 4 +- 14 files changed, 115 insertions(+), 97 deletions(-) create mode 100644 crates/turborepo-lib/src/query/package_graph.rs create mode 100644 crates/turborepo-lib/src/run/ui.rs diff --git a/Cargo.lock b/Cargo.lock index 234d5d4d63dc4..686d7e8d6ae47 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6371,6 +6371,7 @@ dependencies = [ "tonic", "tonic-build", "tower", + "tower-http", "tracing", "tracing-appender", "tracing-chrome", @@ -6574,7 +6575,6 @@ dependencies = [ "test-case", "thiserror", "tokio", - "tower-http", "tracing", "tui-term", "turbopath", diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index 701d3e2084aa1..a88c7cd83d6c3 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -109,6 +109,7 @@ tokio-stream = { version = "0.1.12", features = ["net"] } tokio-util = { version = "0.7.7", features = ["compat"] } tonic = { version = "0.11.0", features = ["transport"] } tower = "0.4.13" +tower-http = { version = "0.5.2", features = ["cors"] } tracing-appender = "0.2.2" tracing-chrome = "0.7.1" tracing-subscriber = { version = "0.3.17", features = ["env-filter"] } diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index 875c9a91f71f2..b88edf58cf3fd 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -1,4 +1,4 @@ -use std::fs; +use std::{fs, sync::Arc}; use async_graphql::{EmptyMutation, EmptySubscription, Schema, ServerError}; use miette::{Diagnostic, Report, SourceSpan}; @@ -10,7 +10,7 @@ use crate::{ cli::Command, commands::{run::get_signal, CommandBase}, query, - query::{Error, Query}, + query::{Error, RepositoryQuery}, run::builder::RunBuilder, signal::SignalHandler, }; @@ -84,7 +84,11 @@ pub async fn run( fs::read_to_string(AbsoluteSystemPathBuf::from_unknown(run.repo_root(), query))? }; - let schema = Schema::new(Query::new(run), EmptyMutation, EmptySubscription); + let schema = Schema::new( + RepositoryQuery::new(Arc::new(run)), + EmptyMutation, + EmptySubscription, + ); let result = schema.execute(&query).await; if result.errors.is_empty() { diff --git a/crates/turborepo-lib/src/commands/run.rs b/crates/turborepo-lib/src/commands/run.rs index 46c67aac34ece..82b3a3debac5c 100644 --- a/crates/turborepo-lib/src/commands/run.rs +++ b/crates/turborepo-lib/src/commands/run.rs @@ -1,4 +1,4 @@ -use std::future::Future; +use std::{future::Future, sync::Arc}; use tracing::error; use turborepo_telemetry::events::command::CommandEventBuilder; @@ -40,10 +40,12 @@ pub async fn run(base: CommandBase, telemetry: CommandEventBuilder) -> Result, } -impl Query { - pub fn new(run: Run) -> Self { - Self { run: Arc::new(run) } +impl RepositoryQuery { + pub fn new(run: Arc) -> Self { + Self { run } } } @@ -267,7 +267,7 @@ impl PackagePredicate { } #[Object] -impl Query { +impl RepositoryQuery { async fn affected_packages( &self, base: Option, @@ -339,12 +339,16 @@ impl Query { } } -async fn graphiql() -> impl IntoResponse { +pub async fn graphiql() -> impl IntoResponse { response::Html(GraphiQLSource::build().endpoint("/").finish()) } pub async fn run_server(run: Run, signal: SignalHandler) -> Result<(), Error> { - let schema = Schema::new(Query::new(run), EmptyMutation, EmptySubscription); + let schema = Schema::new( + RepositoryQuery::new(Arc::new(run)), + EmptyMutation, + EmptySubscription, + ); let app = Router::new().route("/", get(graphiql).post_service(GraphQL::new(schema))); let subscriber = signal.subscribe().ok_or(Error::NoSignalHandler)?; diff --git a/crates/turborepo-lib/src/query/package_graph.rs b/crates/turborepo-lib/src/query/package_graph.rs new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/crates/turborepo-lib/src/query/package_graph.rs @@ -0,0 +1 @@ + diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index db28bb373f95f..20e319477f0f2 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -10,6 +10,7 @@ mod scope; pub(crate) mod summary; pub mod task_access; pub mod task_id; +mod ui; pub mod watch; use std::{ @@ -211,7 +212,7 @@ impl Run { && tui::terminal_big_enough()?) } - pub fn start_ui(&self) -> UIResult { + pub fn start_ui(self: &Arc) -> UIResult { // Print prelude here as this needs to happen before the UI is started if self.should_print_prelude { self.print_run_prelude(); @@ -227,10 +228,10 @@ impl Run { .map(|res| res.map(|(sender, handle)| (UISender::Wui(sender), handle))), } } - fn start_web_ui(&self) -> WuiResult { + fn start_web_ui(self: &Arc) -> WuiResult { let (tx, rx) = tokio::sync::mpsc::unbounded_channel(); - let handle = tokio::spawn(turborepo_ui::wui::server::start_server(rx)); + let handle = tokio::spawn(ui::start_web_ui_server(rx, self.clone())); Ok(Some((WebUISender { tx }, handle))) } @@ -260,7 +261,7 @@ impl Run { } } - pub async fn run(&mut self, ui_sender: Option, is_watch: bool) -> Result { + pub async fn run(&self, ui_sender: Option, is_watch: bool) -> Result { let skip_cache_writes = self.opts.runcache_opts.skip_writes; if let Some(subscriber) = self.signal_handler.subscribe() { let run_cache = self.run_cache.clone(); @@ -356,7 +357,7 @@ impl Run { self.engine.task_definitions(), &self.repo_root, &self.run_telemetry, - &mut self.daemon, + &self.daemon, )?; let root_workspace = self diff --git a/crates/turborepo-lib/src/run/ui.rs b/crates/turborepo-lib/src/run/ui.rs new file mode 100644 index 0000000000000..21ce7949f8a5f --- /dev/null +++ b/crates/turborepo-lib/src/run/ui.rs @@ -0,0 +1,55 @@ +use std::sync::Arc; + +use async_graphql::{EmptyMutation, EmptySubscription, MergedObject, Schema}; +use async_graphql_axum::GraphQL; +use axum::{http::Method, routing::get, Router}; +use tokio::net::TcpListener; +use tower_http::cors::{Any, CorsLayer}; +use turborepo_ui::wui::{event::WebUIEvent, server::SharedState}; + +use crate::{query, query::graphiql, run::Run}; + +pub async fn start_web_ui_server( + rx: tokio::sync::mpsc::UnboundedReceiver, + run: Arc, +) -> Result<(), turborepo_ui::Error> { + let state = SharedState::default(); + let subscriber = turborepo_ui::wui::subscriber::Subscriber::new(rx); + tokio::spawn(subscriber.watch(state.clone())); + + run_server(state.clone(), run).await?; + + Ok(()) +} + +#[derive(MergedObject)] +struct Query(turborepo_ui::wui::RunQuery, query::RepositoryQuery); + +async fn run_server(state: SharedState, run: Arc) -> Result<(), turborepo_ui::Error> { + let cors = CorsLayer::new() + // allow `GET` and `POST` when accessing the resource + .allow_methods([Method::GET, Method::POST]) + .allow_headers(Any) + // allow requests from any origin + .allow_origin(Any); + + let web_ui_query = turborepo_ui::wui::RunQuery::new(state.clone()); + let turbo_query = query::RepositoryQuery::new(run); + let combined_query = Query(web_ui_query, turbo_query); + + let schema = Schema::new(combined_query, EmptyMutation, EmptySubscription); + let app = Router::new() + .route("/", get(graphiql).post_service(GraphQL::new(schema))) + .layer(cors); + + axum::serve( + TcpListener::bind("127.0.0.1:8000") + .await + .map_err(turborepo_ui::wui::Error::Server)?, + app, + ) + .await + .map_err(turborepo_ui::wui::Error::Server)?; + + Ok(()) +} diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index ce16c4c02979a..bc5f18f3621f5 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -46,7 +46,7 @@ impl ChangedPackages { } pub struct WatchClient { - run: Run, + run: Arc, watched_packages: HashSet, persistent_tasks_handle: Option, connector: DaemonConnector, @@ -130,9 +130,11 @@ impl WatchClient { execution_args: execution_args.clone(), }); - let run = RunBuilder::new(new_base)? - .build(&handler, telemetry.clone()) - .await?; + let run = Arc::new( + RunBuilder::new(new_base)? + .build(&handler, telemetry.clone()) + .await?, + ); let watched_packages = run.get_relevant_packages(); @@ -288,7 +290,7 @@ impl WatchClient { let signal_handler = self.handler.clone(); let telemetry = self.telemetry.clone(); - let mut run = RunBuilder::new(new_base)? + let run = RunBuilder::new(new_base)? .with_entrypoint_packages(packages) .hide_prelude() .build(&signal_handler, telemetry) @@ -331,7 +333,8 @@ impl WatchClient { self.run = RunBuilder::new(base.clone())? .hide_prelude() .build(&self.handler, self.telemetry.clone()) - .await?; + .await? + .into(); self.watched_packages = self.run.get_relevant_packages(); @@ -357,7 +360,7 @@ impl WatchClient { self.persistent_tasks_handle.is_none(), "persistent handle should be empty before creating a new one" ); - let mut persistent_run = self.run.create_run_for_persistent_tasks(); + let persistent_run = self.run.create_run_for_persistent_tasks(); let ui_sender = self.ui_sender.clone(); // If we have persistent tasks, we run them on a separate thread // since persistent tasks don't finish @@ -369,7 +372,7 @@ impl WatchClient { }); // But we still run the regular tasks blocking - let mut non_persistent_run = self.run.create_run_without_persistent_tasks(); + let non_persistent_run = self.run.create_run_without_persistent_tasks(); Ok(non_persistent_run.run(self.ui_sender.clone(), true).await?) } else { Ok(self.run.run(self.ui_sender.clone(), true).await?) diff --git a/crates/turborepo-lib/src/task_hash.rs b/crates/turborepo-lib/src/task_hash.rs index 698bf4e06b673..24ce129b0c3f8 100644 --- a/crates/turborepo-lib/src/task_hash.rs +++ b/crates/turborepo-lib/src/task_hash.rs @@ -76,7 +76,7 @@ impl PackageInputsHashes { task_definitions: &HashMap, TaskDefinition>, repo_root: &AbsoluteSystemPath, telemetry: &GenericEventBuilder, - daemon: &mut Option>, + daemon: &Option>, ) -> Result { tracing::trace!(scm_manual=%scm.is_manual(), "scm running in {} mode", if scm.is_manual() { "manual" } else { "git" }); diff --git a/crates/turborepo-ui/Cargo.toml b/crates/turborepo-ui/Cargo.toml index 21e5f002da9bb..a75108233c79f 100644 --- a/crates/turborepo-ui/Cargo.toml +++ b/crates/turborepo-ui/Cargo.toml @@ -35,7 +35,6 @@ serde_json = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } -tower-http = { version = "0.5.2", features = ["cors"] } tracing = { workspace = true } tui-term = { workspace = true } turbopath = { workspace = true } diff --git a/crates/turborepo-ui/src/wui/mod.rs b/crates/turborepo-ui/src/wui/mod.rs index 3eb2384c846c2..1fb7e7ba4e8de 100644 --- a/crates/turborepo-ui/src/wui/mod.rs +++ b/crates/turborepo-ui/src/wui/mod.rs @@ -1,12 +1,13 @@ //! Web UI for Turborepo. Creates a WebSocket server that can be subscribed to //! by a web client to display the status of tasks. -mod event; +pub mod event; pub mod sender; pub mod server; -mod subscriber; +pub mod subscriber; use event::WebUIEvent; +pub use server::RunQuery; use thiserror::Error; #[derive(Debug, Error)] diff --git a/crates/turborepo-ui/src/wui/server.rs b/crates/turborepo-ui/src/wui/server.rs index 81858b4b579cb..50b35fc1afe98 100644 --- a/crates/turborepo-ui/src/wui/server.rs +++ b/crates/turborepo-ui/src/wui/server.rs @@ -1,19 +1,10 @@ use std::sync::Arc; -use async_graphql::{ - http::GraphiQLSource, EmptyMutation, EmptySubscription, Object, Schema, SimpleObject, -}; -use async_graphql_axum::GraphQL; -use axum::{http::Method, response, response::IntoResponse, routing::get, Router}; +use async_graphql::{Object, SimpleObject}; use serde::Serialize; -use tokio::{net::TcpListener, sync::Mutex}; -use tower_http::cors::{Any, CorsLayer}; +use tokio::sync::Mutex; -use crate::wui::{ - event::WebUIEvent, - subscriber::{Subscriber, TaskState, WebUIState}, - Error, -}; +use crate::wui::subscriber::{TaskState, WebUIState}; #[derive(Debug, Clone, Serialize, SimpleObject)] struct Task { @@ -44,67 +35,23 @@ impl<'a> CurrentRun<'a> { /// We keep the state in a `Arc>>` so both `Subscriber` and /// `Query` can access it, with `Subscriber` mutating it and `Query` only /// reading it. -pub(crate) type SharedState = Arc>; +pub type SharedState = Arc>; -pub struct Query { +/// The query for actively running tasks (as opposed to the query for general +/// repository state `RepositoryQuery` in `turborepo_lib::query`) +pub struct RunQuery { state: SharedState, } -impl Query { +impl RunQuery { pub fn new(state: SharedState) -> Self { Self { state } } } #[Object] -impl Query { +impl RunQuery { async fn current_run(&self) -> CurrentRun { CurrentRun { state: &self.state } } } - -async fn graphiql() -> impl IntoResponse { - response::Html( - GraphiQLSource::build() - .endpoint("/") - .subscription_endpoint("/subscriptions") - .finish(), - ) -} - -pub async fn start_server( - rx: tokio::sync::mpsc::UnboundedReceiver, -) -> Result<(), crate::Error> { - let state = Arc::new(Mutex::new(WebUIState::default())); - let subscriber = Subscriber::new(rx); - tokio::spawn(subscriber.watch(state.clone())); - - run_server(state.clone()).await?; - - Ok(()) -} - -pub(crate) async fn run_server(state: SharedState) -> Result<(), crate::Error> { - let cors = CorsLayer::new() - // allow `GET` and `POST` when accessing the resource - .allow_methods([Method::GET, Method::POST]) - .allow_headers(Any) - // allow requests from any origin - .allow_origin(Any); - - let schema = Schema::new(Query { state }, EmptyMutation, EmptySubscription); - let app = Router::new() - .route("/", get(graphiql).post_service(GraphQL::new(schema))) - .layer(cors); - - axum::serve( - TcpListener::bind("127.0.0.1:8000") - .await - .map_err(Error::Server)?, - app, - ) - .await - .map_err(Error::Server)?; - - Ok(()) -} diff --git a/crates/turborepo-ui/src/wui/subscriber.rs b/crates/turborepo-ui/src/wui/subscriber.rs index c8196c2ba4aba..92aaa6711fcee 100644 --- a/crates/turborepo-ui/src/wui/subscriber.rs +++ b/crates/turborepo-ui/src/wui/subscriber.rs @@ -150,7 +150,7 @@ mod test { use super::*; use crate::{ tui::event::OutputLogs, - wui::{sender::WebUISender, server::Query}, + wui::{sender::WebUISender, server::RunQuery}, }; #[tokio::test] @@ -200,7 +200,7 @@ mod test { ); // Now let's check with the GraphQL API - let schema = Schema::new(Query::new(state), EmptyMutation, EmptySubscription); + let schema = Schema::new(RunQuery::new(state), EmptyMutation, EmptySubscription); let result = schema .execute("query { currentRun { tasks { name state { status } } } }") .await; From fde7946204290bc04483f1a8a05c673116a856ee Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Thu, 26 Sep 2024 10:14:01 -0400 Subject: [PATCH 021/218] add method for determining base commit on GitHub actions (#9169) --- Cargo.lock | 3 + crates/turborepo-ci/src/lib.rs | 4 + crates/turborepo-scm/Cargo.toml | 3 + crates/turborepo-scm/src/git.rs | 356 ++++++++++++++++++++++++++++++-- 4 files changed, 352 insertions(+), 14 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 686d7e8d6ae47..c4dbcc163caa5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6507,12 +6507,15 @@ dependencies = [ "hex", "ignore", "nom", + "serde", + "serde_json", "sha1", "tempfile", "test-case", "thiserror", "tracing", "turbopath", + "turborepo-ci", "turborepo-telemetry", "wax", "which", diff --git a/crates/turborepo-ci/src/lib.rs b/crates/turborepo-ci/src/lib.rs index 462d296a8c1bb..6c3be7aaf3a1e 100644 --- a/crates/turborepo-ci/src/lib.rs +++ b/crates/turborepo-ci/src/lib.rs @@ -91,6 +91,10 @@ impl Vendor { Self::infer().map(|v| v.name) } + pub fn is(name: &str) -> bool { + Self::infer().map_or(false, |v| v.name == name) + } + pub fn get_constant() -> Option<&'static str> { Self::infer().map(|v| v.constant) } diff --git a/crates/turborepo-scm/Cargo.toml b/crates/turborepo-scm/Cargo.toml index 92cd555381067..4be21216a1409 100644 --- a/crates/turborepo-scm/Cargo.toml +++ b/crates/turborepo-scm/Cargo.toml @@ -16,10 +16,13 @@ globwalk = { path = "../turborepo-globwalk" } hex = { workspace = true } ignore = "0.4.20" nom = "7.1.3" +serde = { workspace = true, features = ["derive"] } +serde_json = { workspace = true } sha1 = "0.10.5" thiserror = { workspace = true } tracing = { workspace = true } turbopath = { workspace = true } +turborepo-ci = { workspace = true } turborepo-telemetry = { path = "../turborepo-telemetry" } wax = { workspace = true } which = { workspace = true } diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index ac475c49a2adf..42f374018981c 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -1,9 +1,18 @@ -use std::{backtrace::Backtrace, collections::HashSet, path::PathBuf, process::Command}; +use std::{ + backtrace::Backtrace, + collections::HashSet, + env::{self, VarError}, + fs::{self}, + path::PathBuf, + process::Command, +}; +use serde::Deserialize; use tracing::warn; use turbopath::{ AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPathBuf, RelativeUnixPath, }; +use turborepo_ci::Vendor; use crate::{Error, Git, SCM}; @@ -81,6 +90,74 @@ impl SCM { } } +const UNKNOWN_SHA: &str = "0000000000000000000000000000000000000000"; + +#[derive(Debug, Deserialize, Clone)] +struct GitHubCommit { + id: String, +} + +#[derive(Debug, Deserialize, Default)] +struct GitHubEvent { + #[serde(default)] + before: String, + + #[serde(default)] + commits: Vec, + + #[serde(default)] + forced: bool, +} + +impl GitHubEvent { + fn get_parent_ref_of_first_commit(&self) -> Option { + if self.commits.is_empty() { + // commits can be empty when you push a branch with no commits + return None; + } + + if self.commits.len() >= 2048 { + // GitHub API limit for number of commits shown in this field + return None; + } + + // Extract the base ref from the push event + let first_commit = self.commits.first()?; + let id = &first_commit.id; + Some(format!("{id}^")) + } +} + +#[derive(Debug)] +pub struct CIEnv { + is_github_actions: bool, + github_base_ref: Result, + github_event_path: Result, +} + +impl Default for CIEnv { + fn default() -> Self { + Self::new() + } +} + +impl CIEnv { + pub fn new() -> Self { + Self { + is_github_actions: Vendor::is("GitHub Actions"), + github_base_ref: env::var("GITHUB_BASE_REF"), + github_event_path: env::var("GITHUB_EVENT_PATH"), + } + } + pub fn none() -> Self { + Self { + is_github_actions: false, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Err(VarError::NotPresent), + } + } +} + impl Git { fn get_current_branch(&self) -> Result { let output = self.execute_git_command(&["branch", "--show-current"], "")?; @@ -94,19 +171,86 @@ impl Git { Ok(output.trim().to_owned()) } - fn resolve_base<'a>(&self, base_override: Option<&'a str>) -> Result<&'a str, Error> { + /// for GitHub Actions environment variables, see: https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables + pub fn get_github_base_ref(base_ref_env: CIEnv) -> Option { + // make sure we're running in a CI environment + if !base_ref_env.is_github_actions { + return None; + } + + /* + * The name of the base ref or target branch of the pull request in a + * workflow run. + * + * This variable only has a value when the event that triggers a workflow run + * is either `pull_request` or `pull_request_target`. + * For example, `main` + * + * So environment variable is empty in a regular commit + */ + if let Ok(pr) = base_ref_env.github_base_ref { + if !pr.is_empty() { + return Some(pr); + } + } + + // we must be in a push event + // try reading from the GITHUB_EVENT_PATH file + if let Ok(event_path) = base_ref_env.github_event_path { + // Try to open the event file and read the contents + let data = fs::read_to_string(event_path).ok()?; + + // Parse the JSON data from the file + let json: GitHubEvent = serde_json::from_str(&data).ok()?; + + // Extract the base ref from the pull request event if available + let base_ref = &json.before; + + // the base_ref will be UNKNOWN_SHA on first push + // we also use this behavior in force pushes + if base_ref == UNKNOWN_SHA || json.forced { + return json.get_parent_ref_of_first_commit(); + } + + if base_ref.is_empty() { + return None; + } + + return Some(base_ref.to_string()); + } + None + } + + fn resolve_base(&self, base_override: Option<&str>, env: CIEnv) -> Result { if let Some(valid_from) = base_override { - return Ok(valid_from); + return Ok(valid_from.to_string()); + } + + if let Some(github_base_ref) = Self::get_github_base_ref(env) { + // we don't fall through to checking against main or master + // because at this point we know we're in a GITHUB CI environment + // and we should really know by now what the base ref is + // so it's better to just error if something went wrong + return if self + .execute_git_command(&["rev-parse", &github_base_ref], "") + .is_ok() + { + println!("Resolved base ref from GitHub Actions event: {github_base_ref}"); + Ok(github_base_ref) + } else { + println!("Failed to resolve base ref from GitHub Actions event"); + Err(Error::UnableToResolveRef) + }; } let main_result = self.execute_git_command(&["rev-parse", "main"], ""); if main_result.is_ok() { - return Ok("main"); + return Ok("main".to_string()); } let master_result = self.execute_git_command(&["rev-parse", "master"], ""); if master_result.is_ok() { - return Ok("master"); + return Ok("master".to_string()); } Err(Error::UnableToResolveRef) } @@ -124,12 +268,12 @@ impl Git { let mut files = HashSet::new(); - let valid_from = self.resolve_base(from_commit)?; + let valid_from = self.resolve_base(from_commit, CIEnv::new())?; let mut args = if let Some(to_commit) = to_commit { - vec!["diff", "--name-only", valid_from, to_commit] + vec!["diff", "--name-only", &valid_from, to_commit] } else { - vec!["diff", "--name-only", valid_from] + vec!["diff", "--name-only", &valid_from] }; if merge_base { @@ -204,7 +348,7 @@ impl Git { file_path: &AbsoluteSystemPath, ) -> Result, Error> { let anchored_file_path = self.root.anchor(file_path)?; - let valid_from = self.resolve_base(from_commit)?; + let valid_from = self.resolve_base(from_commit, CIEnv::new())?; let arg = format!("{}:{}", valid_from, anchored_file_path.as_str()); self.execute_git_command(&["show", &arg], "") @@ -244,19 +388,23 @@ mod tests { use std::{ assert_matches::assert_matches, collections::HashSet, + env::VarError, fs, path::{Path, PathBuf}, process::Command, }; use git2::{Oid, Repository, RepositoryInitOptions}; - use tempfile::TempDir; + use tempfile::{NamedTempFile, TempDir}; use test_case::test_case; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, PathError}; use which::which; - use super::{previous_content, ChangedFiles}; - use crate::{Error, Git, SCM}; + use super::{previous_content, CIEnv, ChangedFiles}; + use crate::{ + git::{GitHubCommit, GitHubEvent}, + Error, Git, SCM, + }; fn setup_repository( init_opts: Option<&RepositoryInitOptions>, @@ -784,9 +932,9 @@ mod tests { }); let thing = Git::find(&root).unwrap(); - let actual = thing.resolve_base(target_branch).ok(); + let actual = thing.resolve_base(target_branch, CIEnv::none()).ok(); - assert_eq!(actual, expected); + assert_eq!(actual.as_deref(), expected); Ok(()) } @@ -864,4 +1012,184 @@ mod tests { Ok(()) } + + struct TestCase { + env: CIEnv, + event_json: &'static str, + } + + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Err(VarError::NotPresent), + }, + event_json: r#""#, + }, + None + ; "GITHUB_BASE_REF and GITHUB_EVENT_PATH are not set" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Ok("".to_string()), + github_event_path: Err(VarError::NotPresent), + }, + event_json: r#""#, + }, + None + ; "GITHUB_BASE_REF is set to an empty string" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Ok("The choice is yours, and yours alone".to_string()), + github_event_path: Err(VarError::NotPresent), + }, + event_json: r#""#, + }, + Some("The choice is yours, and yours alone") + ; "GITHUB_BASE_REF is set to a non-empty string" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("Olmec refused to give up the location of the Shrine of the Silver Monkey".to_string()), + }, + event_json: r#""#, + }, + None + ; "GITHUB_EVENT_PATH is set, but the file fails to open" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("the_room_of_the_three_gargoyles.json".to_string()), + }, + event_json: r#"first you must pass the temple guards!"#, + }, + None + ; "GITHUB_EVENT_PATH is set, is not valid JSON" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("olmecs_temple.json".to_string()), + }, + event_json: r#"{}"#, + }, + None + ; "no 'before' key in the JSON" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("olmecs_temple.json".to_string()), + }, + event_json: r#"{"forced":true}"#, + }, + None + ; "force push" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("shrine_of_the_silver_monkey.json".to_string()), + }, + event_json: r#"{"before":"e83c5163316f89bfbde7d9ab23ca2e25604af290"}"#, + }, + Some("e83c5163316f89bfbde7d9ab23ca2e25604af290") + ; "found a valid 'before' key in the JSON" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("shrine_of_the_silver_monkey.json".to_string()), + }, + event_json: r#"{"before":"0000000000000000000000000000000000000000"}"#, + }, + None + ; "UNKNOWN_SHA but no commits found" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("shrine_of_the_silver_monkey.json".to_string()), + }, + event_json: r#"{"before":"0000000000000000000000000000000000000000","commits":[]}"#, + }, + None + ; "empty commits" + )] + #[test_case( + TestCase { + env: CIEnv { + is_github_actions: true, + github_base_ref: Err(VarError::NotPresent), + github_event_path: Ok("shrine_of_the_silver_monkey.json".to_string()), + }, + event_json: r#"{"before":"0000000000000000000000000000000000000000","commits":[{"id":"yep"}]}"#, + }, + Some("yep^") + ; "first commit has a parent" + )] + fn test_get_github_base_ref(test_case: TestCase, expected: Option<&str>) -> Result<(), Error> { + // note: we must bind here because otherwise the temporary file will be dropped + let temp_file = if test_case.env.github_event_path.is_ok() { + let temp_file = NamedTempFile::new().expect("Failed to create temporary file"); + fs::write(temp_file.path(), test_case.event_json) + .expect("Failed to write to temporary file"); + Ok(temp_file) + } else { + Err(VarError::NotPresent) + }; + + let actual = Git::get_github_base_ref(CIEnv { + is_github_actions: test_case.env.is_github_actions, + github_base_ref: test_case.env.github_base_ref, + github_event_path: temp_file + .as_ref() + .map(|p| p.path().to_str().unwrap().to_string()) + .map_err(|e| e.clone()), + }); + assert_eq!(actual, expected.map(|s| s.to_string())); + + Ok(()) + } + + #[test] + fn test_thousands_of_commits() { + let commits = vec![ + GitHubCommit { + id: "insert-famous-sha-here".to_string(), + }; + 2049 // 2049 is one over the limit + ]; + + let github_event = GitHubEvent { + before: "".to_string(), + commits, + forced: false, + }; + let actual = github_event.get_parent_ref_of_first_commit(); + + assert_eq!(None, actual); + } } From 490e499ba4b8c11e4e55889f8999f1b267814ae3 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 26 Sep 2024 14:08:05 -0400 Subject: [PATCH 022/218] feat(query): add filter by having task (#9188) ### Description Adds a `has` filter that lets you check if a package has a task. ### Testing Instructions Added tests to `command-query.t` --- crates/turborepo-lib/src/query/mod.rs | 15 +++++++ crates/turborepo-lib/src/query/package.rs | 10 ++++- crates/turborepo-lib/src/query/task.rs | 1 + .../packages/another/package.json | 4 +- .../integration/tests/command-ls.t | 3 +- .../integration/tests/command-query.t | 39 +++++++++++++++++++ .../integration/tests/edit-turbo-json/task.t | 10 ++--- turborepo-tests/integration/tests/no-args.t | 4 ++ 8 files changed, 78 insertions(+), 8 deletions(-) create mode 100644 crates/turborepo-lib/src/query/task.rs diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index f6abe0aa7a6e1..f12a7da65d0a4 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -67,6 +67,7 @@ impl FromIterator for Array { #[derive(Enum, Copy, Clone, Eq, PartialEq, Debug)] enum PackageFields { Name, + TaskName, DirectDependencyCount, DirectDependentCount, IndirectDependentCount, @@ -96,6 +97,7 @@ struct PackagePredicate { greater_than: Option, less_than: Option, not: Option>, + has: Option, } impl PackagePredicate { @@ -226,6 +228,14 @@ impl PackagePredicate { } } + fn check_has(pkg: &Package, field: &PackageFields, value: &Any) -> bool { + match (field, &value.0) { + (PackageFields::Name, Value::String(name)) => pkg.name.as_ref() == name, + (PackageFields::TaskName, Value::String(name)) => pkg.task_names().contains(name), + _ => false, + } + } + fn check(&self, pkg: &Package) -> bool { let and = self .and @@ -254,6 +264,10 @@ impl PackagePredicate { .as_ref() .map(|pair| Self::check_greater_than(pkg, &pair.field, &pair.value)); let not = self.not.as_ref().map(|predicate| !predicate.check(pkg)); + let has = self + .has + .as_ref() + .map(|pair| Self::check_has(pkg, &pair.field, &pair.value)); and.into_iter() .chain(or) @@ -262,6 +276,7 @@ impl PackagePredicate { .chain(greater_than) .chain(less_than) .chain(not) + .chain(has) .all(|p| p) } } diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index 789f0c5135ebc..e5092a87a5237 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -1,4 +1,4 @@ -use std::sync::Arc; +use std::{collections::HashSet, sync::Arc}; use async_graphql::Object; use itertools::Itertools; @@ -15,6 +15,14 @@ pub struct Package { } impl Package { + pub fn task_names(&self) -> HashSet { + self.run + .pkg_dep_graph() + .package_json(&self.name) + .map(|json| json.scripts.keys().cloned().collect()) + .unwrap_or_default() + } + pub fn direct_dependents_count(&self) -> usize { self.run .pkg_dep_graph() diff --git a/crates/turborepo-lib/src/query/task.rs b/crates/turborepo-lib/src/query/task.rs new file mode 100644 index 0000000000000..8b137891791fe --- /dev/null +++ b/crates/turborepo-lib/src/query/task.rs @@ -0,0 +1 @@ + diff --git a/turborepo-tests/integration/fixtures/basic_monorepo/packages/another/package.json b/turborepo-tests/integration/fixtures/basic_monorepo/packages/another/package.json index e9e34ea52c154..0094525bb63b2 100644 --- a/turborepo-tests/integration/fixtures/basic_monorepo/packages/another/package.json +++ b/turborepo-tests/integration/fixtures/basic_monorepo/packages/another/package.json @@ -1,4 +1,6 @@ { "name": "another", - "scripts": {} + "scripts": { + "dev": "echo building" + } } diff --git a/turborepo-tests/integration/tests/command-ls.t b/turborepo-tests/integration/tests/command-ls.t index ebf8c9f3042f8..6108a209ff74b 100644 --- a/turborepo-tests/integration/tests/command-ls.t +++ b/turborepo-tests/integration/tests/command-ls.t @@ -47,7 +47,8 @@ Run info on package `another` WARNING ls command is experimental and may change in the future another depends on: - tasks: + tasks: + dev: echo building Run info on package `my-app` diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index 0d924f0de5172..7d9b2f8e1654a 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -55,6 +55,45 @@ Query packages that have at least one dependent package } } +Query packages that have a task named `build` + $ ${TURBO} query "query { packages(filter: { has: { field: TASK_NAME, value: \"build\" } }) { items { name } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": { + "items": [ + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } + } + } + +Query packages that have a task named `build` or `dev` + $ ${TURBO} query "query { packages(filter: { or: [{ has: { field: TASK_NAME, value: \"build\" } }, { has: { field: TASK_NAME, value: \"dev\" } }] }) { items { name } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": { + "items": [ + { + "name": "another" + }, + { + "name": "my-app" + }, + { + "name": "util" + } + ] + } + } + } + Get dependents of `util` $ ${TURBO} query "query { packages(filter: { equal: { field: NAME, value: \"util\" } }) { items { directDependents { items { name } } } } }" | jq WARNING query command is experimental and may change in the future diff --git a/turborepo-tests/integration/tests/edit-turbo-json/task.t b/turborepo-tests/integration/tests/edit-turbo-json/task.t index d72b6cdf7287b..6e419cd808746 100644 --- a/turborepo-tests/integration/tests/edit-turbo-json/task.t +++ b/turborepo-tests/integration/tests/edit-turbo-json/task.t @@ -6,7 +6,7 @@ Baseline task hashes $ ${TURBO} build --dry=json | jq -r '.tasks | sort_by(.taskId)[] | {taskId, hash}' { "taskId": "another#build", - "hash": "3639431fdcdf9f9e" + "hash": "e9a99dd97d223d88" } { "taskId": "my-app#build", @@ -22,7 +22,7 @@ Change only my-app#build $ ${TURBO} build --dry=json | jq -r '.tasks | sort_by(.taskId)[] | {taskId, hash}' { "taskId": "another#build", - "hash": "3639431fdcdf9f9e" + "hash": "e9a99dd97d223d88" } { "taskId": "my-app#build", @@ -38,7 +38,7 @@ Change my-app#build dependsOn $ ${TURBO} build --dry=json | jq -r '.tasks | sort_by(.taskId)[] | {taskId, hash}' { "taskId": "another#build", - "hash": "3639431fdcdf9f9e" + "hash": "e9a99dd97d223d88" } { "taskId": "my-app#build", @@ -54,7 +54,7 @@ Non-materially modifying the dep graph does nothing. $ ${TURBO} build --dry=json | jq -r '.tasks | sort_by(.taskId)[] | {taskId, hash}' { "taskId": "another#build", - "hash": "3639431fdcdf9f9e" + "hash": "e9a99dd97d223d88" } { "taskId": "my-app#build", @@ -71,7 +71,7 @@ Change util#build impacts itself and my-app $ ${TURBO} build --dry=json | jq -r '.tasks | sort_by(.taskId)[] | {taskId, hash}' { "taskId": "another#build", - "hash": "3639431fdcdf9f9e" + "hash": "e9a99dd97d223d88" } { "taskId": "my-app#build", diff --git a/turborepo-tests/integration/tests/no-args.t b/turborepo-tests/integration/tests/no-args.t index b76576b838c1d..a508040296d85 100644 --- a/turborepo-tests/integration/tests/no-args.t +++ b/turborepo-tests/integration/tests/no-args.t @@ -126,6 +126,8 @@ Run without any tasks, get a list of potential tasks to run my-app, util maybefails my-app, util + dev + another [1] Run again with a filter and get only the packages that match @@ -176,6 +178,8 @@ Initialize a new monorepo cross-workspace cross-workspace-underlying-task blank-pkg + dev + another missing-workspace-config-task missing-workspace-config missing-workspace-config-task-with-deps From 663d3ffdc5b1a4a93353ed408c0b6a653fd89a9f Mon Sep 17 00:00:00 2001 From: Martin Boucher Date: Thu, 26 Sep 2024 14:25:24 -0400 Subject: [PATCH 023/218] base.json is extended by other tsconfig.json, not package.json (#9189) ### Description In [Use a base tsconfig file](https://turbo.build/repo/docs/guides/tools/typescript#use-a-base-tsconfig-file), it is state that `base.json`, a TypeScript config file, is extended by every other `package.json`. I guess we should say extended by every other `tsconfig.json` in the workspace. --- docs/repo-docs/guides/tools/typescript.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index 5ee6d8206b134..700014579fb46 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -56,7 +56,7 @@ pnpm dlx create-turbo@latest ### Use a base `tsconfig` file -Inside `packages/tsconfig`, we have a few `json` files which represent different ways you might want to configure TypeScript in various packages. The `base.json` file is extended by every other `package.json` in the workspace and looks like this: +Inside `packages/tsconfig`, we have a few `json` files which represent different ways you might want to configure TypeScript in various packages. The `base.json` file is extended by every other `tsconfig.json` in the workspace and looks like this: ```json title="./packages/tsconfig/base.json" "compilerOptions": { From 42ad08d7a0406a0c11a8cd1fece46c55516adafb Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Thu, 26 Sep 2024 23:07:54 -0400 Subject: [PATCH 024/218] docs: grammar error (#9194) ### Description Just happened to notice this grammatical error when reading the docs: "from the first time the task was run" and "the first time the task ran" are both good, but "was ran" is not grammatical with the "was" auxiliary. --- docs/repo-docs/crafting-your-repository/caching.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/caching.mdx b/docs/repo-docs/crafting-your-repository/caching.mdx index 06339d96c5116..72c67f08e3437 100644 --- a/docs/repo-docs/crafting-your-repository/caching.mdx +++ b/docs/repo-docs/crafting-your-repository/caching.mdx @@ -7,7 +7,7 @@ import { Step, Steps } from '#/components/steps'; import { PackageManagerTabs, Tab } from '#/components/tabs'; import { Callout } from '#/components/callout'; -Turborepo uses caching to speed up builds, ensuring you **never do the same work twice**. When your task is cacheable, Turborepo will restore the results of your task from cache using a fingerprint from the first time the task was ran. +Turborepo uses caching to speed up builds, ensuring you **never do the same work twice**. When your task is cacheable, Turborepo will restore the results of your task from cache using a fingerprint from the first time the task ran. ![12 tasks are being ran in 3 packages, resulting in a ">>> FULL TURBO" cache hit. The total time it takes to restore these tasks from cache is 80 milliseconds.](/images/docs/why-turborepo-solution.png) @@ -134,7 +134,7 @@ If you're running into errors with files not being available when you hit cache, ### Logs -Turborepo always captures the terminal outputs of your tasks, restoring those logs to your terminal from the first time that the task was ran. +Turborepo always captures the terminal outputs of your tasks, restoring those logs to your terminal from the first time that the task ran. You can configure the verbosity of the replayed logs using [the `--output-logs` flag](/repo/docs/reference/run#--output-logs-option) or [`outputLogs` configuration option](/repo/docs/reference/configuration#outputlogs). From 349dd47944f48d3a93cb05353bb86116dc5c44c6 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:02:41 -0400 Subject: [PATCH 025/218] release(turborepo): 2.1.3-canary.2 (#9192) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 673d4acd508cd..799a2a41b7e5f 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index f2a37a7cb3442..ae5a3eaa633f5 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index f3d245d939bb1..fd458915f3511 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 9f31a5fc3f479..728d019f2c546 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index a5d76ec521187..b81911c4dfc96 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index ce2ecada04bd5..74d38a95b6102 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 638a5c9cc4f2d..85278b2940d49 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 70c13100763e6..11cc10a86d6b8 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 7a3b69b6e8177..a94a77dfdd80f 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.3-canary.1", + "version": "2.1.3-canary.2", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.3-canary.1", - "turbo-darwin-arm64": "2.1.3-canary.1", - "turbo-linux-64": "2.1.3-canary.1", - "turbo-linux-arm64": "2.1.3-canary.1", - "turbo-windows-64": "2.1.3-canary.1", - "turbo-windows-arm64": "2.1.3-canary.1" + "turbo-darwin-64": "2.1.3-canary.2", + "turbo-darwin-arm64": "2.1.3-canary.2", + "turbo-linux-64": "2.1.3-canary.2", + "turbo-linux-arm64": "2.1.3-canary.2", + "turbo-windows-64": "2.1.3-canary.2", + "turbo-windows-arm64": "2.1.3-canary.2" } } diff --git a/version.txt b/version.txt index 4c3bd158e4f40..bb5543b436560 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.3-canary.1 +2.1.3-canary.2 canary From cd86f80d03ebe30d65e64ce1fb5031dabc12215b Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 27 Sep 2024 13:13:19 -0400 Subject: [PATCH 026/218] feat(turbo): add version query (#9197) ### Description Add version query so studio can negotiate version ### Testing Instructions --- crates/turborepo-lib/src/query/mod.rs | 5 +++++ turborepo-tests/integration/tests/command-query.t | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index f12a7da65d0a4..643b87d07defb 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -16,6 +16,7 @@ use turbopath::AbsoluteSystemPathBuf; use turborepo_repository::package_graph::PackageName; use crate::{ + get_version, query::file::File, run::{builder::RunBuilder, Run}, signal::SignalHandler, @@ -315,6 +316,10 @@ impl RepositoryQuery { }) } + async fn version(&self) -> &'static str { + get_version() + } + async fn file(&self, path: String) -> Result { let abs_path = AbsoluteSystemPathBuf::from_unknown(self.run.repo_root(), path); diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index 7d9b2f8e1654a..ee77e09d4947e 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -206,4 +206,12 @@ Run the query ] } } + } + + $ ${TURBO} query "query { version }" + WARNING query command is experimental and may change in the future + { + "data": { + "version": "2.1.3-canary.2" + } } \ No newline at end of file From cc473cbf3fce1020a71e4372b42224d5e6882f0b Mon Sep 17 00:00:00 2001 From: Martin Boucher Date: Sat, 28 Sep 2024 15:11:42 -0400 Subject: [PATCH 027/218] docs: Task outputs clarifications (#9185) To avoid the impression that cache is disabled when Task `outputs` key is ommitted. `API reference` was more accurate for that behavior, than `Crafting your repository`. ### Description I'm new to Turborepo, and was reading [Crafting your repository](https://turbo.build/repo/docs/crafting-your-repository). Two sections lead me to conclude that when there is no `outputs` key in a Task, then caching is disabled. I think the wording in `API reference` is better. We have to account for Logs output even if there are no file outputs (which is really nice for linters). ### Testing Instructions * Review the modified documentations. * Take into account that I'm not a native english speaker (you probably notice already ;) ) --- docs/repo-docs/crafting-your-repository/caching.mdx | 4 ++++ docs/repo-docs/reference/configuration.mdx | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/caching.mdx b/docs/repo-docs/crafting-your-repository/caching.mdx index 72c67f08e3437..4ff884a8b64f0 100644 --- a/docs/repo-docs/crafting-your-repository/caching.mdx +++ b/docs/repo-docs/crafting-your-repository/caching.mdx @@ -121,10 +121,14 @@ For information on how to connect your CI machines to Remote Cache, visit [the C ## What gets cached? +Turborepo caches two types of outputs: Task outputs and Logs. + ### Task outputs Turborepo caches the file outputs of a task that are defined in [the `outputs` key](/repo/docs/reference/configuration#outputs) of `turbo.json`. When there's a cache hit, Turborepo will restore the files from the cache. +The `outputs` key is optional, see [the API reference](/repo/docs/reference/configuration#outputs) for how Turborepo behaves in this case. + If you do not declare file outputs for a task, Turborepo will not cache them. This might be okay for some tasks (like linters) - but many tasks produce files that you will want to be cached. diff --git a/docs/repo-docs/reference/configuration.mdx b/docs/repo-docs/reference/configuration.mdx index 9e503ee11b4e7..ab49e577a302a 100644 --- a/docs/repo-docs/reference/configuration.mdx +++ b/docs/repo-docs/reference/configuration.mdx @@ -339,8 +339,6 @@ An allowlist of environment variables that should be made available to this task A list of file glob patterns relative to the package's `package.json` to cache when the task is successfully completed. -Omitting this key or passing an empty array tells `turbo` to cache nothing (except logs, which are always cached when caching is enabled). - ```jsonc title="./turbo.json" { "tasks": { @@ -352,6 +350,8 @@ Omitting this key or passing an empty array tells `turbo` to cache nothing (exce } ``` +Omitting this key or passing an empty array tells `turbo` to cache nothing (except logs, which are always cached when caching is enabled). + ### `cache` Default: `true` From ed03d0c72a74cc74e83df86bd0d0b5bfd1b2131a Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Sat, 28 Sep 2024 14:22:45 -0600 Subject: [PATCH 028/218] Add "go-to-definition" instructions to TypeScript docs. (#9198) ### Description Title! --- docs/repo-docs/guides/tools/typescript.mdx | 36 +++++++++++++++++++--- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index 700014579fb46..24c21c467fac1 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -207,8 +207,8 @@ Then, create a `check-types` task in `turbo.json`. From the [Configuring tasks g }, "check-types": { "dependsOn": ["topo"] - }, - }, + } + } } ``` @@ -220,11 +220,37 @@ Then, run your task using `turbo check-types`. For [Internal Packages](/repo/docs/core-concepts/internal-packages), we recommend that you use `tsc` to compile your TypeScript libraries whenever possible. While you can use a bundler, it's not necessary and adds extra complexity to your build process. Additionally, bundling a library can mangle the code before it makes it to your applications' bundlers, causing hard to debug issues. +### Enable go-to-definition across package boundaries + +"Go-to-definition" is an editor feature for quickly navigating to the original declaration or definition of a symbol (like a variable or function) with a click or hotkey. Once TypeScript is configured correctly, you can navigate across [Internal Packages](/repo/docs/core-concepts/internal-packages) with ease. + +#### Just-in-Time Packages + +Exports from Just-in-Time Packages will automatically bring you to the original TypeScript source code as long as you aren't using [entrypoint wildcards](#package-entrypoint-wildcards). Go-to-definition will work as expected. + +#### Compiled Packages + +Exports from [Compiled Packages](/repo/docs/core-concepts/internal-packages#compiled-packages) require the use of [`declaration`](https://www.typescriptlang.org/tsconfig/#declaration) and [`declarationMap`](https://www.typescriptlang.org/tsconfig/#declarationMap) configurations for go-to-definition to work. After you've enabled these two configurations for the package, compile the package with `tsc`, and open the output directory to find declaration files and source maps. + + + + + + + + + + + + + +With these two files in place, your editor will now navigate to the original source code. + ### Use Node.js subpath imports instead of TypeScript compiler `paths` It's possible to create absolute imports in your packages using [the TypeScript compiler's `paths` option](https://www.typescriptlang.org/tsconfig#paths), but these paths can cause failed compilation when using [Just-in-Time Packages](https://turbo.build/repo/docs/core-concepts/internal-packages#just-in-time-packages). [As of TypeScript 5.4](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/#auto-import-support-for-subpath-imports), you can use [Node.js subpath imports](https://nodejs.org/api/packages.html#imports) instead for a more robust solution. -#### Just-in-Time packages +#### Just-in-Time Packages In [Just-in-Time packages](https://turbo.build/repo/docs/core-concepts/internal-packages#just-in-time-packages), `imports` must target the source code in the package, since build outputs like `dist` won't be created. @@ -252,9 +278,9 @@ export const Button = () => { -#### Compiled packages +#### Compiled Packages -In [Compiled packages](https://turbo.build/repo/docs/core-concepts/internal-packages#compiled-packages), `imports` target the built ouptuts for the package. +In [Compiled Packages](https://turbo.build/repo/docs/core-concepts/internal-packages#compiled-packages), `imports` target the built ouptuts for the package. From 30d4e9ead68195d05958d9f263fb7dd0524ef475 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Sat, 28 Sep 2024 14:27:53 -0600 Subject: [PATCH 029/218] Add link to go-to-definition doc. (#9199) --- docs/repo-docs/guides/tools/typescript.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index 24c21c467fac1..e98d6737607ba 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -226,7 +226,7 @@ For [Internal Packages](/repo/docs/core-concepts/internal-packages), we recommen #### Just-in-Time Packages -Exports from Just-in-Time Packages will automatically bring you to the original TypeScript source code as long as you aren't using [entrypoint wildcards](#package-entrypoint-wildcards). Go-to-definition will work as expected. +Exports from [Just-in-Time Packages](/repo/docs/core-concepts/internal-packages#just-in-time-packages) will automatically bring you to the original TypeScript source code as long as you aren't using [entrypoint wildcards](#package-entrypoint-wildcards). Go-to-definition will work as expected. #### Compiled Packages From ad4cf20f9d59a39196eae22102bced36bf5fd76b Mon Sep 17 00:00:00 2001 From: John Vandenberg Date: Sun, 29 Sep 2024 05:13:48 +0800 Subject: [PATCH 030/218] docs: Fix typos (#9184) ### Description Fix typos using https://crates.io/crates/typos-cli I can add the `.typos.toml` if that is desirable. While the changes extend beyond docs, the only visible impact of this change will be the fixes in the docs. ### Testing Instructions Co-authored-by: Anthony Shew --- crates/turborepo-auth/src/lib.rs | 2 +- crates/turborepo-filewatch/src/fsevent.rs | 2 +- crates/turborepo-globwalk/src/lib.rs | 6 ++--- crates/turborepo-globwatch/src/lib.rs | 22 +++++++++---------- crates/turborepo-lib/src/child.rs | 2 +- crates/turborepo-lib/src/process/mod.rs | 2 +- .../src/shim/local_turbo_config.rs | 2 +- .../src/shim/local_turbo_state.rs | 2 +- crates/turborepo-lib/src/tracing.rs | 2 +- crates/turborepo-lockfiles/src/berry/ser.rs | 4 ++-- crates/turborepo-lockfiles/src/pnpm/data.rs | 2 +- .../src/package_graph/dep_splitter.rs | 10 ++++----- crates/turborepo-ui/src/tui/spinner.rs | 2 +- crates/turborepo-wax/README.md | 4 ++-- crates/turborepo-wax/src/walk/filter.rs | 2 +- .../using-environment-variables.mdx | 2 +- docs/repo-docs/guides/tools/typescript.mdx | 2 +- packages/turbo-vsc/ARCHITECTURE.md | 4 ++-- scripts/version.js | 2 +- 19 files changed, 38 insertions(+), 38 deletions(-) diff --git a/crates/turborepo-auth/src/lib.rs b/crates/turborepo-auth/src/lib.rs index 9d0000476da5b..81cdb896706f7 100644 --- a/crates/turborepo-auth/src/lib.rs +++ b/crates/turborepo-auth/src/lib.rs @@ -84,7 +84,7 @@ impl Token { /// * `valid_message_fn` - An optional callback that gets called if the /// token is valid. It will be passed the user's email. // TODO(voz): This should do a `get_user` or `get_teams` instead of the caller - // doing it. The reason we don't do it here is becuase the caller + // doing it. The reason we don't do it here is because the caller // needs to do printing and requires the user struct, which we don't want to // return here. pub async fn is_valid( diff --git a/crates/turborepo-filewatch/src/fsevent.rs b/crates/turborepo-filewatch/src/fsevent.rs index 477fb44c7e44c..55cfb245092ba 100644 --- a/crates/turborepo-filewatch/src/fsevent.rs +++ b/crates/turborepo-filewatch/src/fsevent.rs @@ -428,7 +428,7 @@ impl FsEventWatcher { // We need to associate the stream context with our callback in order to // propagate events to the rest of the system. This will be owned by the // stream, and will be freed when the stream is closed. This means we - // will leak the context if we panic before reacing + // will leak the context if we panic before reaching // `FSEventStreamRelease`. let stream_context_info = Box::into_raw(Box::new(StreamContextInfo { event_handler: self.event_handler.clone(), diff --git a/crates/turborepo-globwalk/src/lib.rs b/crates/turborepo-globwalk/src/lib.rs index d43648a6f9091..f986b9059664c 100644 --- a/crates/turborepo-globwalk/src/lib.rs +++ b/crates/turborepo-globwalk/src/lib.rs @@ -407,7 +407,7 @@ fn visit_file( Err(e) => { let io_err = std::io::Error::from(e); match io_err.kind() { - // Ignore DNE and permission errors + // Ignore missing file and permission errors std::io::ErrorKind::NotFound | std::io::ErrorKind::PermissionDenied => None, _ => Some(Err(io_err.into())), } @@ -463,10 +463,10 @@ mod test { #[test_case("/a/b/.", "/a/b", 2 ; "test path with leading / and ending with dot segment")] #[test_case("/a/.././b", "/b", 0 ; "test path with leading / and mixed and consecutive dot and dotdot segments")] #[test_case("/a/b/c/../../d/e/f/g/h/i/../j", "/a/d/e/f/g/h/j", 1 ; "leading collapse followed by shorter one")] - fn test_collapse_path(glob: &str, expected: &str, earliest_collapsed_segement: usize) { + fn test_collapse_path(glob: &str, expected: &str, earliest_collapsed_segment: usize) { let (glob, segment) = collapse_path(glob).unwrap(); assert_eq!(glob, expected); - assert_eq!(segment, earliest_collapsed_segement); + assert_eq!(segment, earliest_collapsed_segment); } #[test_case("../a/b" ; "test path starting with ../ segment should return None")] diff --git a/crates/turborepo-globwatch/src/lib.rs b/crates/turborepo-globwatch/src/lib.rs index e4151c5fde34e..3048a8c2bdce6 100644 --- a/crates/turborepo-globwatch/src/lib.rs +++ b/crates/turborepo-globwatch/src/lib.rs @@ -211,7 +211,7 @@ impl GlobWatcher { Either::Left(mut e) => { // if we receive an event for a file in the flush dir, we need to // remove it from the events list, and send a signal to the flush - // requestor. flushes should not be considered as events. + // requester. flushes should not be considered as events. for flush_id in e .paths .extract_if(|p| p.starts_with(flush_dir.as_path())) @@ -228,7 +228,7 @@ impl GlobWatcher { .expect("only fails if holder panics") .remove(&flush_id) { - // if this fails, it just means the requestor has gone away + // if this fails, it just means the requester has gone away // and we can ignore it tx.send(()).ok(); } @@ -363,7 +363,7 @@ impl WatchConfig { // we watch the parent directory instead. // More information at https://github.com/notify-rs/notify/issues/403 #[cfg(windows)] - let watched_path = path.parent().expect("turbo is unusable at filesytem root"); + let watched_path = path.parent().expect("turbo is unusable at filesystem root"); #[cfg(not(windows))] let watched_path = path; @@ -424,7 +424,7 @@ enum GlobSymbol<'a> { DoubleStar, Question, Negation, - PathSeperator, + PathSeparator, } /// Gets the minimum set of paths that can be watched for a given glob, @@ -456,8 +456,8 @@ enum GlobSymbol<'a> { /// note: it is currently extremely conservative, handling only `**`, braces, /// and `?`. any other case watches the entire directory. fn glob_to_paths(glob: &str) -> Vec { - // get all the symbols and chunk them by path seperator - let chunks = glob_to_symbols(glob).group_by(|s| s != &GlobSymbol::PathSeperator); + // get all the symbols and chunk them by path separator + let chunks = glob_to_symbols(glob).group_by(|s| s != &GlobSymbol::PathSeparator); let chunks = chunks .into_iter() .filter_map(|(not_sep, chunk)| (not_sep).then_some(chunk)); @@ -508,7 +508,7 @@ fn symbols_to_combinations<'a, T: Iterator>>( GlobSymbol::DoubleStar => return None, GlobSymbol::Question => return None, GlobSymbol::Negation => return None, - GlobSymbol::PathSeperator => return None, + GlobSymbol::PathSeparator => return None, } } @@ -570,7 +570,7 @@ fn glob_to_symbols(glob: &str) -> impl Iterator { } b'?' => Some(GlobSymbol::Question), b'!' => Some(GlobSymbol::Negation), - b'/' => Some(GlobSymbol::PathSeperator), + b'/' => Some(GlobSymbol::PathSeparator), _ => Some(GlobSymbol::Char(&glob_bytes[start..end])), } } else { @@ -611,9 +611,9 @@ mod test { ); } - #[test_case("🇳🇴/🇳🇴", vec![Char("🇳🇴".as_bytes()), PathSeperator, Char("🇳🇴".as_bytes())])] - #[test_case("foo/**", vec![Char(b"f"), Char(b"o"), Char(b"o"), PathSeperator, DoubleStar])] - #[test_case("foo/{a,b}", vec![Char(b"f"), Char(b"o"), Char(b"o"), PathSeperator, OpenBrace, Char(b"a"), Char(b","), Char(b"b"), CloseBrace])] + #[test_case("🇳🇴/🇳🇴", vec![Char("🇳🇴".as_bytes()), PathSeparator, Char("🇳🇴".as_bytes())])] + #[test_case("foo/**", vec![Char(b"f"), Char(b"o"), Char(b"o"), PathSeparator, DoubleStar])] + #[test_case("foo/{a,b}", vec![Char(b"f"), Char(b"o"), Char(b"o"), PathSeparator, OpenBrace, Char(b"a"), Char(b","), Char(b"b"), CloseBrace])] #[test_case("\\f", vec![Char(b"f")])] #[test_case("\\\\f", vec![Char(b"\\"), Char(b"f")])] #[test_case("\\🇳🇴", vec![Char("🇳🇴".as_bytes())])] diff --git a/crates/turborepo-lib/src/child.rs b/crates/turborepo-lib/src/child.rs index db783afc78c17..6eb6ece576484 100644 --- a/crates/turborepo-lib/src/child.rs +++ b/crates/turborepo-lib/src/child.rs @@ -9,7 +9,7 @@ pub fn spawn_child(mut command: Command) -> Result, io::Error> ctrlc::set_handler(move || { // on windows, we can't send signals so just kill - // we are quiting anyways so just ignore + // we are quitting anyways so just ignore #[cfg(target_os = "windows")] handler_shared_child.kill().ok(); diff --git a/crates/turborepo-lib/src/process/mod.rs b/crates/turborepo-lib/src/process/mod.rs index 32cfcc39dd7ac..5e1751a2be007 100644 --- a/crates/turborepo-lib/src/process/mod.rs +++ b/crates/turborepo-lib/src/process/mod.rs @@ -371,7 +371,7 @@ mod test { match strategy { "stop" => manager.stop().await, "wait" => manager.wait().await, - _ => panic!("unknown strat"), + _ => panic!("unknown strategy"), } // tasks return proper exit code diff --git a/crates/turborepo-lib/src/shim/local_turbo_config.rs b/crates/turborepo-lib/src/shim/local_turbo_config.rs index 735559d2a19ac..04764b2f3b5ef 100644 --- a/crates/turborepo-lib/src/shim/local_turbo_config.rs +++ b/crates/turborepo-lib/src/shim/local_turbo_config.rs @@ -51,7 +51,7 @@ impl LocalTurboConfig { } // If there isn't a package manager, just try to parse all known lockfiles - // This isn't the most effecient, but since we'll be hitting network to download + // This isn't the most efficient, but since we'll be hitting network to download // the correct binary the unnecessary file reads aren't costly relative to the // download. PackageManager::supported_managers().iter().find_map(|pm| { diff --git a/crates/turborepo-lib/src/shim/local_turbo_state.rs b/crates/turborepo-lib/src/shim/local_turbo_state.rs index 945b8e879ad54..760986fb212bf 100644 --- a/crates/turborepo-lib/src/shim/local_turbo_state.rs +++ b/crates/turborepo-lib/src/shim/local_turbo_state.rs @@ -193,7 +193,7 @@ pub fn turbo_version_has_shim(version: &str) -> bool { version.major > 1 } else { // In the case that we don't get passed a valid semver we should avoid a panic. - // We shouldn't hit this we introduce back infering package version from schema + // We shouldn't hit this we introduce back inferring package version from schema // or package.json. true } diff --git a/crates/turborepo-lib/src/tracing.rs b/crates/turborepo-lib/src/tracing.rs index 28b54768e1f91..a20ef9cfc7f78 100644 --- a/crates/turborepo-lib/src/tracing.rs +++ b/crates/turborepo-lib/src/tracing.rs @@ -93,7 +93,7 @@ impl TurboSubscriber { /// - If the `TURBO_LOG_VERBOSITY` env var is set, it will be used to set /// the verbosity level. Otherwise, the default is `WARN`. See the /// documentation on the RUST_LOG env var for syntax. - /// - If the verbosity argument (usually detemined by a flag) is provided, + /// - If the verbosity argument (usually determined by a flag) is provided, /// it overrides the default global log level. This means it overrides the /// `TURBO_LOG_VERBOSITY` global setting, but not per-module settings. /// diff --git a/crates/turborepo-lockfiles/src/berry/ser.rs b/crates/turborepo-lockfiles/src/berry/ser.rs index 20a15c6ecb545..e76c208c07321 100644 --- a/crates/turborepo-lockfiles/src/berry/ser.rs +++ b/crates/turborepo-lockfiles/src/berry/ser.rs @@ -237,7 +237,7 @@ mod test { .cloned() .collect(), }; - let serailized = lockfile.to_string(); - assert!(serailized.contains(&format!("? {long_key}\n"))); + let serialized = lockfile.to_string(); + assert!(serialized.contains(&format!("? {long_key}\n"))); } } diff --git a/crates/turborepo-lockfiles/src/pnpm/data.rs b/crates/turborepo-lockfiles/src/pnpm/data.rs index dd83afb632711..7ce68449251b0 100644 --- a/crates/turborepo-lockfiles/src/pnpm/data.rs +++ b/crates/turborepo-lockfiles/src/pnpm/data.rs @@ -102,7 +102,7 @@ pub struct PackageSnapshot { version: Option, // In lockfile v7, this portion of package is stored in the top level - // `shapshots` map as opposed to being stored inline. + // `snapshots` map as opposed to being stored inline. #[serde(flatten)] snapshot: PackageSnapshotV7, diff --git a/crates/turborepo-repository/src/package_graph/dep_splitter.rs b/crates/turborepo-repository/src/package_graph/dep_splitter.rs index bd8ff52311a0c..453b4f4d56bfa 100644 --- a/crates/turborepo-repository/src/package_graph/dep_splitter.rs +++ b/crates/turborepo-repository/src/package_graph/dep_splitter.rs @@ -34,7 +34,7 @@ impl<'a> DependencySplitter<'a> { } pub fn is_internal(&self, name: &str, version: &str) -> Option { - // If link_workspace_packages isn't set any version wihtout workspace protocol + // If link_workspace_packages isn't set any version without workspace protocol // is considered external. if !self.link_workspace_packages && !version.starts_with("workspace:") { return None; @@ -174,7 +174,7 @@ impl<'a> DependencyVersion<'a> { _ if self.version == "*" => true, _ => { // If we got this far, then we need to check the workspace package version to - // see it satisfies the dependencies range to determin whether + // see it satisfies the dependencies range to determine whether // or not it's an internal or external dependency. let constraint = node_semver::Range::parse(self.version); let version = node_semver::Version::parse(package_version); @@ -222,9 +222,9 @@ mod test { #[test_case("1.2.3", None, "npm:^1.2.3", Some("@scope/foo"), true ; "handles npm protocol with satisfied semver range")] #[test_case("2.3.4", None, "npm:^1.2.3", None, true ; "handles npm protocol with not satisfied semver range")] #[test_case("1.2.3", None, "1.2.2-alpha-123abcd.0", None, true ; "handles pre-release versions")] - // for backwards compatability with the code before versions were verified + // for backwards compatibility with the code before versions were verified #[test_case("sometag", None, "1.2.3", Some("@scope/foo"), true ; "handles non-semver package version")] - // for backwards compatability with the code before versions were verified + // for backwards compatibility with the code before versions were verified #[test_case("1.2.3", None, "sometag", Some("@scope/foo"), true ; "handles non-semver dependency version")] #[test_case("1.2.3", None, "file:../libB", Some("@scope/foo"), true ; "handles file:.. inside repo")] #[test_case("1.2.3", None, "file:../../../otherproject", None, true ; "handles file:.. outside repo")] @@ -232,7 +232,7 @@ mod test { #[test_case("1.2.3", None, "link:../../../otherproject", None, true ; "handles link:.. outside repo")] #[test_case("0.0.0-development", None, "*", Some("@scope/foo"), true ; "handles development versions")] #[test_case("1.2.3", Some("foo"), "workspace:@scope/foo@*", Some("@scope/foo"), true ; "handles pnpm alias star")] - #[test_case("1.2.3", Some("foo"), "workspace:@scope/foo@~", Some("@scope/foo"), true ; "handles pnpm alias tilda")] + #[test_case("1.2.3", Some("foo"), "workspace:@scope/foo@~", Some("@scope/foo"), true ; "handles pnpm alias tilde")] #[test_case("1.2.3", Some("foo"), "workspace:@scope/foo@^", Some("@scope/foo"), true ; "handles pnpm alias caret")] #[test_case("1.2.3", None, "1.2.3", None, false ; "no workspace linking")] #[test_case("1.2.3", None, "workspace:1.2.3", Some("@scope/foo"), false ; "no workspace linking with protocol")] diff --git a/crates/turborepo-ui/src/tui/spinner.rs b/crates/turborepo-ui/src/tui/spinner.rs index 60397483d1401..c7549414c075d 100644 --- a/crates/turborepo-ui/src/tui/spinner.rs +++ b/crates/turborepo-ui/src/tui/spinner.rs @@ -47,7 +47,7 @@ impl Default for SpinnerState { // use super::*; // // #[test] -// fn test_inital_update() { +// fn test_initial_update() { // let mut spinner = SpinnerState::new(); // assert!(spinner.last_render.is_none()); // assert_eq!(spinner.frame, 0); diff --git a/crates/turborepo-wax/README.md b/crates/turborepo-wax/README.md index 898e686792035..9881b261c8787 100644 --- a/crates/turborepo-wax/README.md +++ b/crates/turborepo-wax/README.md @@ -148,7 +148,7 @@ within a component (**never path separators**). Zero-or-more wildcards cannot be adjacent to other zero-or-more wildcards. The `*` wildcard is eager and will match the longest possible text while the `$` wildcard is lazy and will match the shortest possible text. When followed by a literal, `*` stops at the last -occurrence of that literal while `$` stops at the first occurence. +occurrence of that literal while `$` stops at the first occurrence. The exactly-one wildcard `?` matches any single character within a component (**never path separators**). Exactly-one wildcards do not group automatically, @@ -449,7 +449,7 @@ Globs are strictly nominal and do not support any non-nominal constraints. It is not possible to directly filter or otherwise select paths or files based on additional metadata (such as a modification timestamp) in a glob expression. However, it is possible for user code to query any such metadata for a matching -path or effeciently apply such filtering when matching directory trees using +path or efficiently apply such filtering when matching directory trees using `FileIterator::filter_tree`. For such additional features, including metadata filters and transformations diff --git a/crates/turborepo-wax/src/walk/filter.rs b/crates/turborepo-wax/src/walk/filter.rs index 0998116737f0a..32544a4ac49b2 100644 --- a/crates/turborepo-wax/src/walk/filter.rs +++ b/crates/turborepo-wax/src/walk/filter.rs @@ -415,7 +415,7 @@ where /// /// **This trait provides the only API for implementing a /// [`SeparatingFilter`].** [`Iterator`]s can implement this trait for a -/// transitive [`SeparatingFilter`] implemention that provides all items +/// transitive [`SeparatingFilter`] implementation that provides all items /// as filtrate. This bridges [`Iterator`]s into the input of a separating /// filter. See the [`filtrate`] function for the output analog. /// diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index a3f8c6f82fbce..fec308e2430bd 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -107,7 +107,7 @@ This means that tasks that do not account for all of the environment variables t While Strict Mode makes it much more likely for your task to fail when you haven't accounted for all of your environment variables, it doesn't guarantee - task failure. If your applicaton is able to gracefully handle a missing + task failure. If your application is able to gracefully handle a missing environment variable, you could still successfully complete tasks and get unintended cache hits. diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index e98d6737607ba..f84b6040df7b2 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -280,7 +280,7 @@ export const Button = () => { #### Compiled Packages -In [Compiled Packages](https://turbo.build/repo/docs/core-concepts/internal-packages#compiled-packages), `imports` target the built ouptuts for the package. +In [Compiled packages](https://turbo.build/repo/docs/core-concepts/internal-packages#compiled-packages), `imports` target the built outputs for the package. diff --git a/packages/turbo-vsc/ARCHITECTURE.md b/packages/turbo-vsc/ARCHITECTURE.md index df9c4ec183d54..428f23e7ae064 100644 --- a/packages/turbo-vsc/ARCHITECTURE.md +++ b/packages/turbo-vsc/ARCHITECTURE.md @@ -7,13 +7,13 @@ which APIs it uses to achieve its feature set, and how it is structured. You're here! The client is the side that runs in VSCode. It is essentially an entry point into the LSP but there are a few other things it manages -mostly for convience sake. +mostly for convenience sake. - basic syntax highlighting for the pipeline gradient - discovery and installation of global / local turbo - toolbar item to enable / disable the daemon - some editor commands - - start deamon + - start daemon - stop daemon - restart daemon - run turbo command diff --git a/scripts/version.js b/scripts/version.js index e8674e50416c5..5a31b89156a9b 100755 --- a/scripts/version.js +++ b/scripts/version.js @@ -17,7 +17,7 @@ const [currentVersion] = versionFileContents.split("\n"); const identifier = increment.startsWith("pre") ? "canary" : "latest"; const newVersion = semver.inc(currentVersion, increment, identifier); -// Parse the output semver identifer to identify which npm tag to publish to. +// Parse the output semver identifier to identify which npm tag to publish to. const parsed = semver.parse(newVersion); const tag = parsed?.prerelease[0] || "latest"; From 2d2b5734e816fcd96ef33ea7b1d18655d4d92f0f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 15:40:24 -0400 Subject: [PATCH 031/218] release(turborepo): 2.1.3 (#9202) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 799a2a41b7e5f..b27394571c6de 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index ae5a3eaa633f5..a4dc43d5a9553 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index fd458915f3511..d1e7b1e5fab8a 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 728d019f2c546..b61cace17fcbb 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index b81911c4dfc96..5ec204d8e1f4a 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 74d38a95b6102..2eef6707ddec2 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 85278b2940d49..9e65995234c1b 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 11cc10a86d6b8..4c716866bec9a 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index a94a77dfdd80f..1d70f930dca89 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.3-canary.2", + "version": "2.1.3", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.3-canary.2", - "turbo-darwin-arm64": "2.1.3-canary.2", - "turbo-linux-64": "2.1.3-canary.2", - "turbo-linux-arm64": "2.1.3-canary.2", - "turbo-windows-64": "2.1.3-canary.2", - "turbo-windows-arm64": "2.1.3-canary.2" + "turbo-darwin-64": "2.1.3", + "turbo-darwin-arm64": "2.1.3", + "turbo-linux-64": "2.1.3", + "turbo-linux-arm64": "2.1.3", + "turbo-windows-64": "2.1.3", + "turbo-windows-arm64": "2.1.3" } } diff --git a/version.txt b/version.txt index bb5543b436560..e5b44e71c33ea 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.3-canary.2 -canary +2.1.3 +latest From 672218bcc9520b761e73e53074486c09c7799dea Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 30 Sep 2024 15:41:14 -0400 Subject: [PATCH 032/218] feat(query): add filter to `affectedPackages` (#9201) ### Description Add the ability to filter in `affectedPackages` ### Testing Instructions --- crates/turborepo-lib/src/query/mod.rs | 2 ++ turborepo-tests/integration/tests/affected.t | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index 643b87d07defb..49e8443d40489 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -288,6 +288,7 @@ impl RepositoryQuery { &self, base: Option, head: Option, + filter: Option, ) -> Result, Error> { let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); @@ -304,6 +305,7 @@ impl RepositoryQuery { run: self.run.clone(), name: package, }) + .filter(|package| filter.as_ref().map_or(true, |f| f.check(package))) .sorted_by(|a, b| a.name.cmp(&b.name)) .collect()) } diff --git a/turborepo-tests/integration/tests/affected.t b/turborepo-tests/integration/tests/affected.t index b35b50b173031..9f20f4408e939 100644 --- a/turborepo-tests/integration/tests/affected.t +++ b/turborepo-tests/integration/tests/affected.t @@ -367,4 +367,22 @@ Do the same thing with the `query` command ] } } - } \ No newline at end of file + } + +Use a filter with `affectedPackages` + $ ${TURBO} query "query { affectedPackages(filter: { equal: { field: NAME, value: \"my-app\" } }) { items { name } } }" + WARNING query command is experimental and may change in the future + WARNING unable to detect git range, assuming all files have changed: git error: fatal: no merge base found + + { + "data": { + "affectedPackages": { + "items": [ + { + "name": "my-app" + } + ] + } + } + } + From c793376b9a7287d9a2ff8c7750dc533e4370c9ff Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 30 Sep 2024 15:51:39 -0400 Subject: [PATCH 033/218] feat(query): add `currentRun` field to `turbo query` (#9196) ### Description We need the `currentRun` field to exist on `turbo query` to easily generate types from the GraphQL server. This adds the field and also deduplicates the server code so both `wui` and `query` use the same `run_server` code ### Testing Instructions --- crates/turborepo-lib/src/commands/query.rs | 2 +- crates/turborepo-lib/src/query/mod.rs | 20 ++++----- crates/turborepo-lib/src/query/server.rs | 45 +++++++++++++++++++ crates/turborepo-lib/src/run/ui.rs | 43 ++---------------- crates/turborepo-ui/src/wui/mod.rs | 4 +- .../src/wui/{server.rs => query.rs} | 11 +++-- crates/turborepo-ui/src/wui/subscriber.rs | 6 +-- 7 files changed, 69 insertions(+), 62 deletions(-) create mode 100644 crates/turborepo-lib/src/query/server.rs rename crates/turborepo-ui/src/wui/{server.rs => query.rs} (79%) diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index b88edf58cf3fd..f423cb4882a1f 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -100,7 +100,7 @@ pub async fn run( } } } else { - query::run_server(run, handler).await?; + query::run_query_server(run, handler).await?; } Ok(0) diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index 49e8443d40489..96dd105e4ab80 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -1,16 +1,17 @@ mod file; mod package; +mod server; use std::{io, sync::Arc}; use async_graphql::{http::GraphiQLSource, *}; -use async_graphql_axum::GraphQL; -use axum::{response, response::IntoResponse, routing::get, Router}; +use axum::{response, response::IntoResponse}; use itertools::Itertools; use miette::Diagnostic; use package::Package; +pub use server::run_server; use thiserror::Error; -use tokio::{net::TcpListener, select}; +use tokio::select; use turbo_trace::TraceError; use turbopath::AbsoluteSystemPathBuf; use turborepo_repository::package_graph::PackageName; @@ -40,6 +41,8 @@ pub enum Error { Run(#[from] crate::run::Error), #[error(transparent)] Path(#[from] turbopath::PathError), + #[error(transparent)] + UI(#[from] turborepo_ui::Error), } pub struct RepositoryQuery { @@ -365,14 +368,7 @@ pub async fn graphiql() -> impl IntoResponse { response::Html(GraphiQLSource::build().endpoint("/").finish()) } -pub async fn run_server(run: Run, signal: SignalHandler) -> Result<(), Error> { - let schema = Schema::new( - RepositoryQuery::new(Arc::new(run)), - EmptyMutation, - EmptySubscription, - ); - let app = Router::new().route("/", get(graphiql).post_service(GraphQL::new(schema))); - +pub async fn run_query_server(run: Run, signal: SignalHandler) -> Result<(), Error> { let subscriber = signal.subscribe().ok_or(Error::NoSignalHandler)?; println!("GraphiQL IDE: http://localhost:8000"); webbrowser::open("http://localhost:8000")?; @@ -382,7 +378,7 @@ pub async fn run_server(run: Run, signal: SignalHandler) -> Result<(), Error> { println!("Shutting down GraphQL server"); return Ok(()); } - result = axum::serve(TcpListener::bind("127.0.0.1:8000").await?, app) => { + result = server::run_server(None, Arc::new(run)) => { result?; } } diff --git a/crates/turborepo-lib/src/query/server.rs b/crates/turborepo-lib/src/query/server.rs new file mode 100644 index 0000000000000..eefcb16829f7a --- /dev/null +++ b/crates/turborepo-lib/src/query/server.rs @@ -0,0 +1,45 @@ +use std::sync::Arc; + +use async_graphql::{EmptyMutation, EmptySubscription, MergedObject, Schema}; +use async_graphql_axum::GraphQL; +use axum::{http::Method, routing::get, Router}; +use tokio::net::TcpListener; +use tower_http::cors::{Any, CorsLayer}; +use turborepo_ui::wui::query::SharedState; + +use crate::{query, query::graphiql, run::Run}; + +#[derive(MergedObject)] +struct Query(turborepo_ui::wui::RunQuery, query::RepositoryQuery); + +pub async fn run_server( + state: Option, + run: Arc, +) -> Result<(), turborepo_ui::Error> { + let cors = CorsLayer::new() + // allow `GET` and `POST` when accessing the resource + .allow_methods([Method::GET, Method::POST]) + .allow_headers(Any) + // allow requests from any origin + .allow_origin(Any); + + let web_ui_query = turborepo_ui::wui::RunQuery::new(state.clone()); + let turbo_query = query::RepositoryQuery::new(run); + let combined_query = Query(web_ui_query, turbo_query); + + let schema = Schema::new(combined_query, EmptyMutation, EmptySubscription); + let app = Router::new() + .route("/", get(graphiql).post_service(GraphQL::new(schema))) + .layer(cors); + + axum::serve( + TcpListener::bind("127.0.0.1:8000") + .await + .map_err(turborepo_ui::wui::Error::Server)?, + app, + ) + .await + .map_err(turborepo_ui::wui::Error::Server)?; + + Ok(()) +} diff --git a/crates/turborepo-lib/src/run/ui.rs b/crates/turborepo-lib/src/run/ui.rs index 21ce7949f8a5f..c998aa7e5fa6f 100644 --- a/crates/turborepo-lib/src/run/ui.rs +++ b/crates/turborepo-lib/src/run/ui.rs @@ -1,13 +1,8 @@ use std::sync::Arc; -use async_graphql::{EmptyMutation, EmptySubscription, MergedObject, Schema}; -use async_graphql_axum::GraphQL; -use axum::{http::Method, routing::get, Router}; -use tokio::net::TcpListener; -use tower_http::cors::{Any, CorsLayer}; -use turborepo_ui::wui::{event::WebUIEvent, server::SharedState}; +use turborepo_ui::wui::{event::WebUIEvent, query::SharedState}; -use crate::{query, query::graphiql, run::Run}; +use crate::{query, run::Run}; pub async fn start_web_ui_server( rx: tokio::sync::mpsc::UnboundedReceiver, @@ -17,39 +12,7 @@ pub async fn start_web_ui_server( let subscriber = turborepo_ui::wui::subscriber::Subscriber::new(rx); tokio::spawn(subscriber.watch(state.clone())); - run_server(state.clone(), run).await?; - - Ok(()) -} - -#[derive(MergedObject)] -struct Query(turborepo_ui::wui::RunQuery, query::RepositoryQuery); - -async fn run_server(state: SharedState, run: Arc) -> Result<(), turborepo_ui::Error> { - let cors = CorsLayer::new() - // allow `GET` and `POST` when accessing the resource - .allow_methods([Method::GET, Method::POST]) - .allow_headers(Any) - // allow requests from any origin - .allow_origin(Any); - - let web_ui_query = turborepo_ui::wui::RunQuery::new(state.clone()); - let turbo_query = query::RepositoryQuery::new(run); - let combined_query = Query(web_ui_query, turbo_query); - - let schema = Schema::new(combined_query, EmptyMutation, EmptySubscription); - let app = Router::new() - .route("/", get(graphiql).post_service(GraphQL::new(schema))) - .layer(cors); - - axum::serve( - TcpListener::bind("127.0.0.1:8000") - .await - .map_err(turborepo_ui::wui::Error::Server)?, - app, - ) - .await - .map_err(turborepo_ui::wui::Error::Server)?; + query::run_server(Some(state.clone()), run).await?; Ok(()) } diff --git a/crates/turborepo-ui/src/wui/mod.rs b/crates/turborepo-ui/src/wui/mod.rs index 1fb7e7ba4e8de..1fe267d9603aa 100644 --- a/crates/turborepo-ui/src/wui/mod.rs +++ b/crates/turborepo-ui/src/wui/mod.rs @@ -2,12 +2,12 @@ //! by a web client to display the status of tasks. pub mod event; +pub mod query; pub mod sender; -pub mod server; pub mod subscriber; use event::WebUIEvent; -pub use server::RunQuery; +pub use query::RunQuery; use thiserror::Error; #[derive(Debug, Error)] diff --git a/crates/turborepo-ui/src/wui/server.rs b/crates/turborepo-ui/src/wui/query.rs similarity index 79% rename from crates/turborepo-ui/src/wui/server.rs rename to crates/turborepo-ui/src/wui/query.rs index 50b35fc1afe98..35dd5ab2c87ad 100644 --- a/crates/turborepo-ui/src/wui/server.rs +++ b/crates/turborepo-ui/src/wui/query.rs @@ -39,19 +39,22 @@ pub type SharedState = Arc>; /// The query for actively running tasks (as opposed to the query for general /// repository state `RepositoryQuery` in `turborepo_lib::query`) +/// This is `None` when we're not actually running a task (e.g. `turbo query`) pub struct RunQuery { - state: SharedState, + state: Option, } impl RunQuery { - pub fn new(state: SharedState) -> Self { + pub fn new(state: Option) -> Self { Self { state } } } #[Object] impl RunQuery { - async fn current_run(&self) -> CurrentRun { - CurrentRun { state: &self.state } + async fn current_run(&self) -> Option { + Some(CurrentRun { + state: self.state.as_ref()?, + }) } } diff --git a/crates/turborepo-ui/src/wui/subscriber.rs b/crates/turborepo-ui/src/wui/subscriber.rs index 92aaa6711fcee..daff04e78f7dd 100644 --- a/crates/turborepo-ui/src/wui/subscriber.rs +++ b/crates/turborepo-ui/src/wui/subscriber.rs @@ -6,7 +6,7 @@ use tokio::sync::Mutex; use crate::{ tui::event::{CacheResult, TaskResult}, - wui::{event::WebUIEvent, server::SharedState}, + wui::{event::WebUIEvent, query::SharedState}, }; /// Subscribes to the Web UI events and updates the state @@ -150,7 +150,7 @@ mod test { use super::*; use crate::{ tui::event::OutputLogs, - wui::{sender::WebUISender, server::RunQuery}, + wui::{query::RunQuery, sender::WebUISender}, }; #[tokio::test] @@ -200,7 +200,7 @@ mod test { ); // Now let's check with the GraphQL API - let schema = Schema::new(RunQuery::new(state), EmptyMutation, EmptySubscription); + let schema = Schema::new(RunQuery::new(Some(state)), EmptyMutation, EmptySubscription); let result = schema .execute("query { currentRun { tasks { name state { status } } } }") .await; From 0c3472857611aae98cdabad19d1f2c84852dedbd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:42:09 -0400 Subject: [PATCH 034/218] release(turborepo): 2.1.4-canary.0 (#9204) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index b27394571c6de..9ebe22be85281 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index a4dc43d5a9553..430294d3693c6 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index d1e7b1e5fab8a..a568a4a384dd5 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b61cace17fcbb..a174758a00364 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 5ec204d8e1f4a..f524d90a1e6a7 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 2eef6707ddec2..f0f22220902c6 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 9e65995234c1b..6e4f6a2bc6351 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 4c716866bec9a..7f774ebc92520 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 1d70f930dca89..39b1a7a4a5643 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.3", + "version": "2.1.4-canary.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.3", - "turbo-darwin-arm64": "2.1.3", - "turbo-linux-64": "2.1.3", - "turbo-linux-arm64": "2.1.3", - "turbo-windows-64": "2.1.3", - "turbo-windows-arm64": "2.1.3" + "turbo-darwin-64": "2.1.4-canary.0", + "turbo-darwin-arm64": "2.1.4-canary.0", + "turbo-linux-64": "2.1.4-canary.0", + "turbo-linux-arm64": "2.1.4-canary.0", + "turbo-windows-64": "2.1.4-canary.0", + "turbo-windows-arm64": "2.1.4-canary.0" } } diff --git a/version.txt b/version.txt index e5b44e71c33ea..33764718624e5 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.3 -latest +2.1.4-canary.0 +canary From dfe3ca2147d43ea15f579c6ccb3b7c4cde16ea1e Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 2 Oct 2024 12:45:01 -0400 Subject: [PATCH 035/218] fix(cache): set content length for put artifact (#9183) ### Description Fixes #9177 In #8081 we changed from setting the body of our `PUT` requests from a vec of bytes to a stream of bytes. This results in the underlying `hyper` request having a body with `Kind::Wrapped` instead of `Kind::Once`. This results in the body no longer having an [exact length](https://github.com/hyperium/hyper/blob/0.14.x/src/body/body.rs#L437). With the body no longer having an exact length, `hyper` would no longer set `Content-Length` for us [source](https://github.com/hyperium/hyper/blob/0.14.x/src/proto/h2/client.rs#L377). This PR explicitly sets the content length header. It would be nice if we could set the length on the body itself, but `hyper` doesn't allow for this flexibility. (We cannot simply implement a size hint on `UploadProgress`, but the size hint should return the size of the stream, not the number of bytes in the stream) ### Testing Instructions Added an assertion on the mock `PUT /artifacts` endpoint to make sure that `Content-Length` gets set. --- crates/turborepo-api-client/src/lib.rs | 41 ++++++++++++++++++++- crates/turborepo-auth/src/auth/login.rs | 1 + crates/turborepo-auth/src/auth/sso.rs | 1 + crates/turborepo-auth/src/lib.rs | 1 + crates/turborepo-cache/src/http.rs | 1 + crates/turborepo-vercel-api-mock/src/lib.rs | 7 +++- 6 files changed, 50 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-api-client/src/lib.rs b/crates/turborepo-api-client/src/lib.rs index 02863c59ee3c8..f81e95c820a47 100644 --- a/crates/turborepo-api-client/src/lib.rs +++ b/crates/turborepo-api-client/src/lib.rs @@ -78,6 +78,7 @@ pub trait CacheClient { &self, hash: &str, artifact_body: impl tokio_stream::Stream> + Send + Sync + 'static, + body_len: usize, duration: u64, tag: Option<&str>, token: &str, @@ -372,6 +373,7 @@ impl CacheClient for APIClient { &self, hash: &str, artifact_body: impl tokio_stream::Stream> + Send + Sync + 'static, + body_length: usize, duration: u64, tag: Option<&str>, token: &str, @@ -403,6 +405,7 @@ impl CacheClient for APIClient { .header("Content-Type", "application/octet-stream") .header("x-artifact-duration", duration.to_string()) .header("User-Agent", self.user_agent.clone()) + .header("Content-Length", body_length) .body(stream); if allow_auth { @@ -805,10 +808,11 @@ mod test { use std::time::Duration; use anyhow::Result; + use bytes::Bytes; use turborepo_vercel_api_mock::start_test_server; use url::Url; - use crate::{APIClient, Client}; + use crate::{APIClient, CacheClient, Client}; #[tokio::test] async fn test_do_preflight() -> Result<()> { @@ -898,4 +902,39 @@ mod test { let err = APIClient::handle_403(response).await; assert_eq!(err.to_string(), "unknown status forbidden: Not authorized"); } + + #[tokio::test] + async fn test_content_length() -> Result<()> { + let port = port_scanner::request_open_port().unwrap(); + let handle = tokio::spawn(start_test_server(port)); + let base_url = format!("http://localhost:{}", port); + + let client = APIClient::new( + &base_url, + Some(Duration::from_secs(200)), + None, + "2.0.0", + true, + )?; + let body = b"hello world!"; + let artifact_body = tokio_stream::once(Ok(Bytes::copy_from_slice(body))); + + client + .put_artifact( + "eggs", + artifact_body, + body.len(), + 123, + None, + "token", + None, + None, + ) + .await?; + + handle.abort(); + let _ = handle.await; + + Ok(()) + } } diff --git a/crates/turborepo-auth/src/auth/login.rs b/crates/turborepo-auth/src/auth/login.rs index 312e55dabdd9a..d2fa22be6facb 100644 --- a/crates/turborepo-auth/src/auth/login.rs +++ b/crates/turborepo-auth/src/auth/login.rs @@ -323,6 +323,7 @@ mod tests { > + Send + Sync + 'static, + _body_len: usize, _duration: u64, _tag: Option<&str>, _token: &str, diff --git a/crates/turborepo-auth/src/auth/sso.rs b/crates/turborepo-auth/src/auth/sso.rs index 9095d555e3b04..2332be67126ea 100644 --- a/crates/turborepo-auth/src/auth/sso.rs +++ b/crates/turborepo-auth/src/auth/sso.rs @@ -318,6 +318,7 @@ mod tests { > + Send + Sync + 'static, + _body_len: usize, _duration: u64, _tag: Option<&str>, _token: &str, diff --git a/crates/turborepo-auth/src/lib.rs b/crates/turborepo-auth/src/lib.rs index 81cdb896706f7..732b673c61eaa 100644 --- a/crates/turborepo-auth/src/lib.rs +++ b/crates/turborepo-auth/src/lib.rs @@ -431,6 +431,7 @@ mod tests { > + Send + Sync + 'static, + _body_len: usize, _duration: u64, _tag: Option<&str>, _token: &str, diff --git a/crates/turborepo-cache/src/http.rs b/crates/turborepo-cache/src/http.rs index fb208567f8fb7..c4936526241a9 100644 --- a/crates/turborepo-cache/src/http.rs +++ b/crates/turborepo-cache/src/http.rs @@ -110,6 +110,7 @@ impl HTTPCache { .put_artifact( hash, progress, + bytes, duration, tag.as_deref(), &self.api_auth.token, diff --git a/crates/turborepo-vercel-api-mock/src/lib.rs b/crates/turborepo-vercel-api-mock/src/lib.rs index e356ee17a1597..9d67f482e4534 100644 --- a/crates/turborepo-vercel-api-mock/src/lib.rs +++ b/crates/turborepo-vercel-api-mock/src/lib.rs @@ -6,7 +6,7 @@ use anyhow::Result; use axum::{ body::Body, extract::Path, - http::{HeaderMap, HeaderValue, StatusCode}, + http::{header::CONTENT_LENGTH, HeaderMap, HeaderValue, StatusCode}, routing::{get, head, options, patch, post, put}, Json, Router, }; @@ -162,6 +162,11 @@ pub async fn start_test_server(port: u16) -> Result<()> { .and_then(|duration| duration.parse::().ok()) .expect("x-artifact-duration header is missing"); + assert!( + headers.get(CONTENT_LENGTH).is_some(), + "expected to get content-length" + ); + let mut durations_map = put_durations_ref.lock().await; durations_map.insert(hash.clone(), duration); From ce11d86705632160dd234ec4cf04bb1bd4ddeebc Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Wed, 2 Oct 2024 22:57:27 -0600 Subject: [PATCH 036/218] (docs) Consistency for configurations between docs and examples. (#9212) ### Description @boutchitos astutely pointed out in https://github.com/vercel/turborepo/issues/9191 that we had some inconsistencies between `create-turbo`, the TypeScript doc, and `with-vite`. This PR fixes those issues. --- docs/repo-docs/guides/tools/typescript.mdx | 4 +- .../{config-eslint => eslint-config}/index.js | 0 .../package.json | 0 .../base.json | 0 .../package.json | 0 .../vite.json | 0 examples/with-vite/pnpm-lock.yaml | 1623 ++++++++++------- 7 files changed, 936 insertions(+), 691 deletions(-) rename examples/with-vite/packages/{config-eslint => eslint-config}/index.js (100%) rename examples/with-vite/packages/{config-eslint => eslint-config}/package.json (100%) rename examples/with-vite/packages/{config-typescript => typescript-config}/base.json (100%) rename examples/with-vite/packages/{config-typescript => typescript-config}/package.json (100%) rename examples/with-vite/packages/{config-typescript => typescript-config}/vite.json (100%) diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index f84b6040df7b2..af391c159cf1f 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -56,9 +56,9 @@ pnpm dlx create-turbo@latest ### Use a base `tsconfig` file -Inside `packages/tsconfig`, we have a few `json` files which represent different ways you might want to configure TypeScript in various packages. The `base.json` file is extended by every other `tsconfig.json` in the workspace and looks like this: +Inside `packages/typescript-config`, you have a few `json` files which represent different ways you might want to configure TypeScript in various packages. The `base.json` file is extended by every other `tsconfig.json` in the workspace and looks like this: -```json title="./packages/tsconfig/base.json" +```json title="./packages/typescript-config/base.json" "compilerOptions": { "esModuleInterop": true, "skipLibCheck": true, diff --git a/examples/with-vite/packages/config-eslint/index.js b/examples/with-vite/packages/eslint-config/index.js similarity index 100% rename from examples/with-vite/packages/config-eslint/index.js rename to examples/with-vite/packages/eslint-config/index.js diff --git a/examples/with-vite/packages/config-eslint/package.json b/examples/with-vite/packages/eslint-config/package.json similarity index 100% rename from examples/with-vite/packages/config-eslint/package.json rename to examples/with-vite/packages/eslint-config/package.json diff --git a/examples/with-vite/packages/config-typescript/base.json b/examples/with-vite/packages/typescript-config/base.json similarity index 100% rename from examples/with-vite/packages/config-typescript/base.json rename to examples/with-vite/packages/typescript-config/base.json diff --git a/examples/with-vite/packages/config-typescript/package.json b/examples/with-vite/packages/typescript-config/package.json similarity index 100% rename from examples/with-vite/packages/config-typescript/package.json rename to examples/with-vite/packages/typescript-config/package.json diff --git a/examples/with-vite/packages/config-typescript/vite.json b/examples/with-vite/packages/typescript-config/vite.json similarity index 100% rename from examples/with-vite/packages/config-typescript/vite.json rename to examples/with-vite/packages/typescript-config/vite.json diff --git a/examples/with-vite/pnpm-lock.yaml b/examples/with-vite/pnpm-lock.yaml index 4105231215df3..9cf5fcf1fff31 100644 --- a/examples/with-vite/pnpm-lock.yaml +++ b/examples/with-vite/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -26,10 +26,10 @@ importers: devDependencies: '@repo/eslint-config': specifier: workspace:* - version: link:../../packages/config-eslint + version: link:../../packages/eslint-config '@repo/typescript-config': specifier: workspace:* - version: link:../../packages/config-typescript + version: link:../../packages/typescript-config eslint: specifier: ^8.57.0 version: 8.57.0 @@ -48,10 +48,10 @@ importers: devDependencies: '@repo/eslint-config': specifier: workspace:* - version: link:../../packages/config-eslint + version: link:../../packages/eslint-config '@repo/typescript-config': specifier: workspace:* - version: link:../../packages/config-typescript + version: link:../../packages/typescript-config eslint: specifier: ^8.57.0 version: 8.57.0 @@ -62,11 +62,11 @@ importers: specifier: ^5.1.4 version: 5.1.4 - packages/config-eslint: + packages/eslint-config: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^7.1.0 version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) @@ -74,16 +74,16 @@ importers: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) - packages/config-typescript: {} + packages/typescript-config: {} packages/ui: devDependencies: '@repo/eslint-config': specifier: workspace:* - version: link:../config-eslint + version: link:../eslint-config '@repo/typescript-config': specifier: workspace:* - version: link:../config-typescript + version: link:../typescript-config eslint: specifier: ^8.57.0 version: 8.57.0 @@ -93,381 +93,250 @@ importers: packages: - /@aashutoshrathi/word-wrap@1.2.6: + '@aashutoshrathi/word-wrap@1.2.6': resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - /@esbuild/android-arm64@0.19.7: + '@esbuild/android-arm64@0.19.7': resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} engines: {node: '>=12'} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.19.7: + '@esbuild/android-arm@0.19.7': resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} engines: {node: '>=12'} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.19.7: + '@esbuild/android-x64@0.19.7': resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} engines: {node: '>=12'} cpu: [x64] os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.19.7: + '@esbuild/darwin-arm64@0.19.7': resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.19.7: + '@esbuild/darwin-x64@0.19.7': resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.19.7: + '@esbuild/freebsd-arm64@0.19.7': resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.19.7: + '@esbuild/freebsd-x64@0.19.7': resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.19.7: + '@esbuild/linux-arm64@0.19.7': resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} engines: {node: '>=12'} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.19.7: + '@esbuild/linux-arm@0.19.7': resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} engines: {node: '>=12'} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.19.7: + '@esbuild/linux-ia32@0.19.7': resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} engines: {node: '>=12'} cpu: [ia32] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.19.7: + '@esbuild/linux-loong64@0.19.7': resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.19.7: + '@esbuild/linux-mips64el@0.19.7': resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.19.7: + '@esbuild/linux-ppc64@0.19.7': resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.19.7: + '@esbuild/linux-riscv64@0.19.7': resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.19.7: + '@esbuild/linux-s390x@0.19.7': resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.19.7: + '@esbuild/linux-x64@0.19.7': resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.19.7: + '@esbuild/netbsd-x64@0.19.7': resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.19.7: + '@esbuild/openbsd-x64@0.19.7': resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.19.7: + '@esbuild/sunos-x64@0.19.7': resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.19.7: + '@esbuild/win32-arm64@0.19.7': resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.19.7: + '@esbuild/win32-ia32@0.19.7': resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} engines: {node: '>=12'} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.19.7: + '@esbuild/win32-x64@0.19.7': resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): + '@eslint-community/eslint-utils@4.4.0': resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.10.0: + '@eslint-community/regexpp@4.10.0': resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.1.4: + '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - /@eslint/js@8.57.0: + '@eslint/js@8.57.0': resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@humanwhocodes/config-array@0.11.14: + '@humanwhocodes/config-array@0.11.14': resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - /@humanwhocodes/module-importer@1.0.1: + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@2.0.2: + '@humanwhocodes/object-schema@2.0.2': resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - /@nodelib/fs.scandir@2.1.5: + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - /@nodelib/fs.stat@2.0.5: + '@nodelib/fs.stat@2.0.5': resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - /@nodelib/fs.walk@1.2.8: + '@nodelib/fs.walk@1.2.8': resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - /@rollup/rollup-android-arm-eabi@4.5.2: + '@rollup/rollup-android-arm-eabi@4.5.2': resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} cpu: [arm] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-android-arm64@4.5.2: + '@rollup/rollup-android-arm64@4.5.2': resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} cpu: [arm64] os: [android] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-arm64@4.5.2: + '@rollup/rollup-darwin-arm64@4.5.2': resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-darwin-x64@4.5.2: + '@rollup/rollup-darwin-x64@4.5.2': resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm-gnueabihf@4.5.2: + '@rollup/rollup-linux-arm-gnueabihf@4.5.2': resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} cpu: [arm] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm64-gnu@4.5.2: + '@rollup/rollup-linux-arm64-gnu@4.5.2': resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-arm64-musl@4.5.2: + '@rollup/rollup-linux-arm64-musl@4.5.2': resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-x64-gnu@4.5.2: + '@rollup/rollup-linux-x64-gnu@4.5.2': resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-linux-x64-musl@4.5.2: + '@rollup/rollup-linux-x64-musl@4.5.2': resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-win32-arm64-msvc@4.5.2: + '@rollup/rollup-win32-arm64-msvc@4.5.2': resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-win32-ia32-msvc@4.5.2: + '@rollup/rollup-win32-ia32-msvc@4.5.2': resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} cpu: [ia32] os: [win32] - requiresBuild: true - dev: true - optional: true - /@rollup/rollup-win32-x64-msvc@4.5.2: + '@rollup/rollup-win32-x64-msvc@4.5.2': resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /@types/json-schema@7.0.15: + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: false - /@types/semver@7.5.6: + '@types/semver@7.5.6': resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - dev: false - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + '@typescript-eslint/eslint-plugin@7.1.0': resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -477,26 +346,8 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + '@typescript-eslint/parser@7.1.0': resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -505,27 +356,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/scope-manager@7.1.0: + '@typescript-eslint/scope-manager@7.1.0': resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - dev: false - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + '@typescript-eslint/type-utils@7.1.0': resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -534,23 +370,12 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/types@7.1.0: + '@typescript-eslint/types@7.1.0': resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} engines: {node: ^16.0.0 || >=18.0.0} - dev: false - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + '@typescript-eslint/typescript-estree@7.1.0': resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -558,142 +383,84 @@ packages: peerDependenciesMeta: typescript: optional: true - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: false - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + '@typescript-eslint/utils@7.1.0': resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: false - /@typescript-eslint/visitor-keys@7.1.0: + '@typescript-eslint/visitor-keys@7.1.0': resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.1.0 - eslint-visitor-keys: 3.4.3 - dev: false - /@ungap/structured-clone@1.2.0: + '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - acorn: 8.11.3 - /acorn@8.11.3: + acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - /ajv@6.12.6: + ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - 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 - /ansi-regex@5.0.1: + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - /ansi-styles@4.3.0: + ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - dependencies: - color-convert: 2.0.1 - /argparse@2.0.1: + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /array-union@2.1.0: + array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} - dev: false - /balanced-match@1.0.2: + balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /brace-expansion@1.1.11: + brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - dependencies: - balanced-match: 1.0.2 - concat-map: 0.0.1 - /brace-expansion@2.0.1: + brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - dependencies: - balanced-match: 1.0.2 - dev: false - /braces@3.0.2: + braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} - dependencies: - fill-range: 7.0.1 - dev: false - /callsites@3.1.0: + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - /chalk@4.1.2: + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - /color-convert@2.0.1: + color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - dependencies: - color-name: 1.1.4 - /color-name@1.1.4: + color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - /concat-map@0.0.1: + concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - /cross-spawn@7.0.3: + cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - /debug@4.3.4: + debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -701,663 +468,408 @@ packages: peerDependenciesMeta: supports-color: optional: true - dependencies: - ms: 2.1.2 - /deep-is@0.1.4: + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /dir-glob@3.0.1: + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} - dependencies: - path-type: 4.0.0 - dev: false - /doctrine@3.0.0: + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - dependencies: - esutils: 2.0.3 - /esbuild@0.19.7: + esbuild@0.19.7: resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} engines: {node: '>=12'} hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 - dev: true - /escape-string-regexp@4.0.0: + escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - /eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' - dependencies: - eslint: 8.57.0 - dev: false - /eslint-scope@7.2.2: + eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - /eslint-visitor-keys@3.4.3: + 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@8.57.0: + eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - /espree@9.6.1: + espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - /esquery@1.5.0: + esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} - dependencies: - estraverse: 5.3.0 - /esrecurse@4.3.0: + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} - dependencies: - estraverse: 5.3.0 - /estraverse@5.3.0: + estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - /esutils@2.0.3: + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - /fast-deep-equal@3.1.3: + fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - /fast-glob@3.3.2: + fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} - 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.5 - dev: false - /fast-json-stable-stringify@2.1.0: + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - /fast-levenshtein@2.0.6: + fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fastq@1.17.1: + fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - dependencies: - reusify: 1.0.4 - /file-entry-cache@6.0.1: + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flat-cache: 3.2.0 - /fill-range@7.0.1: + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} - dependencies: - to-regex-range: 5.0.1 - dev: false - /find-up@5.0.0: + find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - /flat-cache@3.2.0: + flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - /flatted@3.3.1: + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - /fs.realpath@1.0.0: + fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.3: + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] - requiresBuild: true - dev: true - optional: true - /glob-parent@5.1.2: + glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - dependencies: - is-glob: 4.0.3 - dev: false - /glob-parent@6.0.2: + glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - dependencies: - is-glob: 4.0.3 - /glob@7.2.3: + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - 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 - /globals@13.24.0: + globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} - dependencies: - type-fest: 0.20.2 - /globby@11.1.0: + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - dev: false - /graphemer@1.4.0: + graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /has-flag@4.0.0: + has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /ignore@5.3.1: + ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - /import-fresh@3.3.0: + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - /imurmurhash@0.1.4: + imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - /inflight@1.0.6: + inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - /inherits@2.0.4: + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /is-extglob@2.1.1: + is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - /is-glob@4.0.3: + is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} - dependencies: - is-extglob: 2.1.1 - /is-number@7.0.0: + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - dev: false - /is-path-inside@3.0.3: + is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - /isexe@2.0.0: + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /js-yaml@4.1.0: + js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - dependencies: - argparse: 2.0.1 - /json-buffer@3.0.1: + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - /json-schema-traverse@0.4.1: + json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - /json-stable-stringify-without-jsonify@1.0.1: + json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - /keyv@4.5.4: + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - dependencies: - json-buffer: 3.0.1 - /levn@0.4.1: + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - /locate-path@6.0.0: + locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - dependencies: - p-locate: 5.0.0 - /lodash.merge@4.6.2: + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - /lru-cache@6.0.0: + lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} - dependencies: - yallist: 4.0.0 - dev: false - /merge2@1.4.1: + merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - dev: false - /micromatch@4.0.5: + micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - dev: false - /minimatch@3.1.2: + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - dependencies: - brace-expansion: 1.1.11 - /minimatch@9.0.3: + minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - dependencies: - brace-expansion: 2.0.1 - dev: false - /ms@2.1.2: + ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - /nanoid@3.3.7: + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - dev: true - /natural-compare@1.4.0: + natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - /once@1.4.0: + once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - dependencies: - wrappy: 1.0.2 - /optionator@0.9.3: + optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - /p-limit@3.1.0: + p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} - dependencies: - yocto-queue: 0.1.0 - /p-locate@5.0.0: + p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} - dependencies: - p-limit: 3.1.0 - /parent-module@1.0.1: + parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - dependencies: - callsites: 3.1.0 - /path-exists@4.0.0: + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-is-absolute@1.0.1: + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - /path-key@3.1.1: + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - /path-type@4.0.0: + path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - dev: false - /picocolors@1.0.0: + picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - dev: true - /picomatch@2.3.1: + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - dev: false - /postcss@8.4.35: + postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - dev: true - /prelude-ls@1.2.1: + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - /prettier@3.2.5: + prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true - dev: true - /punycode@2.3.1: + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - /queue-microtask@1.2.3: + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - /resolve-from@4.0.0: + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - /reusify@1.0.4: + reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rimraf@3.0.2: + rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true - dependencies: - glob: 7.2.3 - /rollup@4.5.2: + rollup@4.5.2: resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.2 - '@rollup/rollup-android-arm64': 4.5.2 - '@rollup/rollup-darwin-arm64': 4.5.2 - '@rollup/rollup-darwin-x64': 4.5.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 - '@rollup/rollup-linux-arm64-gnu': 4.5.2 - '@rollup/rollup-linux-arm64-musl': 4.5.2 - '@rollup/rollup-linux-x64-gnu': 4.5.2 - '@rollup/rollup-linux-x64-musl': 4.5.2 - '@rollup/rollup-win32-arm64-msvc': 4.5.2 - '@rollup/rollup-win32-ia32-msvc': 4.5.2 - '@rollup/rollup-win32-x64-msvc': 4.5.2 - fsevents: 2.3.3 - dev: true - /run-parallel@1.2.0: + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - dependencies: - queue-microtask: 1.2.3 - /semver@7.5.4: + semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true - dependencies: - lru-cache: 6.0.0 - dev: false - /shebang-command@2.0.0: + shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} - dependencies: - shebang-regex: 3.0.0 - /shebang-regex@3.0.0: + shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /slash@3.0.0: + slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} - dev: false - /source-map-js@1.0.2: + source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - dev: true - /strip-ansi@6.0.1: + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - dependencies: - ansi-regex: 5.0.1 - /strip-json-comments@3.1.1: + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /supports-color@7.2.0: + supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - /text-table@0.2.0: + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - /to-regex-range@5.0.1: + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - dependencies: - is-number: 7.0.0 - dev: false - /ts-api-utils@1.0.3(typescript@5.3.3): + ts-api-utils@1.0.3: resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' - dependencies: - typescript: 5.3.3 - dev: false - /turbo-darwin-64@2.0.3: + turbo-darwin-64@2.0.3: resolution: {integrity: sha512-v7ztJ8sxdHw3SLfO2MhGFeeU4LQhFii1hIGs9uBiXns/0YTGOvxLeifnfGqhfSrAIIhrCoByXO7nR9wlm10n3Q==} cpu: [x64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /turbo-darwin-arm64@2.0.3: + turbo-darwin-arm64@2.0.3: resolution: {integrity: sha512-LUcqvkV9Bxtng6QHbevp8IK8zzwbIxM6HMjCE7FEW6yJBN1KwvTtRtsGBwwmTxaaLO0wD1Jgl3vgkXAmQ4fqUw==} cpu: [arm64] os: [darwin] - requiresBuild: true - dev: true - optional: true - /turbo-linux-64@2.0.3: + turbo-linux-64@2.0.3: resolution: {integrity: sha512-xpdY1suXoEbsQsu0kPep2zrB8ijv/S5aKKrntGuQ62hCiwDFoDcA/Z7FZ8IHQ2u+dpJARa7yfiByHmizFE0r5Q==} cpu: [x64] os: [linux] - requiresBuild: true - dev: true - optional: true - /turbo-linux-arm64@2.0.3: + turbo-linux-arm64@2.0.3: resolution: {integrity: sha512-MBACTcSR874L1FtLL7gkgbI4yYJWBUCqeBN/iE29D+8EFe0d3fAyviFlbQP4K/HaDYet1i26xkkOiWr0z7/V9A==} cpu: [arm64] os: [linux] - requiresBuild: true - dev: true - optional: true - /turbo-windows-64@2.0.3: + turbo-windows-64@2.0.3: resolution: {integrity: sha512-zi3YuKPkM9JxMTshZo3excPk37hUrj5WfnCqh4FjI26ux6j/LJK+Dh3SebMHd9mR7wP9CMam4GhmLCT+gDfM+w==} cpu: [x64] os: [win32] - requiresBuild: true - dev: true - optional: true - /turbo-windows-arm64@2.0.3: + turbo-windows-arm64@2.0.3: resolution: {integrity: sha512-wmed4kkenLvRbidi7gISB4PU77ujBuZfgVGDZ4DXTFslE/kYpINulwzkVwJIvNXsJtHqyOq0n6jL8Zwl3BrwDg==} cpu: [arm64] os: [win32] - requiresBuild: true - dev: true - optional: true - /turbo@2.0.3: + turbo@2.0.3: resolution: {integrity: sha512-jF1K0tTUyryEWmgqk1V0ALbSz3VdeZ8FXUo6B64WsPksCMCE48N5jUezGOH2MN0+epdaRMH8/WcPU0QQaVfeLA==} hasBin: true - optionalDependencies: - turbo-darwin-64: 2.0.3 - turbo-darwin-arm64: 2.0.3 - turbo-linux-64: 2.0.3 - turbo-linux-arm64: 2.0.3 - turbo-windows-64: 2.0.3 - turbo-windows-arm64: 2.0.3 - dev: true - /type-check@0.4.0: + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - dependencies: - prelude-ls: 1.2.1 - /type-fest@0.20.2: + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /typescript@5.3.3: + typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true - /uri-js@4.4.1: + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - dependencies: - punycode: 2.3.1 - /vite@5.1.4: + vite@5.1.4: resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -1384,28 +896,761 @@ packages: optional: true terser: optional: true - dependencies: - esbuild: 0.19.7 - postcss: 8.4.35 - rollup: 4.5.2 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /which@2.0.2: + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true - dependencies: - isexe: 2.0.0 - /wrappy@1.0.2: + wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /yallist@4.0.0: + yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - dev: false - /yocto-queue@0.1.0: + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@esbuild/android-arm64@0.19.7': + optional: true + + '@esbuild/android-arm@0.19.7': + optional: true + + '@esbuild/android-x64@0.19.7': + optional: true + + '@esbuild/darwin-arm64@0.19.7': + optional: true + + '@esbuild/darwin-x64@0.19.7': + optional: true + + '@esbuild/freebsd-arm64@0.19.7': + optional: true + + '@esbuild/freebsd-x64@0.19.7': + optional: true + + '@esbuild/linux-arm64@0.19.7': + optional: true + + '@esbuild/linux-arm@0.19.7': + optional: true + + '@esbuild/linux-ia32@0.19.7': + optional: true + + '@esbuild/linux-loong64@0.19.7': + optional: true + + '@esbuild/linux-mips64el@0.19.7': + optional: true + + '@esbuild/linux-ppc64@0.19.7': + optional: true + + '@esbuild/linux-riscv64@0.19.7': + optional: true + + '@esbuild/linux-s390x@0.19.7': + optional: true + + '@esbuild/linux-x64@0.19.7': + optional: true + + '@esbuild/netbsd-x64@0.19.7': + optional: true + + '@esbuild/openbsd-x64@0.19.7': + optional: true + + '@esbuild/sunos-x64@0.19.7': + optional: true + + '@esbuild/win32-arm64@0.19.7': + optional: true + + '@esbuild/win32-ia32@0.19.7': + optional: true + + '@esbuild/win32-x64@0.19.7': + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.10.0': {} + + '@eslint/eslintrc@2.1.4': + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@8.57.0': {} + + '@humanwhocodes/config-array@0.11.14': + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/object-schema@2.0.2': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rollup/rollup-android-arm-eabi@4.5.2': + optional: true + + '@rollup/rollup-android-arm64@4.5.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.5.2': + optional: true + + '@rollup/rollup-darwin-x64@4.5.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.5.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.5.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.5.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.5.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.5.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.5.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.5.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.5.2': + optional: true + + '@types/json-schema@7.0.15': {} + + '@types/semver@7.5.6': {} + + '@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + eslint: 8.57.0 + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/scope-manager@7.1.0': + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + + '@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@7.1.0': {} + + '@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3)': + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + eslint: 8.57.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/visitor-keys@7.1.0': + dependencies: + '@typescript-eslint/types': 7.1.0 + eslint-visitor-keys: 3.4.3 + + '@ungap/structured-clone@1.2.0': {} + + acorn-jsx@5.3.2(acorn@8.11.3): + dependencies: + acorn: 8.11.3 + + acorn@8.11.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 + + ansi-regex@5.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + argparse@2.0.1: {} + + array-union@2.1.0: {} + + balanced-match@1.0.2: {} + + 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 + + braces@3.0.2: + dependencies: + fill-range: 7.0.1 + + callsites@3.1.0: {} + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + + concat-map@0.0.1: {} + + cross-spawn@7.0.3: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + deep-is@0.1.4: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + doctrine@3.0.0: + dependencies: + esutils: 2.0.3 + + esbuild@0.19.7: + optionalDependencies: + '@esbuild/android-arm': 0.19.7 + '@esbuild/android-arm64': 0.19.7 + '@esbuild/android-x64': 0.19.7 + '@esbuild/darwin-arm64': 0.19.7 + '@esbuild/darwin-x64': 0.19.7 + '@esbuild/freebsd-arm64': 0.19.7 + '@esbuild/freebsd-x64': 0.19.7 + '@esbuild/linux-arm': 0.19.7 + '@esbuild/linux-arm64': 0.19.7 + '@esbuild/linux-ia32': 0.19.7 + '@esbuild/linux-loong64': 0.19.7 + '@esbuild/linux-mips64el': 0.19.7 + '@esbuild/linux-ppc64': 0.19.7 + '@esbuild/linux-riscv64': 0.19.7 + '@esbuild/linux-s390x': 0.19.7 + '@esbuild/linux-x64': 0.19.7 + '@esbuild/netbsd-x64': 0.19.7 + '@esbuild/openbsd-x64': 0.19.7 + '@esbuild/sunos-x64': 0.19.7 + '@esbuild/win32-arm64': 0.19.7 + '@esbuild/win32-ia32': 0.19.7 + '@esbuild/win32-x64': 0.19.7 + + escape-string-regexp@4.0.0: {} + + eslint-config-prettier@9.1.0(eslint@8.57.0): + dependencies: + eslint: 8.57.0 + + eslint-scope@7.2.2: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint@8.57.0: + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + espree@9.6.1: + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + esquery@1.5.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@5.3.0: {} + + esutils@2.0.3: {} + + fast-deep-equal@3.1.3: {} + + fast-glob@3.3.2: + 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.5 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + file-entry-cache@6.0.1: + dependencies: + flat-cache: 3.2.0 + + fill-range@7.0.1: + dependencies: + to-regex-range: 5.0.1 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + flat-cache@3.2.0: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + flatted@3.3.1: {} + + fs.realpath@1.0.0: {} + + fsevents@2.3.3: + optional: true + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + 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 + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + + graphemer@1.4.0: {} + + has-flag@4.0.0: {} + + ignore@5.3.1: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + imurmurhash@0.1.4: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + is-path-inside@3.0.3: {} + + isexe@2.0.0: {} + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + json-buffer@3.0.1: {} + + json-schema-traverse@0.4.1: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash.merge@4.6.2: {} + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + merge2@1.4.1: {} + + micromatch@4.0.5: + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.11 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + natural-compare@1.4.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + optionator@0.9.3: + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@3.1.1: {} + + path-type@4.0.0: {} + + picocolors@1.0.0: {} + + picomatch@2.3.1: {} + + postcss@8.4.35: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + + prelude-ls@1.2.1: {} + + prettier@3.2.5: {} + + punycode@2.3.1: {} + + queue-microtask@1.2.3: {} + + resolve-from@4.0.0: {} + + reusify@1.0.4: {} + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + + rollup@4.5.2: + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.5.2 + '@rollup/rollup-android-arm64': 4.5.2 + '@rollup/rollup-darwin-arm64': 4.5.2 + '@rollup/rollup-darwin-x64': 4.5.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 + '@rollup/rollup-linux-arm64-gnu': 4.5.2 + '@rollup/rollup-linux-arm64-musl': 4.5.2 + '@rollup/rollup-linux-x64-gnu': 4.5.2 + '@rollup/rollup-linux-x64-musl': 4.5.2 + '@rollup/rollup-win32-arm64-msvc': 4.5.2 + '@rollup/rollup-win32-ia32-msvc': 4.5.2 + '@rollup/rollup-win32-x64-msvc': 4.5.2 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + semver@7.5.4: + dependencies: + lru-cache: 6.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@3.0.0: {} + + slash@3.0.0: {} + + source-map-js@1.0.2: {} + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-json-comments@3.1.1: {} + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + text-table@0.2.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + ts-api-utils@1.0.3(typescript@5.3.3): + dependencies: + typescript: 5.3.3 + + turbo-darwin-64@2.0.3: + optional: true + + turbo-darwin-arm64@2.0.3: + optional: true + + turbo-linux-64@2.0.3: + optional: true + + turbo-linux-arm64@2.0.3: + optional: true + + turbo-windows-64@2.0.3: + optional: true + + turbo-windows-arm64@2.0.3: + optional: true + + turbo@2.0.3: + optionalDependencies: + turbo-darwin-64: 2.0.3 + turbo-darwin-arm64: 2.0.3 + turbo-linux-64: 2.0.3 + turbo-linux-arm64: 2.0.3 + turbo-windows-64: 2.0.3 + turbo-windows-arm64: 2.0.3 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-fest@0.20.2: {} + + typescript@5.3.3: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + vite@5.1.4: + dependencies: + esbuild: 0.19.7 + postcss: 8.4.35 + rollup: 4.5.2 + optionalDependencies: + fsevents: 2.3.3 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + wrappy@1.0.2: {} + + yallist@4.0.0: {} + + yocto-queue@0.1.0: {} From 18807def30191221415f027d446079fff3e9f722 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Wed, 2 Oct 2024 23:06:06 -0600 Subject: [PATCH 037/218] (docs) Fix spacing on link. (#9213) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description ### Testing Instructions --- docs/repo-docs/guides/tools/typescript.mdx | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index af391c159cf1f..9b99a5753c03c 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -73,9 +73,7 @@ Inside `packages/typescript-config`, you have a few `json` files which represent } ``` - - `tsconfig` options reference - +`tsconfig` options reference ### Creating the rest of the package From 4d3bd19eaf39ce061345eb0223eed7a28caae909 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 3 Oct 2024 10:04:43 -0400 Subject: [PATCH 038/218] chore(query): fix query integration test (#9215) ### Description The current `command-query.t` will start failing anytime a version is released and we merge in the version bump branch. This PR changes the comparison to now check against the contents of `version.txt` instead of a literal string. ### Testing Instructions Integration test should pass now. This is the same way we test the `--version` flag: [command-version.t](https://github.com/vercel/turborepo/blob/main/turborepo-tests/integration/tests/command-version.t) --- turborepo-tests/integration/tests/command-query.t | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index ee77e09d4947e..178e83b0c6934 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -208,10 +208,7 @@ Run the query } } - $ ${TURBO} query "query { version }" + $ ${TURBO} query "query { version }" | jq ".data.version" > QUERY_VERSION WARNING query command is experimental and may change in the future - { - "data": { - "version": "2.1.3-canary.2" - } - } \ No newline at end of file + $ VERSION=${MONOREPO_ROOT_DIR}/version.txt + $ diff --strip-trailing-cr <(head -n 1 ${VERSION}) <(${TURBO} --version) From 7f13523a2a4b6f5650b576266b29a2a5e439b045 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 3 Oct 2024 11:01:54 -0400 Subject: [PATCH 039/218] fix(affected): handle Github Actions provided commit not part of checkout (#9214) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Fixes #9208 With #9169 we started using `GITHUB_BASE_REF` to determine the base of our `--affected` comparison. This can return a commit that doesn't exist in the current checkout, but will pass `rev-parse` since the reference exists. This PR avoids crashing by treating `bad object` git errors the same as `no merge base` so if we get passed a commit that is valid, but non-existent in the checkout we still run. ### Testing Instructions I only have a manual test as creating a repository where a commit exists according to `rev-parse`, but not as part of the checkout is beyond my git-fu levels. Create a shallow checkout: `git clone git@github.com:vercel/turborepo.git --depth=1` Find a commit that exists in the repo, but does not exist in the checkout e.g. `ce11d86705632160dd234ec4cf04bb1bd4ddeebc` ``` [0 olszewski@chriss-mbp] /tmp/turborepo $ git rev-parse ce11d86705632160dd234ec4cf04bb1bd4ddeebc ce11d86705632160dd234ec4cf04bb1bd4ddeebc [0 olszewski@chriss-mbp] /tmp/turborepo $ git log commit 18807def30191221415f027d446079fff3e9f722 (grafted, HEAD -> main, origin/main, origin/HEAD) Author: Anthony Shew Date: Wed Oct 2 23:06:06 2024 -0600 (docs) Fix spacing on link. (#9213) ### Description ### Testing Instructions [0 olszewski@chriss-mbp] /tmp/turborepo $ git checkout ce11d86705632160dd234ec4cf04bb1bd4ddeebc fatal: reference is not a tree: ce11d86705632160dd234ec4cf04bb1bd4ddeeb ``` Verify that `turbo ls --affected` crashes with "bad object" message: ``` GITHUB_ACTIONS=1 GITHUB_BASE_REF=ce11d86705632160dd234ec4cf04bb1bd4ddeebc turbo ls --affected WARNING No locally installed `turbo` found. Using version: 2.1.4-canary.0. turbo 2.1.4-canary.0 WARNING ls command is experimental and may change in the future Resolved base ref from GitHub Actions event: ce11d86705632160dd234ec4cf04bb1bd4ddeebc × Unable to query SCM: git error: fatal: bad object ce11d86705632160dd234ec4cf04bb1bd4ddeebc │ ╰─▶ git error: fatal: bad object ce11d86705632160dd234ec4cf04bb1bd4ddeebc ``` Test PR and verify that since we can't diff the commit we assume everything has changed: ``` GITHUB_ACTIONS=1 GITHUB_BASE_REF=ce11d86705632160dd234ec4cf04bb1bd4ddeebc turbo_dev ls --affected WARNING No locally installed `turbo` found. Using version: 2.1.4-canary.0. turbo 2.1.4-canary.0 WARNING ls command is experimental and may change in the future Resolved base ref from GitHub Actions event: ce11d86705632160dd234ec4cf04bb1bd4ddeebc WARNING unable to detect git range, assuming all files have changed: git error: fatal: bad object ce11d86705632160dd234ec4cf04bb1bd4ddeebc 37 packages (pnpm) @turbo-internal/top-issues-gh-action packages/top-issues @turbo/benchmark packages/turbo-benchmark ... ``` --- crates/turborepo-scm/src/git.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index 42f374018981c..fecfbae6f7bf8 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -64,7 +64,9 @@ impl SCM { ) { Ok(files) => Ok(ChangedFiles::Some(files)), Err(ref error @ Error::Git(ref message, _)) - if allow_unknown_objects && message.contains("no merge base") => + if allow_unknown_objects + && (message.contains("no merge base") + || message.contains("bad object")) => { unable_to_detect_range(error) } @@ -235,10 +237,10 @@ impl Git { .execute_git_command(&["rev-parse", &github_base_ref], "") .is_ok() { - println!("Resolved base ref from GitHub Actions event: {github_base_ref}"); + eprintln!("Resolved base ref from GitHub Actions event: {github_base_ref}"); Ok(github_base_ref) } else { - println!("Failed to resolve base ref from GitHub Actions event"); + eprintln!("Failed to resolve base ref from GitHub Actions event"); Err(Error::UnableToResolveRef) }; } From 03a31cdcaf58309d10c954a5575bc64504942a6e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 15:04:59 -0400 Subject: [PATCH 040/218] release(turborepo): 2.1.4-canary.1 (#9216) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 9ebe22be85281..d5cad72ec7450 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 430294d3693c6..413aa95e92678 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index a568a4a384dd5..80512d82fe307 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index a174758a00364..15d20696b1bb2 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index f524d90a1e6a7..ee2c12c7df036 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index f0f22220902c6..418ebb1d4639b 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 6e4f6a2bc6351..2d7ace7a5a156 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 7f774ebc92520..6aa41114cb1dd 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 39b1a7a4a5643..f481f2f05354c 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.0", + "version": "2.1.4-canary.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.0", - "turbo-darwin-arm64": "2.1.4-canary.0", - "turbo-linux-64": "2.1.4-canary.0", - "turbo-linux-arm64": "2.1.4-canary.0", - "turbo-windows-64": "2.1.4-canary.0", - "turbo-windows-arm64": "2.1.4-canary.0" + "turbo-darwin-64": "2.1.4-canary.1", + "turbo-darwin-arm64": "2.1.4-canary.1", + "turbo-linux-64": "2.1.4-canary.1", + "turbo-linux-arm64": "2.1.4-canary.1", + "turbo-windows-64": "2.1.4-canary.1", + "turbo-windows-arm64": "2.1.4-canary.1" } } diff --git a/version.txt b/version.txt index 33764718624e5..ef1108039305d 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.0 +2.1.4-canary.1 canary From 053a46031df7970059e458d3cc705f11b1daf313 Mon Sep 17 00:00:00 2001 From: Sid Jha Date: Thu, 3 Oct 2024 20:50:28 -0600 Subject: [PATCH 041/218] Removed an extra comma (#9220) The trailing comma is a compile time problem ### Description ### Testing Instructions --- .../crafting-your-repository/creating-an-internal-package.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx index 3ecdddf8c9366..85f4f1c49bffe 100644 --- a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx +++ b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx @@ -62,7 +62,7 @@ Next, create the `package.json` for the package. By adding this file, you'll ful "./subtract": { "types": "./src/subtract.ts", "default": "./dist/subtract.js" - }, + } }, "devDependencies": { "@repo/typescript-config": "*", From 9474799cfea339df9903f7bab1253f1760ad941e Mon Sep 17 00:00:00 2001 From: Callum Morris Date: Sat, 5 Oct 2024 14:27:14 +0100 Subject: [PATCH 042/218] chore: fix grammar in README.md for project update (#9206) ### Description Removes an unnecessary `and` from the `README.md` around the Updates sections ### Testing Instructions N/A - `README.md` changes only. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 608ef97f8cf7f..31800c737a3e8 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Turborepo is used by the world's leading companies. Check out the [Turborepo Sho ## Updates -Follow [@turborepo](https://x.com/turborepo) on X and for project updates. +Follow [@turborepo](https://x.com/turborepo) on X for project updates. ## Authors From d9a84b02ded7912d8070f3ddd80d597bc4df9e58 Mon Sep 17 00:00:00 2001 From: Shinya Fujino Date: Mon, 7 Oct 2024 20:17:53 +0900 Subject: [PATCH 043/218] docs: add missing `}` and remove comma (#9223) ### Description - ~~The JSON code block's indentation has been corrected for better readability and proper JSON structure~~ - ~~Added the `inputs` property to `build` to match the actual [turbo.json](https://github.com/vercel/turborepo/blob/053a46031df7970059e458d3cc705f11b1daf313/examples/basic/turbo.json#L7) content~~ - Added a missing `}` to the JSON code block and removed a trailing comma ### Testing Instructions --- .../crafting-your-repository/creating-an-internal-package.mdx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx index 85f4f1c49bffe..07a46a3115d82 100644 --- a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx +++ b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx @@ -264,7 +264,8 @@ Add the artifacts for the new `@repo/math` library to the `outputs` for the `bui "build": { "dependsOn": ["^build"], "outputs": [".next/**", "!.next/cache/**", "dist/**"] - }, + } +} } ``` From 480a85d0e5ed250c9d7cd242e84193e30f8c93df Mon Sep 17 00:00:00 2001 From: Luka Date: Mon, 7 Oct 2024 15:20:58 +0200 Subject: [PATCH 044/218] chore: Remove `display` key from generated `tsconfig` (#9225) ### Description https://github.com/vercel/turborepo/discussions/9221 I noticed that the default `create-turbo` command would create `tsconfig`s that contained a `display` key, which isn't part of the TS schema spec. I opened a discussion to ask about this, because it might've been a Turbo-specific feature, for example I thought it was maybe used to display the list of projects in the repo in a nice human-readable way, but according to Anthony it's not actually used for anything. From a quick read through of the `create-turbo` code, what I gathered is that it basically just copies these files based on the hardcoded example repos, hence why I only modified the `tsconfig`s themselves. It's possible I missed something as this is my first time interacting with this codebase (and the word `display` is generic enough that it shows up in a billion places all over the code), so please do let me know if my assumption here was wrong. ### Testing Instructions 1. Create a new turborepo with `create-turbo` 2. The example `tsconfig`s should no longer contain the `display` key. Co-authored-by: Anthony Shew --- examples/basic/packages/typescript-config/base.json | 1 - examples/basic/packages/typescript-config/nextjs.json | 1 - examples/basic/packages/typescript-config/react-library.json | 1 - examples/design-system/packages/typescript-config/base.json | 1 - examples/design-system/packages/typescript-config/react-app.json | 1 - .../design-system/packages/typescript-config/react-library.json | 1 - examples/kitchen-sink/packages/config-typescript/base.json | 1 - examples/kitchen-sink/packages/config-typescript/nextjs.json | 1 - examples/kitchen-sink/packages/config-typescript/react-app.json | 1 - .../kitchen-sink/packages/config-typescript/react-library.json | 1 - examples/kitchen-sink/packages/config-typescript/remix.json | 1 - examples/kitchen-sink/packages/config-typescript/vite.json | 1 - examples/with-berry/packages/tsconfig/base.json | 1 - examples/with-berry/packages/tsconfig/nextjs.json | 1 - examples/with-berry/packages/tsconfig/react-library.json | 1 - examples/with-changesets/packages/acme-tsconfig/base.json | 1 - examples/with-changesets/packages/acme-tsconfig/nextjs.json | 1 - examples/with-changesets/packages/acme-tsconfig/node14.json | 1 - .../with-changesets/packages/acme-tsconfig/react-library.json | 1 - examples/with-docker/packages/typescript-config/base.json | 1 - examples/with-docker/packages/typescript-config/nextjs.json | 1 - .../with-docker/packages/typescript-config/react-library.json | 1 - examples/with-gatsby/packages/typescript-config/base.json | 1 - examples/with-gatsby/packages/typescript-config/gatsby.json | 1 - examples/with-gatsby/packages/typescript-config/nextjs.json | 1 - .../with-gatsby/packages/typescript-config/react-library.json | 1 - examples/with-nestjs/packages/typescript-config/base.json | 1 - examples/with-nestjs/packages/typescript-config/nestjs.json | 1 - examples/with-nestjs/packages/typescript-config/nextjs.json | 1 - .../with-nestjs/packages/typescript-config/react-library.json | 1 - examples/with-npm/packages/typescript-config/base.json | 1 - examples/with-npm/packages/typescript-config/nextjs.json | 1 - examples/with-npm/packages/typescript-config/react-library.json | 1 - examples/with-prisma/packages/config-typescript/base.json | 1 - examples/with-prisma/packages/config-typescript/nextjs.json | 1 - .../with-react-native-web/packages/typescript-config/base.json | 1 - .../with-react-native-web/packages/typescript-config/nextjs.json | 1 - .../packages/typescript-config/react-native-library.json | 1 - examples/with-rollup/packages/config-typescript/base.json | 1 - examples/with-rollup/packages/config-typescript/nextjs.json | 1 - .../with-rollup/packages/config-typescript/react-library.json | 1 - examples/with-tailwind/packages/config-typescript/base.json | 1 - examples/with-tailwind/packages/config-typescript/nextjs.json | 1 - .../with-tailwind/packages/config-typescript/react-library.json | 1 - examples/with-typeorm/packages/typescript-config/base.json | 1 - examples/with-typeorm/packages/typescript-config/nextjs.json | 1 - .../with-typeorm/packages/typescript-config/react-library.json | 1 - examples/with-vite/packages/typescript-config/base.json | 1 - examples/with-vue-nuxt/packages/tsconfig/base.json | 1 - examples/with-vue-nuxt/packages/tsconfig/nuxt.json | 1 - examples/with-vue-nuxt/packages/tsconfig/vue.json | 1 - examples/with-yarn/packages/typescript-config/base.json | 1 - examples/with-yarn/packages/typescript-config/nextjs.json | 1 - examples/with-yarn/packages/typescript-config/react-library.json | 1 - packages/tsconfig/base.json | 1 - packages/tsconfig/library.json | 1 - 56 files changed, 56 deletions(-) diff --git a/examples/basic/packages/typescript-config/base.json b/examples/basic/packages/typescript-config/base.json index 0f80cfd67c892..5117f2a3d1c5f 100644 --- a/examples/basic/packages/typescript-config/base.json +++ b/examples/basic/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "declaration": true, "declarationMap": true, diff --git a/examples/basic/packages/typescript-config/nextjs.json b/examples/basic/packages/typescript-config/nextjs.json index 44f4289918f1d..e6defa48fce86 100644 --- a/examples/basic/packages/typescript-config/nextjs.json +++ b/examples/basic/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/basic/packages/typescript-config/react-library.json b/examples/basic/packages/typescript-config/react-library.json index 44924d9ed8778..c3a1b26fbb3b6 100644 --- a/examples/basic/packages/typescript-config/react-library.json +++ b/examples/basic/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx" diff --git a/examples/design-system/packages/typescript-config/base.json b/examples/design-system/packages/typescript-config/base.json index 52097698f3afa..ad34ef180938a 100644 --- a/examples/design-system/packages/typescript-config/base.json +++ b/examples/design-system/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/design-system/packages/typescript-config/react-app.json b/examples/design-system/packages/typescript-config/react-app.json index 6af13474e62b8..cb17cf06d46da 100644 --- a/examples/design-system/packages/typescript-config/react-app.json +++ b/examples/design-system/packages/typescript-config/react-app.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "allowJs": true, diff --git a/examples/design-system/packages/typescript-config/react-library.json b/examples/design-system/packages/typescript-config/react-library.json index fc1e02a9690dc..5958a35c6873f 100644 --- a/examples/design-system/packages/typescript-config/react-library.json +++ b/examples/design-system/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/kitchen-sink/packages/config-typescript/base.json b/examples/kitchen-sink/packages/config-typescript/base.json index 56d01eddde9d1..fd45cb4c0575e 100644 --- a/examples/kitchen-sink/packages/config-typescript/base.json +++ b/examples/kitchen-sink/packages/config-typescript/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/kitchen-sink/packages/config-typescript/nextjs.json b/examples/kitchen-sink/packages/config-typescript/nextjs.json index b6ef83f83c5a0..de4524e154132 100644 --- a/examples/kitchen-sink/packages/config-typescript/nextjs.json +++ b/examples/kitchen-sink/packages/config-typescript/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/kitchen-sink/packages/config-typescript/react-app.json b/examples/kitchen-sink/packages/config-typescript/react-app.json index 6af13474e62b8..cb17cf06d46da 100644 --- a/examples/kitchen-sink/packages/config-typescript/react-app.json +++ b/examples/kitchen-sink/packages/config-typescript/react-app.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "allowJs": true, diff --git a/examples/kitchen-sink/packages/config-typescript/react-library.json b/examples/kitchen-sink/packages/config-typescript/react-library.json index 819df5aedca42..a8c57e8ddc4b1 100644 --- a/examples/kitchen-sink/packages/config-typescript/react-library.json +++ b/examples/kitchen-sink/packages/config-typescript/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "lib": ["ES2015"], diff --git a/examples/kitchen-sink/packages/config-typescript/remix.json b/examples/kitchen-sink/packages/config-typescript/remix.json index a4b843ea1f6a0..2fd7c52cd32e7 100644 --- a/examples/kitchen-sink/packages/config-typescript/remix.json +++ b/examples/kitchen-sink/packages/config-typescript/remix.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Remix", "extends": "./base.json", "compilerOptions": { "lib": ["DOM", "DOM.Iterable", "ES2019"], diff --git a/examples/kitchen-sink/packages/config-typescript/vite.json b/examples/kitchen-sink/packages/config-typescript/vite.json index 46c2e55bd5fc4..f61296b235136 100644 --- a/examples/kitchen-sink/packages/config-typescript/vite.json +++ b/examples/kitchen-sink/packages/config-typescript/vite.json @@ -1,7 +1,6 @@ { "$schema": "https://json.schemastore.org/tsconfig", "extends": "./base.json", - "Display": "Vite", "compilerOptions": { "allowJs": false, "esModuleInterop": false, diff --git a/examples/with-berry/packages/tsconfig/base.json b/examples/with-berry/packages/tsconfig/base.json index c98cc5b968eaa..0e3dae77451ff 100644 --- a/examples/with-berry/packages/tsconfig/base.json +++ b/examples/with-berry/packages/tsconfig/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-berry/packages/tsconfig/nextjs.json b/examples/with-berry/packages/tsconfig/nextjs.json index 408c0e7b86c21..06f75121eb99d 100644 --- a/examples/with-berry/packages/tsconfig/nextjs.json +++ b/examples/with-berry/packages/tsconfig/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-berry/packages/tsconfig/react-library.json b/examples/with-berry/packages/tsconfig/react-library.json index dd6bd78db8826..7c27e776bbd9a 100644 --- a/examples/with-berry/packages/tsconfig/react-library.json +++ b/examples/with-berry/packages/tsconfig/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/with-changesets/packages/acme-tsconfig/base.json b/examples/with-changesets/packages/acme-tsconfig/base.json index 2507b6d37c98c..6851be5f2717c 100644 --- a/examples/with-changesets/packages/acme-tsconfig/base.json +++ b/examples/with-changesets/packages/acme-tsconfig/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-changesets/packages/acme-tsconfig/nextjs.json b/examples/with-changesets/packages/acme-tsconfig/nextjs.json index 20cd622ccd95d..927cb95932e74 100644 --- a/examples/with-changesets/packages/acme-tsconfig/nextjs.json +++ b/examples/with-changesets/packages/acme-tsconfig/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "allowJs": true, diff --git a/examples/with-changesets/packages/acme-tsconfig/node14.json b/examples/with-changesets/packages/acme-tsconfig/node14.json index 5b0728a3e15f2..ca062f75560ed 100644 --- a/examples/with-changesets/packages/acme-tsconfig/node14.json +++ b/examples/with-changesets/packages/acme-tsconfig/node14.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Node 14", "extends": "./base.json", "compilerOptions": { "lib": ["ES2020"], diff --git a/examples/with-changesets/packages/acme-tsconfig/react-library.json b/examples/with-changesets/packages/acme-tsconfig/react-library.json index 8632be00de080..5e158310d8926 100644 --- a/examples/with-changesets/packages/acme-tsconfig/react-library.json +++ b/examples/with-changesets/packages/acme-tsconfig/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/with-docker/packages/typescript-config/base.json b/examples/with-docker/packages/typescript-config/base.json index c98cc5b968eaa..0e3dae77451ff 100644 --- a/examples/with-docker/packages/typescript-config/base.json +++ b/examples/with-docker/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-docker/packages/typescript-config/nextjs.json b/examples/with-docker/packages/typescript-config/nextjs.json index 2d2f1c723414e..dad161956e1d9 100644 --- a/examples/with-docker/packages/typescript-config/nextjs.json +++ b/examples/with-docker/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-docker/packages/typescript-config/react-library.json b/examples/with-docker/packages/typescript-config/react-library.json index 47cc9ef898a39..8cb3a642b9826 100644 --- a/examples/with-docker/packages/typescript-config/react-library.json +++ b/examples/with-docker/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "lib": ["ES2015"], diff --git a/examples/with-gatsby/packages/typescript-config/base.json b/examples/with-gatsby/packages/typescript-config/base.json index 52097698f3afa..ad34ef180938a 100644 --- a/examples/with-gatsby/packages/typescript-config/base.json +++ b/examples/with-gatsby/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-gatsby/packages/typescript-config/gatsby.json b/examples/with-gatsby/packages/typescript-config/gatsby.json index a8fed171998d3..661f0695edfb6 100644 --- a/examples/with-gatsby/packages/typescript-config/gatsby.json +++ b/examples/with-gatsby/packages/typescript-config/gatsby.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Gatsby", "extends": "./base.json", "compilerOptions": { "target": "esnext", diff --git a/examples/with-gatsby/packages/typescript-config/nextjs.json b/examples/with-gatsby/packages/typescript-config/nextjs.json index cb432593e57bd..387af8f2bd403 100644 --- a/examples/with-gatsby/packages/typescript-config/nextjs.json +++ b/examples/with-gatsby/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "target": "es5", diff --git a/examples/with-gatsby/packages/typescript-config/react-library.json b/examples/with-gatsby/packages/typescript-config/react-library.json index dd6bd78db8826..7c27e776bbd9a 100644 --- a/examples/with-gatsby/packages/typescript-config/react-library.json +++ b/examples/with-gatsby/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/with-nestjs/packages/typescript-config/base.json b/examples/with-nestjs/packages/typescript-config/base.json index 0f80cfd67c892..5117f2a3d1c5f 100644 --- a/examples/with-nestjs/packages/typescript-config/base.json +++ b/examples/with-nestjs/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "declaration": true, "declarationMap": true, diff --git a/examples/with-nestjs/packages/typescript-config/nestjs.json b/examples/with-nestjs/packages/typescript-config/nestjs.json index 2c1a6321452d3..399a8ed160745 100644 --- a/examples/with-nestjs/packages/typescript-config/nestjs.json +++ b/examples/with-nestjs/packages/typescript-config/nestjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "NestJS", "extends": "./base.json", "compilerOptions": { "allowSyntheticDefaultImports": true, diff --git a/examples/with-nestjs/packages/typescript-config/nextjs.json b/examples/with-nestjs/packages/typescript-config/nextjs.json index 44f4289918f1d..e6defa48fce86 100644 --- a/examples/with-nestjs/packages/typescript-config/nextjs.json +++ b/examples/with-nestjs/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-nestjs/packages/typescript-config/react-library.json b/examples/with-nestjs/packages/typescript-config/react-library.json index 44924d9ed8778..c3a1b26fbb3b6 100644 --- a/examples/with-nestjs/packages/typescript-config/react-library.json +++ b/examples/with-nestjs/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx" diff --git a/examples/with-npm/packages/typescript-config/base.json b/examples/with-npm/packages/typescript-config/base.json index 0f80cfd67c892..5117f2a3d1c5f 100644 --- a/examples/with-npm/packages/typescript-config/base.json +++ b/examples/with-npm/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "declaration": true, "declarationMap": true, diff --git a/examples/with-npm/packages/typescript-config/nextjs.json b/examples/with-npm/packages/typescript-config/nextjs.json index 44f4289918f1d..e6defa48fce86 100644 --- a/examples/with-npm/packages/typescript-config/nextjs.json +++ b/examples/with-npm/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-npm/packages/typescript-config/react-library.json b/examples/with-npm/packages/typescript-config/react-library.json index a755ffea05e30..b6c96cdda5656 100644 --- a/examples/with-npm/packages/typescript-config/react-library.json +++ b/examples/with-npm/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/with-prisma/packages/config-typescript/base.json b/examples/with-prisma/packages/config-typescript/base.json index 52097698f3afa..ad34ef180938a 100644 --- a/examples/with-prisma/packages/config-typescript/base.json +++ b/examples/with-prisma/packages/config-typescript/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-prisma/packages/config-typescript/nextjs.json b/examples/with-prisma/packages/config-typescript/nextjs.json index 248ae1e45b5a0..a12973fc6c7a8 100644 --- a/examples/with-prisma/packages/config-typescript/nextjs.json +++ b/examples/with-prisma/packages/config-typescript/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-react-native-web/packages/typescript-config/base.json b/examples/with-react-native-web/packages/typescript-config/base.json index d72a9f3a27835..b662acde9d0e9 100644 --- a/examples/with-react-native-web/packages/typescript-config/base.json +++ b/examples/with-react-native-web/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-react-native-web/packages/typescript-config/nextjs.json b/examples/with-react-native-web/packages/typescript-config/nextjs.json index f352040e91393..073fe503537c0 100644 --- a/examples/with-react-native-web/packages/typescript-config/nextjs.json +++ b/examples/with-react-native-web/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "allowJs": true, diff --git a/examples/with-react-native-web/packages/typescript-config/react-native-library.json b/examples/with-react-native-web/packages/typescript-config/react-native-library.json index d03da4b9fb166..f8d756e9c86c6 100644 --- a/examples/with-react-native-web/packages/typescript-config/react-native-library.json +++ b/examples/with-react-native-web/packages/typescript-config/react-native-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Native Library", "extends": "./base.json", "compilerOptions": { "allowJs": true, diff --git a/examples/with-rollup/packages/config-typescript/base.json b/examples/with-rollup/packages/config-typescript/base.json index 2c7114ff71b5e..95f803dadf3b3 100644 --- a/examples/with-rollup/packages/config-typescript/base.json +++ b/examples/with-rollup/packages/config-typescript/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-rollup/packages/config-typescript/nextjs.json b/examples/with-rollup/packages/config-typescript/nextjs.json index e388530a6afe4..db516f7135fd1 100644 --- a/examples/with-rollup/packages/config-typescript/nextjs.json +++ b/examples/with-rollup/packages/config-typescript/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-rollup/packages/config-typescript/react-library.json b/examples/with-rollup/packages/config-typescript/react-library.json index 4b78b47df5ead..26934ef0dc164 100644 --- a/examples/with-rollup/packages/config-typescript/react-library.json +++ b/examples/with-rollup/packages/config-typescript/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx", diff --git a/examples/with-tailwind/packages/config-typescript/base.json b/examples/with-tailwind/packages/config-typescript/base.json index 8f8d63d531689..0432a5cb0c388 100644 --- a/examples/with-tailwind/packages/config-typescript/base.json +++ b/examples/with-tailwind/packages/config-typescript/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-tailwind/packages/config-typescript/nextjs.json b/examples/with-tailwind/packages/config-typescript/nextjs.json index 75496fec640c9..8c65eb5977e52 100644 --- a/examples/with-tailwind/packages/config-typescript/nextjs.json +++ b/examples/with-tailwind/packages/config-typescript/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-tailwind/packages/config-typescript/react-library.json b/examples/with-tailwind/packages/config-typescript/react-library.json index 3cf2d7a268da7..3006601dc48c7 100644 --- a/examples/with-tailwind/packages/config-typescript/react-library.json +++ b/examples/with-tailwind/packages/config-typescript/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "lib": ["ES2015", "DOM"], diff --git a/examples/with-typeorm/packages/typescript-config/base.json b/examples/with-typeorm/packages/typescript-config/base.json index 3a368f01fb6a3..e90102b16491a 100644 --- a/examples/with-typeorm/packages/typescript-config/base.json +++ b/examples/with-typeorm/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-typeorm/packages/typescript-config/nextjs.json b/examples/with-typeorm/packages/typescript-config/nextjs.json index 19a9aa92bdfbf..b7696283e2c50 100644 --- a/examples/with-typeorm/packages/typescript-config/nextjs.json +++ b/examples/with-typeorm/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-typeorm/packages/typescript-config/react-library.json b/examples/with-typeorm/packages/typescript-config/react-library.json index 44924d9ed8778..c3a1b26fbb3b6 100644 --- a/examples/with-typeorm/packages/typescript-config/react-library.json +++ b/examples/with-typeorm/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx" diff --git a/examples/with-vite/packages/typescript-config/base.json b/examples/with-vite/packages/typescript-config/base.json index 52097698f3afa..ad34ef180938a 100644 --- a/examples/with-vite/packages/typescript-config/base.json +++ b/examples/with-vite/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/examples/with-vue-nuxt/packages/tsconfig/base.json b/examples/with-vue-nuxt/packages/tsconfig/base.json index 934a17fb94f11..3cc6a228931ef 100644 --- a/examples/with-vue-nuxt/packages/tsconfig/base.json +++ b/examples/with-vue-nuxt/packages/tsconfig/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "esModuleInterop": true, diff --git a/examples/with-vue-nuxt/packages/tsconfig/nuxt.json b/examples/with-vue-nuxt/packages/tsconfig/nuxt.json index 2400e2c39d9d5..2effd1ac1a99e 100644 --- a/examples/with-vue-nuxt/packages/tsconfig/nuxt.json +++ b/examples/with-vue-nuxt/packages/tsconfig/nuxt.json @@ -1,5 +1,4 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Nuxt", "extends": ["./base.json"] } diff --git a/examples/with-vue-nuxt/packages/tsconfig/vue.json b/examples/with-vue-nuxt/packages/tsconfig/vue.json index 9064fa59c17ad..597d6bc4c7e8d 100644 --- a/examples/with-vue-nuxt/packages/tsconfig/vue.json +++ b/examples/with-vue-nuxt/packages/tsconfig/vue.json @@ -1,5 +1,4 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Vue", "extends": ["./base.json", "@vue/tsconfig/tsconfig.dom.json"] } diff --git a/examples/with-yarn/packages/typescript-config/base.json b/examples/with-yarn/packages/typescript-config/base.json index 0f80cfd67c892..5117f2a3d1c5f 100644 --- a/examples/with-yarn/packages/typescript-config/base.json +++ b/examples/with-yarn/packages/typescript-config/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "declaration": true, "declarationMap": true, diff --git a/examples/with-yarn/packages/typescript-config/nextjs.json b/examples/with-yarn/packages/typescript-config/nextjs.json index 44f4289918f1d..e6defa48fce86 100644 --- a/examples/with-yarn/packages/typescript-config/nextjs.json +++ b/examples/with-yarn/packages/typescript-config/nextjs.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Next.js", "extends": "./base.json", "compilerOptions": { "plugins": [{ "name": "next" }], diff --git a/examples/with-yarn/packages/typescript-config/react-library.json b/examples/with-yarn/packages/typescript-config/react-library.json index 05e33196e6260..2c677efa82c2e 100644 --- a/examples/with-yarn/packages/typescript-config/react-library.json +++ b/examples/with-yarn/packages/typescript-config/react-library.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "React Library", "extends": "./base.json", "compilerOptions": { "jsx": "react-jsx" diff --git a/packages/tsconfig/base.json b/packages/tsconfig/base.json index aab01c78bf21b..2e4f9292968d6 100644 --- a/packages/tsconfig/base.json +++ b/packages/tsconfig/base.json @@ -1,6 +1,5 @@ { "$schema": "https://json.schemastore.org/tsconfig", - "display": "Default", "compilerOptions": { "composite": false, "declaration": true, diff --git a/packages/tsconfig/library.json b/packages/tsconfig/library.json index 66db3675b5941..be1eacb28ae42 100644 --- a/packages/tsconfig/library.json +++ b/packages/tsconfig/library.json @@ -1,6 +1,5 @@ { "extends": "./base.json", - "display": "TS Library", "compilerOptions": { "lib": ["ES2019"], "target": "ES2019", From 5faae0c6ad4c32f58e1cd900fa703909e580b01d Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Mon, 7 Oct 2024 07:23:59 -0600 Subject: [PATCH 045/218] (examples) Move types field into first position of exports of kitchen-sink example. (#9226) ### Description The `types` field must come before the other `exports` to be read by tooling. --- examples/kitchen-sink/packages/ui/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/kitchen-sink/packages/ui/package.json b/examples/kitchen-sink/packages/ui/package.json index a7ffdc0162742..9e7dc2dc67232 100644 --- a/examples/kitchen-sink/packages/ui/package.json +++ b/examples/kitchen-sink/packages/ui/package.json @@ -9,14 +9,14 @@ ], "exports": { "./counter-button": { + "types": "./src/counter-button/index.tsx", "require": "./dist/counter-button/index.js", - "import": "./dist/counter-button/index.mjs", - "types": "./src/counter-button/index.tsx" + "import": "./dist/counter-button/index.mjs" }, "./link": { + "types": "./src/link/index.tsx", "require": "./dist/link/index.js", - "import": "./dist/link/index.mjs", - "types": "./src/link/index.tsx" + "import": "./dist/link/index.mjs" } }, "scripts": { From 7191ff35238cbcc083840f8cb7e94eb82d4567c8 Mon Sep 17 00:00:00 2001 From: Brad Adams Date: Tue, 8 Oct 2024 04:15:00 +0200 Subject: [PATCH 046/218] chore(examples): minor adjustments to `with-shell-commands` (#9219) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description - Rename the app directories from `apps/apps-*` → `apps/app-*`. - Fix a typo ### Testing Instructions N/A --- examples/with-shell-commands/README.md | 2 +- examples/with-shell-commands/apps/{apps-a => app-a}/README.md | 0 .../with-shell-commands/apps/{apps-a => app-a}/package.json | 0 examples/with-shell-commands/apps/{apps-b => app-b}/README.md | 0 .../with-shell-commands/apps/{apps-b => app-b}/package.json | 0 examples/with-shell-commands/pnpm-lock.yaml | 4 ++-- 6 files changed, 3 insertions(+), 3 deletions(-) rename examples/with-shell-commands/apps/{apps-a => app-a}/README.md (100%) rename examples/with-shell-commands/apps/{apps-a => app-a}/package.json (100%) rename examples/with-shell-commands/apps/{apps-b => app-b}/README.md (100%) rename examples/with-shell-commands/apps/{apps-b => app-b}/package.json (100%) diff --git a/examples/with-shell-commands/README.md b/examples/with-shell-commands/README.md index 111d504a7be5a..ccb6e778c7304 100644 --- a/examples/with-shell-commands/README.md +++ b/examples/with-shell-commands/README.md @@ -27,7 +27,7 @@ This Turborepo includes the following packages: ### Apps and Packages - `app-a`: A final package that depends on all other packages in the graph and has no dependents. This could resemble an application in your monorepo that consumes everything in your monorepo through its topological tree. -- `app-b`: Another final package with many dependencies. No dependents, lost of dependencies. +- `app-b`: Another final package with many dependencies. No dependents, lots of dependencies. - `pkg-a`: A package that has all scripts in the root `package.json`. - `pkg-b`: A package with _almost_ all scripts in the root `package.json`. - `tooling-config`: A package to simulate a common configuration used for all of your repository. This could resemble a configuration for tools like TypeScript or ESLint that are installed into all of your packages. diff --git a/examples/with-shell-commands/apps/apps-a/README.md b/examples/with-shell-commands/apps/app-a/README.md similarity index 100% rename from examples/with-shell-commands/apps/apps-a/README.md rename to examples/with-shell-commands/apps/app-a/README.md diff --git a/examples/with-shell-commands/apps/apps-a/package.json b/examples/with-shell-commands/apps/app-a/package.json similarity index 100% rename from examples/with-shell-commands/apps/apps-a/package.json rename to examples/with-shell-commands/apps/app-a/package.json diff --git a/examples/with-shell-commands/apps/apps-b/README.md b/examples/with-shell-commands/apps/app-b/README.md similarity index 100% rename from examples/with-shell-commands/apps/apps-b/README.md rename to examples/with-shell-commands/apps/app-b/README.md diff --git a/examples/with-shell-commands/apps/apps-b/package.json b/examples/with-shell-commands/apps/app-b/package.json similarity index 100% rename from examples/with-shell-commands/apps/apps-b/package.json rename to examples/with-shell-commands/apps/app-b/package.json diff --git a/examples/with-shell-commands/pnpm-lock.yaml b/examples/with-shell-commands/pnpm-lock.yaml index 291e65ecf4ffd..999e6c0f3f74c 100644 --- a/examples/with-shell-commands/pnpm-lock.yaml +++ b/examples/with-shell-commands/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: specifier: ^2.0.3 version: 2.0.3 - apps/apps-a: + apps/app-a: dependencies: pkg-a: specifier: workspace:* @@ -21,7 +21,7 @@ importers: specifier: workspace:* version: link:../../packages/tooling-config - apps/apps-b: + apps/app-b: dependencies: tooling-config: specifier: workspace:* From 0ee4d425dbb46abdca2e5814bb3aa8d7551cb193 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Tue, 8 Oct 2024 11:16:32 -0400 Subject: [PATCH 047/218] fix casing for product names (#9229) --- .github/.kodiak.toml | 4 ++-- buildcontainer/README.md | 2 +- docs/repo-docs/core-concepts/internal-packages.mdx | 2 +- .../crafting-your-repository/structuring-a-repository.mdx | 2 +- docs/repo-docs/guides/generating-code.mdx | 4 ++-- docs/repo-docs/guides/tools/typescript.mdx | 2 +- docs/src/github.ts | 4 ++-- docs/src/validate-docs-links.ts | 6 +++--- packages/create-turbo/__tests__/index.test.ts | 2 +- packages/create-turbo/src/commands/create/index.ts | 2 +- packages/top-issues/README.md | 4 ++-- release.md | 2 +- .../integration/tests/run-logging/log-order-github.t | 4 ++-- 13 files changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/.kodiak.toml b/.github/.kodiak.toml index 191f7965bccfc..2b2959eaee4a8 100644 --- a/.github/.kodiak.toml +++ b/.github/.kodiak.toml @@ -17,7 +17,7 @@ notify_on_conflict = false # Without this, only branches that are passing CI will get updated. # The benefit of this config is that PRs that we want to automerge, but # have failed because the test suite is flaky will get stuck, unless someone -# presses the Update Branch button manually, or re-triggers the Github workflow +# presses the Update Branch button manually, or re-triggers the GitHub workflow # for tests again. This causes delays in getting easy PRs in. always = true @@ -28,7 +28,7 @@ always = true # (i.e. PRs with the "pr: automerge" label, which is configured above). # This label allows PR authors to keep their PR branch up-to-date without # opting into Kodiak's automerge feature. This is useful if you want to use -# Github's AutoMerge feature instead. +# GitHub's AutoMerge feature instead. autoupdate_label = "pr: autoupdate" [merge.message] diff --git a/buildcontainer/README.md b/buildcontainer/README.md index 1c8371bcda524..1c68d591e1937 100644 --- a/buildcontainer/README.md +++ b/buildcontainer/README.md @@ -20,7 +20,7 @@ This project is rather cookbook combing various projects into one. Special to [o ## Docker -Docker images are available on both [Github](https://ghcr.io/goreleaser/goreleaser-cross) and [Docker hub](https://hub.docker.com/r/goreleaser/goreleaser-cross). +Docker images are available on both [GitHub](https://ghcr.io/goreleaser/goreleaser-cross) and [Docker hub](https://hub.docker.com/r/goreleaser/goreleaser-cross). Images from version v1.17.4 are multi-arch. Supported host are listed in the table below diff --git a/docs/repo-docs/core-concepts/internal-packages.mdx b/docs/repo-docs/core-concepts/internal-packages.mdx index 1387bf104cd6e..95835e6a2edbd 100644 --- a/docs/repo-docs/core-concepts/internal-packages.mdx +++ b/docs/repo-docs/core-concepts/internal-packages.mdx @@ -95,7 +95,7 @@ There are a few important things to notice in this `package.json`: #### Limitations and tradeoffs - **Only applicable when consumers do transpiling**: This strategy can only be used when the package is going to be used in tooling that uses a bundler or natively understands TypeScript. The consumer's bundler is responsible for transpiling the TypeScript packages to JavaScript. If your builds or other usages of the package are not able to consume TypeScript, you will need to move to the [Compiled Packages](#compiled-packages) strategy. -- **No TypeScript `paths`**: A library that is being transpiled by its consumer cannot use the `compilerOptions.paths` configuration because TypeScript assumes that source code is being transpiled in the package where it is written. If you're using Typescript 5.4 or later, we recommend [using Node.js subpath imports](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/#auto-import-support-for-subpath-imports). To learn how, visit [our TypeScript page](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). +- **No TypeScript `paths`**: A library that is being transpiled by its consumer cannot use the `compilerOptions.paths` configuration because TypeScript assumes that source code is being transpiled in the package where it is written. If you're using TypeScript 5.4 or later, we recommend [using Node.js subpath imports](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/#auto-import-support-for-subpath-imports). To learn how, visit [our TypeScript page](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). - **Turborepo cannot cache a build for a Just-in-Time Package**: Because the package doesn't have its own `build` step, it can't be cached by Turborepo. This tradeoff may make sense for you if you want to keep configuration to a minimum and are okay with the build times for your applications. ### Compiled Packages diff --git a/docs/repo-docs/crafting-your-repository/structuring-a-repository.mdx b/docs/repo-docs/crafting-your-repository/structuring-a-repository.mdx index 798b4f3ed2fd6..bbc03d3081783 100644 --- a/docs/repo-docs/crafting-your-repository/structuring-a-repository.mdx +++ b/docs/repo-docs/crafting-your-repository/structuring-a-repository.mdx @@ -318,7 +318,7 @@ Using exports this way provides three major benefits: [The `imports` field](https://nodejs.org/api/packages.html#imports) gives you a way to create subpaths to other modules within your package. You can think of these like "shortcuts" to write simpler import paths that are more resilient to refactors that move files. To learn how, visit [the TypeScript page](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). -You may be more familiar with TypeScript's `compilerOptions#paths` option, which accomplishes a similar goal. As of Typescript 5.4, TypeScript can infer subpaths from `imports`, making it a better option since you'll be working with Node.js conventions. For more information, visit [our Typescript guide](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). +You may be more familiar with TypeScript's `compilerOptions#paths` option, which accomplishes a similar goal. As of TypeScript 5.4, TypeScript can infer subpaths from `imports`, making it a better option since you'll be working with Node.js conventions. For more information, visit [our TypeScript guide](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). diff --git a/docs/repo-docs/guides/generating-code.mdx b/docs/repo-docs/guides/generating-code.mdx index b3beda6cc28bc..7cb68a5238ea0 100644 --- a/docs/repo-docs/guides/generating-code.mdx +++ b/docs/repo-docs/guides/generating-code.mdx @@ -63,7 +63,7 @@ generators within a repo configured with Turborepo. 1. Generators are automatically discovered, loaded, and organized per workspace (no need to manually `load` them within a single configuration file) 2. Generators are automatically run from the root of the workspace where they are defined 3. Generators can be invoked from anywhere within your repo (or outside out it via the [`--root`](/repo/docs/reference/generate#--root-path) flag) -4. Typescript generators are supported with zero configuration +4. TypeScript generators are supported with zero configuration 5. `plop` is not required to be installed as a dependency of your repo @@ -82,7 +82,7 @@ You'll be prompted to select an existing generator or to create one if you don't manually at `turbo/generators/config.ts` (or `config.js`) at the root of your repo - or within _any_ workspace. - If you are using Typescript, you will need to install [the `@turbo/gen` + If you are using TypeScript, you will need to install [the `@turbo/gen` package](https://github.com/vercel/turborepo/tree/main/packages/turbo-gen) as a `devDependency` to access the required TS types. diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index 9b99a5753c03c..d0f6257b25763 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -321,7 +321,7 @@ We don't recommend using TypeScript Project References as they introduce both an ### Your editor won't use a package's TypeScript version -`tsserver` is not able to use different Typescript versions for different packages in your code editor. Instead, it will discover a specific version and use that everywhere. +`tsserver` is not able to use different TypeScript versions for different packages in your code editor. Instead, it will discover a specific version and use that everywhere. This can result in differences between the linting errors that show in your editor and when you run `tsc` scripts to check types. If this is an issue for you, consider [keeping the TypeScript dependency on the same version](/repo/docs/crafting-your-repository/managing-dependencies#keeping-dependencies-on-the-same-version). diff --git a/docs/src/github.ts b/docs/src/github.ts index 15625429745c0..480281a63018c 100644 --- a/docs/src/github.ts +++ b/docs/src/github.ts @@ -57,7 +57,7 @@ export async function updateComment( export async function createComment(comment: string): Promise { if (isFork) { setFailed( - "The action could not create a Github comment because it is initiated from a forked repo. View the action logs for a list of broken links." + "The action could not create a GitHub comment because it is initiated from a forked repo. View the action logs for a list of broken links." ); return ""; @@ -111,7 +111,7 @@ export async function updateCheckStatus( if (isFork) { if (errorsExist) { setFailed( - "This PR introduces broken links to the docs. The action could not create a Github check because it is initiated from a forked repo." + "This PR introduces broken links to the docs. The action could not create a GitHub check because it is initiated from a forked repo." ); } else { console.log("Link validation was successful."); diff --git a/docs/src/validate-docs-links.ts b/docs/src/validate-docs-links.ts index 0ebcc5f05188d..788fe32c54961 100644 --- a/docs/src/validate-docs-links.ts +++ b/docs/src/validate-docs-links.ts @@ -5,7 +5,7 @@ import markdown from "remark-parse"; import remarkToRehype from "remark-rehype"; import raw from "rehype-raw"; import visit from "unist-util-visit"; -import GithubSlugger from "github-slugger"; +import GitHubSlugger from "github-slugger"; import matter from "gray-matter"; import { COMMENT_TAG, @@ -57,7 +57,7 @@ type ErrorType = Exclude; const DOCS_PATH = "."; const EXCLUDED_HASHES = ["top"]; -const slugger = new GithubSlugger(); +const slugger = new GitHubSlugger(); // Collect the paths of all .mdx files in the passed directories async function getAllMdxFilePaths( @@ -323,7 +323,7 @@ async function validateAllInternalLinks(): Promise { try { await updateCheckStatus(errorsExist, commentUrl); } catch (error) { - setFailed("Failed to create Github check: " + error); + setFailed("Failed to create GitHub check: " + error); } } catch (error) { setFailed("Error validating internal links: " + error); diff --git a/packages/create-turbo/__tests__/index.test.ts b/packages/create-turbo/__tests__/index.test.ts index 369e2eec7d928..eb54a78b2541c 100644 --- a/packages/create-turbo/__tests__/index.test.ts +++ b/packages/create-turbo/__tests__/index.test.ts @@ -248,7 +248,7 @@ describe("create-turbo", () => { expect(mockConsole.error).toHaveBeenNthCalledWith( 1, logger.turboRed(bold(">>>")), - red("Unable to download template from Github") + red("Unable to download template from GitHub") ); expect(mockConsole.error).toHaveBeenNthCalledWith( 2, diff --git a/packages/create-turbo/src/commands/create/index.ts b/packages/create-turbo/src/commands/create/index.ts index 9d21ad65f9120..592cd21d00968 100644 --- a/packages/create-turbo/src/commands/create/index.ts +++ b/packages/create-turbo/src/commands/create/index.ts @@ -49,7 +49,7 @@ function handleErrors( process.exit(1); // handle download errors from @turbo/utils } else if (err instanceof DownloadError) { - error(red("Unable to download template from Github")); + error(red("Unable to download template from GitHub")); error(red(err.message)); process.exit(1); } diff --git a/packages/top-issues/README.md b/packages/top-issues/README.md index 4b1cae35996c5..e7bab28c621ca 100644 --- a/packages/top-issues/README.md +++ b/packages/top-issues/README.md @@ -1,8 +1,8 @@ # `@turbo/top-issues` -This is an internal package that is used by a Github Actions Workflow to post +This is an internal package that is used by a GitHub Actions Workflow to post top issues in `vercel/turbo` to Slack. -The code here gets the top issues and writes them to a file. The Github Action +The code here gets the top issues and writes them to a file. The GitHub Action workflow will then take that file and post it to Slack with a marketplace action. diff --git a/release.md b/release.md index 29fe367134e54..3c06f28405f0d 100644 --- a/release.md +++ b/release.md @@ -57,7 +57,7 @@ You need to run `git push --follow-tags` to finish the release. ### Notes -- Github Release Notes are published automatically using the config from [`turborepo-release.yml`][2], +- GitHub Release Notes are published automatically using the config from [`turborepo-release.yml`][2], triggered by the [`turbo-orchestrator`][3] bot. ## Release `@turbo/repository` diff --git a/turborepo-tests/integration/tests/run-logging/log-order-github.t b/turborepo-tests/integration/tests/run-logging/log-order-github.t index 7e07ce8aa8de3..b1987e18165ae 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-github.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-github.t @@ -1,7 +1,7 @@ # Setup $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh ordered -# Build as if we are in Github Actions +# Build as if we are in GitHub Actions Note that we need to use (re) for lines that start with '> ' because otherwise prysk interprets them as multiline commands $ GITHUB_ACTIONS=1 ${TURBO} run build --force @@ -31,7 +31,7 @@ because otherwise prysk interprets them as multiline commands Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) -# Build as if we are in Github Actions with a task log prefix. +# Build as if we are in GitHub Actions with a task log prefix. $ GITHUB_ACTIONS=1 ${TURBO} run build --force --log-prefix="task" --filter=util \xe2\x80\xa2 Packages in scope: util (esc) \xe2\x80\xa2 Running build in 1 packages (esc) From 4402e7d0379127d720fe108545fd77556ded6dce Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 8 Oct 2024 14:15:30 -0400 Subject: [PATCH 048/218] chore: update contributing and troubleshooting docs (#9231) ### Description Ran into some weird integration test failures due to wrong `npm` version. Put a note in docs and in the setup script. While I was there, added some stuff to `CONTRIBUTING.md` and removed old references to Go. ### Testing Instructions --------- Co-authored-by: Dimitri Mitropoulos --- CONTRIBUTING.md | 43 ++++++++++++++----- troubleshooting.md | 7 +++ .../helpers/setup_integration_test.sh | 2 + 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 2cebca83df1cd..1c3482fea5ab8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -22,6 +22,10 @@ Thanks for your interest in contributing to Turbo! - [Rust](https://www.rust-lang.org/tools/install) - [cargo-groups](https://github.com/nicholaslyang/cargo-groups) +- NodeJS v18 +- npm v10.5.0 (note: this is determined by the GitHub Actions CI, when in doubt, look at what the runner is using) +- capnproto +- protoc ### Linux Dependencies @@ -48,7 +52,8 @@ Turborepo uses `reqwest`, a Rust HTTP client, to make requests to the Turbo API. implementations: `rustls` and `native-tls`. `rustls` is a pure Rust implementation of TLS, while `native-tls` is a wrapper around OpenSSL. Turborepo allows users to select which implementation they want with the `native-tls` and `rustls-tls` features. By default, the `rustls-tls` feature is selected---this is done so that `cargo build` works -out of the box. If you wish to select `native-tls`, you may do so by passing `--no-default-features --features native-tls` +out of the box. If you wish to select `native-tls`, you may do so by passing +`--no-default-features --features native-tls` to the build command. ### Running Turborepo Tests @@ -71,10 +76,6 @@ Then from the root directory, you can run: ```bash pnpm test -- --filter=cli ``` -- A single Go unit test (see more [in the Go docs](https://pkg.go.dev/cmd/go#hdr-Test_packages)) - ```bash - cd cli && go test ./[path/to/package/] - ``` - Rust unit tests ([install `nextest` first](https://nexte.st/book/pre-built-binaries.html)) ```bash cargo nextest run -p turborepo-lib --features rustls-tls @@ -96,6 +97,19 @@ Then from the root directory, you can run: Note: this is not through turbo, so you'll have to build turbo yourself first. +- Updating Integration Tests + + ``` + turbo run build --filter=cli + pnpm --filter turborepo-tests-integration test:interactive + ``` + + You can pass a test name to run a single test, or a directory to run all tests in that directory. + + ``` + pnpm --filter turborepo-tests-integration test:interactive tests/turbo-help.t + ``` + - Example tests ```bash pnpm test -- --filter=turborepo-tests-examples -- @@ -104,7 +118,8 @@ Then from the root directory, you can run: ## Debugging Turborepo 1. Install `go install github.com/go-delve/delve/cmd/dlv@latest` -1. In VS Code's "Run and Debug" tab, select `Build Basic` to start debugging the initial launch of `turbo` against the `build` target of the Basic Example. This task is configured in [launch.json](./.vscode/launch.json). +1. In VS Code's "Run and Debug" tab, select `Build Basic` to start debugging the initial launch of `turbo` against the + `build` target of the Basic Example. This task is configured in [launch.json](./.vscode/launch.json). ## Benchmarking Turborepo @@ -112,7 +127,8 @@ Follow the instructions in the [`benchmark/README.md`](./benchmark/README.md). ## Updating `turbo` -You might need to update `packages/turbo` in order to support a new platform. When you do that you will need to link the module in order to be able to continue working. As an example, with `npm link`: +You might need to update `packages/turbo` in order to support a new platform. When you do that you will need to link the +module in order to be able to continue working. As an example, with `npm link`: ```sh cd ~/repos/vercel/turbo/packages/turbo @@ -146,8 +162,10 @@ Here's a checklist of testing strategies to cover: There are also multiple installation scenarios worth testing: - Global-only. `turbo` is installed as global binary, no local `turbo` in repository. -- Local-only. `turbo` is installed as local binary, no global `turbo` in PATH. turbo` is invoked via a root package script. -- Global + local. `turbo` is installed as global binary, and local `turbo` in repository. Global `turbo` delegates to local `turbo` +- Local-only. `turbo` is installed as local binary, no global `turbo` in PATH. turbo` is invoked via a root package + script. +- Global + local. `turbo` is installed as global binary, and local `turbo` in repository. Global `turbo` delegates to + local `turbo` Here are a few repositories that you can test on: @@ -164,7 +182,8 @@ See [the publishing guide](./release.md#release-turborepo). ## Creating a new release blog post -Creating a new release post can be done via a turborepo generator. Run the following command from anywhere within the repo: +Creating a new release post can be done via a turborepo generator. Run the following command from anywhere within the +repo: ```bash turbo generate run "blog - release post" @@ -172,7 +191,9 @@ turbo generate run "blog - release post" This will walk you through creating a new blog post from start to finish. -NOTE: If you would like to update the stats (github stars / npm downloads / time saved) for an existing blog post that has yet to be published (useful if time has passed since the blog post was created, and up to date stats are required before publishing) - run: +NOTE: If you would like to update the stats (GitHub stars / npm downloads / time saved) for an existing blog post that +has yet to be published (useful if time has passed since the blog post was created, and up to date stats are required +before publishing) - run: ```bash turbo generate run "blog - "blog - update release post stats" diff --git a/troubleshooting.md b/troubleshooting.md index 0514631d9db7a..5c55907bc54e8 100644 --- a/troubleshooting.md +++ b/troubleshooting.md @@ -49,3 +49,10 @@ environment variable. With this, you can set different log levels per module. For syntax, see the [Env Filter Syntax][1] [1][https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html] + +## Failing integration tests due to hash changes + +If a lot of integration tests are failing with changes in the hash for `package-lock.json`, +you might be using an old version of `npm`. We try to set it in the test (`setup_package_manager.sh` and +`setup_integration_test.sh`), but if your version is too old, it might not work. +In which case, upgrade it to whatever the GitHub Actions runner uses. diff --git a/turborepo-tests/helpers/setup_integration_test.sh b/turborepo-tests/helpers/setup_integration_test.sh index c7c6fd806bdda..0424f0aba8700 100755 --- a/turborepo-tests/helpers/setup_integration_test.sh +++ b/turborepo-tests/helpers/setup_integration_test.sh @@ -5,6 +5,8 @@ set -eo pipefail FIXTURE_NAME="${1-basic_monorepo}" # Default to version of npm installed with Node 18.20.2 +# If CI is failing, check that this version is the same as +# the CI runner's version of npm PACKAGE_MANAGER="npm@10.5.0" if [[ $2 != "" ]]; then PACKAGE_MANAGER="$2" From e8ffdb8b8a6821af1fb5a07386d8f7e19ff5eca8 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 8 Oct 2024 15:13:44 -0400 Subject: [PATCH 049/218] feat(query): add task dependencies/dependents (#9190) ### Description Adds `direct_dependencies` and `direct_dependents` fields to `Task` ### Testing Instructions Added some tests in `tests/query/task.t` --- crates/turborepo-lib/src/cli/mod.rs | 14 ---- crates/turborepo-lib/src/commands/query.rs | 2 +- crates/turborepo-lib/src/engine/builder.rs | 40 +++++++++- crates/turborepo-lib/src/query/mod.rs | 9 ++- crates/turborepo-lib/src/query/package.rs | 26 ++++++- crates/turborepo-lib/src/query/task.rs | 73 +++++++++++++++++++ crates/turborepo-lib/src/run/builder.rs | 19 ++++- crates/turborepo-lib/src/run/mod.rs | 4 + .../integration/tests/command-query.t | 2 + .../integration/tests/query/tasks.t | 70 ++++++++++++++++++ 10 files changed, 234 insertions(+), 25 deletions(-) create mode 100644 turborepo-tests/integration/tests/query/tasks.t diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 2f68ff217322c..fc14a368e0d2d 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -417,20 +417,6 @@ impl Args { clap_args } - pub fn get_tasks(&self) -> &[String] { - match &self.command { - Some(Command::Run { - run_args: _, - execution_args: box ExecutionArgs { tasks, .. }, - }) => tasks, - _ => self - .execution_args - .as_ref() - .map(|execution_args| execution_args.tasks.as_slice()) - .unwrap_or(&[]), - } - } - pub fn track(&self, tel: &GenericEventBuilder) { // track usage only track_usage!(tel, self.skip_infer, |val| val); diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index f423cb4882a1f..83cb64fc25ca4 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -68,7 +68,7 @@ pub async fn run( execution_args: Box::default(), }); - let run_builder = RunBuilder::new(base)?; + let run_builder = RunBuilder::new(base)?.add_all_tasks(); let run = run_builder.build(&handler, telemetry).await?; if let Some(query) = query { diff --git a/crates/turborepo-lib/src/engine/builder.rs b/crates/turborepo-lib/src/engine/builder.rs index 484cce98974e5..dd958fcf127c0 100644 --- a/crates/turborepo-lib/src/engine/builder.rs +++ b/crates/turborepo-lib/src/engine/builder.rs @@ -100,6 +100,7 @@ pub struct EngineBuilder<'a> { tasks: Vec>>, root_enabled_tasks: HashSet>, tasks_only: bool, + add_all_tasks: bool, } impl<'a> EngineBuilder<'a> { @@ -118,6 +119,7 @@ impl<'a> EngineBuilder<'a> { tasks: Vec::new(), root_enabled_tasks: HashSet::new(), tasks_only: false, + add_all_tasks: false, } } @@ -148,6 +150,13 @@ impl<'a> EngineBuilder<'a> { self } + /// If set, we will include all tasks in the graph, even if they are not + /// specified + pub fn add_all_tasks(mut self) -> Self { + self.add_all_tasks = true; + self + } + // Returns the set of allowed tasks that can be run if --only is used // The set is exactly the product of the packages in filter and tasks specified // by CLI @@ -185,7 +194,36 @@ impl<'a> EngineBuilder<'a> { let mut missing_tasks: HashMap<&TaskName<'_>, Spanned<()>> = HashMap::from_iter(self.tasks.iter().map(|spanned| spanned.as_ref().split())); let mut traversal_queue = VecDeque::with_capacity(1); - for (workspace, task) in self.workspaces.iter().cartesian_product(self.tasks.iter()) { + let tasks: Vec>> = if self.add_all_tasks { + let mut tasks = Vec::new(); + if let Ok(turbo_json) = turbo_json_loader.load(&PackageName::Root) { + tasks.extend( + turbo_json + .tasks + .keys() + .map(|task| Spanned::new(task.clone())), + ); + } + + for workspace in self.workspaces.iter() { + let Ok(turbo_json) = turbo_json_loader.load(workspace) else { + continue; + }; + + tasks.extend( + turbo_json + .tasks + .keys() + .map(|task| Spanned::new(task.clone())), + ); + } + + tasks + } else { + self.tasks.clone() + }; + + for (workspace, task) in self.workspaces.iter().cartesian_product(tasks.iter()) { let task_id = task .task_id() .unwrap_or_else(|| TaskId::new(workspace.as_ref(), task.task())); diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index 96dd105e4ab80..a0cc9a7bb15a4 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -1,6 +1,7 @@ mod file; mod package; mod server; +mod task; use std::{io, sync::Arc}; @@ -18,7 +19,7 @@ use turborepo_repository::package_graph::PackageName; use crate::{ get_version, - query::file::File, + query::{file::File, task::Task}, run::{builder::RunBuilder, Run}, signal::SignalHandler, }; @@ -38,8 +39,10 @@ pub enum Error { #[error("failed to serialize result: {0}")] Serde(#[from] serde_json::Error), #[error(transparent)] + #[diagnostic(transparent)] Run(#[from] crate::run::Error), #[error(transparent)] + #[diagnostic(transparent)] Path(#[from] turbopath::PathError), #[error(transparent)] UI(#[from] turborepo_ui::Error), @@ -56,6 +59,8 @@ impl RepositoryQuery { } #[derive(Debug, SimpleObject)] +#[graphql(concrete(name = "Tasks", params(Task)))] +#[graphql(concrete(name = "Packages", params(Package)))] pub struct Array { items: Vec, length: usize, @@ -235,7 +240,7 @@ impl PackagePredicate { fn check_has(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { (PackageFields::Name, Value::String(name)) => pkg.name.as_ref() == name, - (PackageFields::TaskName, Value::String(name)) => pkg.task_names().contains(name), + (PackageFields::TaskName, Value::String(name)) => pkg.get_tasks().contains_key(name), _ => false, } } diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index e5092a87a5237..0145fbf475d79 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -1,25 +1,32 @@ -use std::{collections::HashSet, sync::Arc}; +use std::{collections::HashMap, sync::Arc}; use async_graphql::Object; use itertools::Itertools; +use turborepo_errors::Spanned; use turborepo_repository::package_graph::{PackageName, PackageNode}; use crate::{ - query::{Array, Error}, + query::{task::Task, Array, Error}, run::Run, }; +#[derive(Clone)] pub struct Package { pub run: Arc, pub name: PackageName, } impl Package { - pub fn task_names(&self) -> HashSet { + pub fn get_tasks(&self) -> HashMap> { self.run .pkg_dep_graph() .package_json(&self.name) - .map(|json| json.scripts.keys().cloned().collect()) + .map(|json| { + json.scripts + .iter() + .map(|(k, v)| (k.clone(), v.clone())) + .collect() + }) .unwrap_or_default() } @@ -191,4 +198,15 @@ impl Package { .sorted_by(|a, b| a.name.cmp(&b.name)) .collect()) } + + async fn tasks(&self) -> Array { + self.get_tasks() + .into_iter() + .map(|(name, script)| Task { + name, + package: self.clone(), + script: Some(script), + }) + .collect() + } } diff --git a/crates/turborepo-lib/src/query/task.rs b/crates/turborepo-lib/src/query/task.rs index 8b137891791fe..37dbaaead745f 100644 --- a/crates/turborepo-lib/src/query/task.rs +++ b/crates/turborepo-lib/src/query/task.rs @@ -1 +1,74 @@ +use async_graphql::Object; +use turborepo_errors::Spanned; +use crate::{ + engine::TaskNode, + query::{package::Package, Array}, + run::task_id::TaskId, +}; + +pub struct Task { + pub name: String, + pub package: Package, + pub script: Option>, +} + +#[Object] +impl Task { + async fn name(&self) -> String { + self.name.clone() + } + + async fn package(&self) -> Package { + self.package.clone() + } + + async fn script(&self) -> Option { + self.script.as_ref().map(|script| script.value.to_string()) + } + + async fn direct_dependents(&self) -> Array { + let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + self.package + .run + .engine() + .dependents(&task_id) + .into_iter() + .flatten() + .filter_map(|task| match task { + TaskNode::Root => None, + TaskNode::Task(task) => Some(Task { + name: task.task().to_string(), + package: Package { + run: self.package.run.clone(), + name: task.package().to_string().into(), + }, + script: self.package.get_tasks().get(task.task()).cloned(), + }), + }) + .collect() + } + + async fn direct_dependencies(&self) -> Array { + let task_id = TaskId::new(self.package.name.as_ref(), &self.name); + + self.package + .run + .engine() + .dependencies(&task_id) + .into_iter() + .flatten() + .filter_map(|task| match task { + TaskNode::Root => None, + TaskNode::Task(task) => Some(Task { + name: task.task().to_string(), + package: Package { + run: self.package.run.clone(), + name: task.package().to_string().into(), + }, + script: self.package.get_tasks().get(task.task()).cloned(), + }), + }) + .collect() + } +} diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index aee20d56975b5..0169515663b4c 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -66,6 +66,8 @@ pub struct RunBuilder { should_print_prelude_override: Option, allow_missing_package_manager: bool, allow_no_turbo_json: bool, + // If true, we will add all tasks to the graph, even if they are not specified + add_all_tasks: bool, } impl RunBuilder { @@ -108,6 +110,7 @@ impl RunBuilder { allow_missing_package_manager, root_turbo_json_path, allow_no_turbo_json, + add_all_tasks: false, }) } @@ -121,6 +124,11 @@ impl RunBuilder { self } + pub fn add_all_tasks(mut self) -> Self { + self.add_all_tasks = true; + self + } + fn connect_process_manager(&self, signal_subscriber: SignalSubscriber) { let manager = self.processes.clone(); tokio::spawn(async move { @@ -464,7 +472,7 @@ impl RunBuilder { filtered_pkgs: &HashSet, turbo_json_loader: TurboJsonLoader, ) -> Result { - let mut engine = EngineBuilder::new( + let mut builder = EngineBuilder::new( &self.repo_root, pkg_dep_graph, turbo_json_loader, @@ -476,8 +484,13 @@ impl RunBuilder { .with_tasks(self.opts.run_opts.tasks.iter().map(|task| { // TODO: Pull span info from command Spanned::new(TaskName::from(task.as_str()).into_owned()) - })) - .build()?; + })); + + if self.add_all_tasks { + builder = builder.add_all_tasks(); + } + + let mut engine = builder.build()?; // If we have an initial task, we prune out the engine to only // tasks that are reachable from that initial task. diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 20e319477f0f2..5b50452c10be5 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -194,6 +194,10 @@ impl Run { &self.pkg_dep_graph } + pub fn engine(&self) -> &Engine { + &self.engine + } + pub fn filtered_pkgs(&self) -> &HashSet { &self.filtered_pkgs } diff --git a/turborepo-tests/integration/tests/command-query.t b/turborepo-tests/integration/tests/command-query.t index 178e83b0c6934..67b4f57c5644a 100644 --- a/turborepo-tests/integration/tests/command-query.t +++ b/turborepo-tests/integration/tests/command-query.t @@ -210,5 +210,7 @@ Run the query $ ${TURBO} query "query { version }" | jq ".data.version" > QUERY_VERSION WARNING query command is experimental and may change in the future + $ VERSION=${MONOREPO_ROOT_DIR}/version.txt $ diff --strip-trailing-cr <(head -n 1 ${VERSION}) <(${TURBO} --version) + diff --git a/turborepo-tests/integration/tests/query/tasks.t b/turborepo-tests/integration/tests/query/tasks.t new file mode 100644 index 0000000000000..c36a481760485 --- /dev/null +++ b/turborepo-tests/integration/tests/query/tasks.t @@ -0,0 +1,70 @@ +Setup + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh task_dependencies/topological + + $ ${TURBO} query "query { package(name: \"my-app\") { tasks { items { name } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "name": "build" + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"my-app\") { tasks { items { name directDependencies { items { name package { name } } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "name": "build", + "directDependencies": { + "items": [ + { + "name": "build", + "package": { + "name": "util" + } + } + ] + } + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"util\") { tasks { items { name directDependents { items { name package { name } } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "name": "build", + "directDependents": { + "items": [ + { + "name": "build", + "package": { + "name": "my-app" + } + } + ] + } + } + ] + } + } + } + } From a72f7d50eb55d13887a330bd905c076289c4d032 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 9 Oct 2024 13:08:23 -0400 Subject: [PATCH 050/218] fix napi double .d.ts formatting (#9238) --- packages/turbo-repository/package.json | 5 +++-- packages/turbo-repository/scripts/build.sh | 25 ++++++++++++++++++++++ pnpm-lock.yaml | 9 ++++++++ 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100755 packages/turbo-repository/scripts/build.sh diff --git a/packages/turbo-repository/package.json b/packages/turbo-repository/package.json index a325aa21ef0e1..6a00004fa52f8 100644 --- a/packages/turbo-repository/package.json +++ b/packages/turbo-repository/package.json @@ -5,8 +5,8 @@ "bugs": "https://github.com/vercel/turborepo/issues", "homepage": "https://turbo.build/repo", "scripts": { - "build": "napi build --platform -p turborepo-napi --cargo-cwd ../../ --cargo-name turborepo_napi native --js false --dts ../js/index.d.ts && mkdir -p js/dist && cp js/index.js js/dist/index.js && cp js/index.d.ts js/dist/index.d.ts", - "build:release": "napi build --release --platform -p turborepo-napi --cargo-cwd ../../ --cargo-name turborepo_napi native --js false", + "build": "bash scripts/build.sh", + "build:release": "bash scripts/build.sh release", "package": "node scripts/publish.mjs", "test": "node --import tsx --test __tests__/*.test.ts" }, @@ -17,6 +17,7 @@ "@napi-rs/cli": "^2.16.3", "execa": "^8.0.1", "fs-extra": "^11.1.1", + "prettier": "^3.2.5", "tsx": "^4.7.2" }, "main": "dist/index.js", diff --git a/packages/turbo-repository/scripts/build.sh b/packages/turbo-repository/scripts/build.sh new file mode 100755 index 0000000000000..418e862b67491 --- /dev/null +++ b/packages/turbo-repository/scripts/build.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +flags="\ + --platform \ + -p turborepo-napi \ + --cargo-cwd ../../ \ + --cargo-name turborepo_napi \ + native \ + --js false \ +" + +if [ "$1" == "release" ]; then + flags+=" --release" +else + flags+=" --dts ../js/index.d.ts" +fi + +node_modules/.bin/napi build $flags + +# Unfortunately, when napi generates a .d.ts file, it doesn't match our formatting rules (it doesn't have semicolons). +# Since there's now way to configure this from napi itself, so we need to run prettier on it after generating it. +node_modules/.bin/prettier --write js/index.d.ts + +mkdir -p js/dist +cp js/index.{js,d.ts} js/dist/ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d99b70c76dc7c..87d0714c5a9bb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -561,6 +561,9 @@ importers: fs-extra: specifier: ^11.1.1 version: 11.1.1 + prettier: + specifier: ^3.2.5 + version: 3.3.3 tsx: specifier: ^4.7.2 version: 4.7.2 @@ -9489,6 +9492,12 @@ packages: hasBin: true dev: true + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + dev: true + /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} From 278d24e461938194ea04ecce2c441eafd13f6574 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 9 Oct 2024 14:54:42 -0400 Subject: [PATCH 051/218] log::debug and ignore on daemon usage in CI (#9237) --- crates/turborepo-lib/src/config/mod.rs | 10 ++++++++++ docs/repo-docs/reference/configuration.mdx | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index 1c35949bbef33..0e1ae724956e8 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -14,6 +14,7 @@ use miette::{Diagnostic, NamedSource, SourceSpan}; use serde::Deserialize; use struct_iterable::Iterable; use thiserror::Error; +use tracing::debug; use turbo_json::TurboJsonReader; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use turborepo_errors::TURBO_SITE; @@ -329,6 +330,15 @@ impl ConfigurationOptions { } pub fn daemon(&self) -> Option { + // hardcode to off in CI + if turborepo_ci::is_ci() { + if Some(true) == self.daemon { + debug!("Ignoring daemon setting and disabling the daemon because we're in CI"); + } + + return Some(false); + } + self.daemon } diff --git a/docs/repo-docs/reference/configuration.mdx b/docs/repo-docs/reference/configuration.mdx index ab49e577a302a..e441112d01f99 100644 --- a/docs/repo-docs/reference/configuration.mdx +++ b/docs/repo-docs/reference/configuration.mdx @@ -141,6 +141,10 @@ Turborepo runs a background process to pre-calculate some expensive operations. } ``` + + When running in a CI environment the daemon is always disabled regardless of this setting. + + ### `envMode` Default: `"strict"` From fe3a9dfdbb46e6197750df9735fef58a63e0ffa9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 16:23:59 -0400 Subject: [PATCH 052/218] release(turborepo): 2.1.4-canary.2 (#9241) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index d5cad72ec7450..3d956ffbd5c34 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 413aa95e92678..99a281fdf5ec2 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 80512d82fe307..b5cf9b17583be 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 15d20696b1bb2..2650daddfab19 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index ee2c12c7df036..a7bbb3d56d338 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 418ebb1d4639b..d1d1c8f7bd8a0 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 2d7ace7a5a156..22f16a346cf12 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 6aa41114cb1dd..1628111b09924 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index f481f2f05354c..47bcbc520155f 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.1", + "version": "2.1.4-canary.2", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.1", - "turbo-darwin-arm64": "2.1.4-canary.1", - "turbo-linux-64": "2.1.4-canary.1", - "turbo-linux-arm64": "2.1.4-canary.1", - "turbo-windows-64": "2.1.4-canary.1", - "turbo-windows-arm64": "2.1.4-canary.1" + "turbo-darwin-64": "2.1.4-canary.2", + "turbo-darwin-arm64": "2.1.4-canary.2", + "turbo-linux-64": "2.1.4-canary.2", + "turbo-linux-arm64": "2.1.4-canary.2", + "turbo-windows-64": "2.1.4-canary.2", + "turbo-windows-arm64": "2.1.4-canary.2" } } diff --git a/version.txt b/version.txt index ef1108039305d..a0e657a8b3dd6 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.1 +2.1.4-canary.2 canary From 3ec8b19347a685b61963daf415c64efc882031a8 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 9 Oct 2024 18:01:55 -0400 Subject: [PATCH 053/218] fix broken examples causing `pnpm test` to fail (#9239) --- examples/basic/pnpm-lock.yaml | 7203 ++++---- .../apps/storefront/next-env.d.ts | 2 +- examples/kitchen-sink/pnpm-lock.yaml | 14606 +++++++--------- examples/with-vite/pnpm-lock.yaml | 1609 +- turborepo-tests/helpers/setup_example_test.sh | 20 +- 5 files changed, 10326 insertions(+), 13114 deletions(-) diff --git a/examples/basic/pnpm-lock.yaml b/examples/basic/pnpm-lock.yaml index d549719eef45f..1f269ebacb66d 100644 --- a/examples/basic/pnpm-lock.yaml +++ b/examples/basic/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -10,13 +10,13 @@ importers: devDependencies: prettier: specifier: ^3.2.5 - version: 3.2.5 + version: 3.3.3 turbo: specifier: ^2.0.7 - version: 2.0.7 + version: 2.1.2 typescript: specifier: ^5.4.5 - version: 5.4.5 + version: 5.6.2 apps/docs: dependencies: @@ -25,7 +25,7 @@ importers: version: link:../../packages/ui next: specifier: 14.2.6 - version: 14.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.6(react-dom@18.3.1)(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -41,22 +41,22 @@ importers: version: link:../../packages/typescript-config '@types/node': specifier: ^20 - version: 20.11.24 + version: 20.16.5 '@types/react': specifier: ^18 - version: 18.2.61 + version: 18.3.6 '@types/react-dom': specifier: ^18 - version: 18.2.19 + version: 18.3.0 eslint: specifier: ^8 - version: 8.57.0 + version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.0)(typescript@5.3.3) + version: 14.2.6(eslint@8.57.1)(typescript@5.6.2) typescript: specifier: ^5 - version: 5.3.3 + version: 5.6.2 apps/web: dependencies: @@ -65,7 +65,7 @@ importers: version: link:../../packages/ui next: specifier: 14.2.6 - version: 14.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 14.2.6(react-dom@18.3.1)(react@18.3.1) react: specifier: 18.3.1 version: 18.3.1 @@ -81,46 +81,46 @@ importers: version: link:../../packages/typescript-config '@types/node': specifier: ^20 - version: 20.11.24 + version: 20.16.5 '@types/react': specifier: ^18 - version: 18.2.61 + version: 18.3.6 '@types/react-dom': specifier: ^18 - version: 18.2.19 + version: 18.3.0 eslint: specifier: ^8 - version: 8.57.0 + version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.0)(typescript@5.3.3) + version: 14.2.6(eslint@8.57.1)(typescript@5.6.2) typescript: specifier: ^5 - version: 5.3.3 + version: 5.6.2 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) + version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(@next/eslint-plugin-next@14.2.6)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2) eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@8.57.0) + version: 9.1.0(eslint@8.57.1) eslint-config-turbo: specifier: ^2.0.0 - version: 2.0.0(eslint@8.57.0) + version: 2.1.2(eslint@8.57.1) eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 packages/typescript-config: {} @@ -128,7 +128,7 @@ importers: dependencies: react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -138,367 +138,647 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.12.4(@types/node@20.11.24)(typescript@5.3.3) + version: 1.13.4(@types/node@20.16.5)(typescript@5.6.2) '@types/eslint': specifier: ^8.56.5 - version: 8.56.5 + version: 8.56.12 '@types/node': specifier: ^20.11.24 - version: 20.11.24 + version: 20.16.5 '@types/react': specifier: ^18.2.61 - version: 18.2.61 + version: 18.3.6 '@types/react-dom': specifier: ^18.2.19 - version: 18.2.19 + version: 18.3.0 eslint: specifier: ^8.57.0 - version: 8.57.0 + version: 8.57.1 typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@babel/code-frame@7.22.13': - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 + dev: true - '@babel/compat-data@7.23.3': - resolution: {integrity: sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/core@7.23.3': - resolution: {integrity: sha512-Jg+msLuNuCJDyBvFv5+OKOUjWMZgd85bKjbICd3zWrKAo+bJ49HJufi7CQE0q0uR8NGyO6xkCACScNqyjHSZew==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/eslint-parser@7.23.3': - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + /@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.1): + resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - - '@babel/generator@7.23.3': - resolution: {integrity: sha512-keeZWAV4LU3tW0qRi19HRpabC/ilM0HRBBzf9/k8FFiG4KVpiv0FIy4hHfLfFQZNhziCTPTmd59zoyv6DNISzg==} - engines: {node: '>=6.9.0'} - - '@babel/helper-compilation-targets@7.22.15': - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@babel/core': 7.25.2 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: true - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-string-parser@7.22.5': - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-option@7.22.15': - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helpers@7.23.2': - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + dev: true - '@babel/highlight@7.22.20': - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 + dev: true - '@babel/parser@7.23.3': - resolution: {integrity: sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==} + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.25.6 + dev: true - '@babel/runtime-corejs3@7.22.10': - resolution: {integrity: sha512-IcixfV2Jl3UrqZX4c81+7lVg5++2ufYJyAFW3Aux/ZTvY6LVYYhJ9rMgnbX0zGVq6eqfVpnoatTjZdVki/GmWA==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.23.2': - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime-corejs3@7.25.6: + resolution: {integrity: sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==} engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.38.1 + regenerator-runtime: 0.14.1 + dev: true - '@babel/template@7.22.15': - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + dev: true - '@babel/traverse@7.23.3': - resolution: {integrity: sha512-+K0yF1/9yR0oHdE0StHuEj3uTPzwwbrLGfNOndVJVV2TqA5+j3oljJUb4nmB954FLGjNem976+B+eDuLIjesiQ==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/types@7.23.3': - resolution: {integrity: sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==} + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true - '@cspotcode/source-map-support@0.8.1': + /@cspotcode/source-map-support@0.8.1: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + dev: true - '@eslint-community/eslint-utils@4.4.0': + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + dev: true - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@eslint-community/regexpp@4.11.1: + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true - '@eslint/eslintrc@2.1.4': + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + /@eslint/js@8.57.1: + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true - '@humanwhocodes/module-importer@1.0.1': + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + dev: true - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + dev: true - '@isaacs/cliui@8.0.2': + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + 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 + dev: true - '@jridgewell/gen-mapping@0.3.3': - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@jridgewell/resolve-uri@3.1.1': - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/set-array@1.1.2': - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true - '@jridgewell/trace-mapping@0.3.20': - resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - '@jridgewell/trace-mapping@0.3.9': + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - '@microsoft/tsdoc-config@0.16.2': + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true - '@microsoft/tsdoc@0.14.2': + /@microsoft/tsdoc@0.14.2: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true - '@next/env@14.2.6': + /@next/env@14.2.6: resolution: {integrity: sha512-bs5DFKV+08EjWrl8EB+KKqev1ZTNONH1vFCaHh911aaB362NnP32UDTbE9VQhyiAgbFqJsfDkSxFERNDDb3j0g==} + dev: false - '@next/eslint-plugin-next@14.2.6': + /@next/eslint-plugin-next@14.2.6: resolution: {integrity: sha512-d3+p4AjIYmhqzYHhhmkRYYN6ZU35TwZAKX08xKRfnHkz72KhWL2kxMFsDptpZs5e8bBGdepn7vn1+9DaF8iX+A==} + dependencies: + glob: 10.3.10 + dev: true - '@next/swc-darwin-arm64@14.2.6': + /@next/swc-darwin-arm64@14.2.6: resolution: {integrity: sha512-BtJZb+hYXGaVJJivpnDoi3JFVn80SHKCiiRUW3kk1SY6UCUy5dWFFSbh+tGi5lHAughzeduMyxbLt3pspvXNSg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: false + optional: true - '@next/swc-darwin-x64@14.2.6': + /@next/swc-darwin-x64@14.2.6: resolution: {integrity: sha512-ZHRbGpH6KHarzm6qEeXKSElSXh8dS2DtDPjQt3IMwY8QVk7GbdDYjvV4NgSnDA9huGpGgnyy3tH8i5yHCqVkiQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-arm64-gnu@14.2.6': + /@next/swc-linux-arm64-gnu@14.2.6: resolution: {integrity: sha512-O4HqUEe3ZvKshXHcDUXn1OybN4cSZg7ZdwHJMGCXSUEVUqGTJVsOh17smqilIjooP/sIJksgl+1kcf2IWMZWHg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-arm64-musl@14.2.6': + /@next/swc-linux-arm64-musl@14.2.6: resolution: {integrity: sha512-xUcdhr2hfalG8RDDGSFxQ75yOG894UlmFS4K2M0jLrUhauRBGOtUOxoDVwiIIuZQwZ3Y5hDsazNjdYGB0cQ9yQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-x64-gnu@14.2.6': + /@next/swc-linux-x64-gnu@14.2.6: resolution: {integrity: sha512-InosKxw8UMcA/wEib5n2QttwHSKHZHNSbGcMepBM0CTcNwpxWzX32KETmwbhKod3zrS8n1vJ+DuJKbL9ZAB0Ag==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-x64-musl@14.2.6': + /@next/swc-linux-x64-musl@14.2.6: resolution: {integrity: sha512-d4QXfJmt5pGJ7cG8qwxKSBnO5AXuKAFYxV7qyDRHnUNvY/dgDh+oX292gATpB2AAHgjdHd5ks1wXxIEj6muLUQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-arm64-msvc@14.2.6': + /@next/swc-win32-arm64-msvc@14.2.6: resolution: {integrity: sha512-AlgIhk4/G+PzOG1qdF1b05uKTMsuRatFlFzAi5G8RZ9h67CVSSuZSbqGHbJDlcV1tZPxq/d4G0q6qcHDKWf4aQ==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-ia32-msvc@14.2.6': + /@next/swc-win32-ia32-msvc@14.2.6: resolution: {integrity: sha512-hNukAxq7hu4o5/UjPp5jqoBEtrpCbOmnUqZSKNJG8GrUVzfq0ucdhQFVrHcLRMvQcwqqDh1a5AJN9ORnNDpgBQ==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-x64-msvc@14.2.6': + /@next/swc-win32-x64-msvc@14.2.6: resolution: {integrity: sha512-NANtw+ead1rSDK1jxmzq3TYkl03UNK2KHqUYf1nIhNci6NkeqBD4s1njSzYGIlSHxCK+wSaL8RXZm4v+NF/pMw==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + requiresBuild: true + dev: false + optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: true - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true - '@nodelib/fs.stat@2.0.5': + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} + dev: true - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + dev: true - '@pkgjs/parseargs@0.11.0': + /@nolyfill/is-core-module@1.0.39: + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + dev: true + + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + requiresBuild: true + dev: true + optional: true - '@pkgr/utils@2.4.2': - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true - '@rushstack/eslint-patch@1.5.1': - resolution: {integrity: sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==} + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: true - '@swc/counter@0.1.3': + /@rushstack/eslint-patch@1.10.4: + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + dev: true + + /@swc/counter@0.1.3: resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false - '@swc/helpers@0.5.5': + /@swc/helpers@0.5.5: resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.7.0 + dev: false - '@tootallnate/quickjs-emscripten@0.23.0': + /@tootallnate/quickjs-emscripten@0.23.0: resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + dev: true - '@tsconfig/node10@1.0.9': - resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + dev: true - '@tsconfig/node12@1.0.11': + /@tsconfig/node12@1.0.11: resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + dev: true - '@tsconfig/node14@1.0.3': + /@tsconfig/node14@1.0.3: resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + dev: true - '@tsconfig/node16@1.0.4': + /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + dev: true - '@turbo/gen@1.12.4': - resolution: {integrity: sha512-3Z8KZ6Vnc2x6rr8sNJ4QNYpkAttLBfb91uPzDlFDY7vgJg+vfXT8YWyZznVL+19ZixF2C/F4Ucp4/YjG2e1drg==} + /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.6.2): + resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true + dependencies: + '@turbo/workspaces': 1.13.4 + chalk: 2.4.2 + commander: 10.0.1 + fs-extra: 10.1.0 + inquirer: 8.2.6 + minimatch: 9.0.5 + node-plop: 0.26.3 + proxy-agent: 6.4.0 + ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.6.2) + update-check: 1.5.4 + validate-npm-package-name: 5.0.1 + transitivePeerDependencies: + - '@swc/core' + - '@swc/wasm' + - '@types/node' + - supports-color + - typescript + dev: true - '@turbo/workspaces@1.12.4': - resolution: {integrity: sha512-a1hF8Nr6MOeCpvlLR569dGTlzgRLj2Rxo6dTb4jtL+jhHwCb94A9kDPgcRnYGFr45mgulICarVaNZxDjw4/riQ==} + /@turbo/workspaces@1.13.4: + resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} hasBin: true + dependencies: + chalk: 2.4.2 + commander: 10.0.1 + execa: 5.1.1 + fast-glob: 3.3.2 + fs-extra: 10.1.0 + gradient-string: 2.0.2 + inquirer: 8.2.6 + js-yaml: 4.1.0 + ora: 4.1.1 + rimraf: 3.0.2 + semver: 7.6.3 + update-check: 1.5.4 + dev: true - '@types/eslint@8.56.5': - resolution: {integrity: sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==} + /@types/eslint@8.56.12: + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} + dependencies: + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 + dev: true - '@types/estree@1.0.5': + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true - '@types/glob@7.2.0': + /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.16.5 + dev: true - '@types/inquirer@6.5.0': + /@types/inquirer@6.5.0: resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + dependencies: + '@types/through': 0.0.33 + rxjs: 6.6.7 + dev: true - '@types/json-schema@7.0.12': - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true - '@types/json5@0.0.29': + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true - '@types/minimatch@5.1.2': + /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true - '@types/node@20.11.24': - resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 + dev: true - '@types/normalize-package-data@2.4.4': + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true - '@types/prop-types@15.7.5': - resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + dev: true - '@types/react-dom@18.2.19': - resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} - - '@types/react@18.2.61': - resolution: {integrity: sha512-NURTN0qNnJa7O/k4XUkEW2yfygA+NxS0V5h1+kp9jPwhzZy95q3ADoGMP0+JypMhrZBTTgjKAUlTctde1zzeQA==} + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + dependencies: + '@types/react': 18.3.6 + dev: true - '@types/scheduler@0.16.3': - resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} + /@types/react@18.3.6: + resolution: {integrity: sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==} + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + dev: true - '@types/semver@7.5.0': - resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true - '@types/through@0.0.30': - resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + dependencies: + '@types/node': 20.16.5 + dev: true - '@types/tinycolor2@1.4.6': + /@types/tinycolor2@1.4.6: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + dev: true - '@typescript-eslint/eslint-plugin@6.17.0': - resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -507,10 +787,28 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/eslint-plugin@7.1.0': - resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: '@typescript-eslint/parser': ^7.0.0 eslint: ^8.56.0 @@ -518,9 +816,25 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 7.18.0 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/parser@6.17.0': - resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -528,9 +842,41 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/parser@7.1.0': - resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} + /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 @@ -538,21 +884,52 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.2.0 + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/scope-manager@5.62.0': + /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true - '@typescript-eslint/scope-manager@6.17.0': - resolution: {integrity: sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true + + /@typescript-eslint/scope-manager@7.18.0: + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + dev: true - '@typescript-eslint/scope-manager@7.1.0': - resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} + /@typescript-eslint/scope-manager@7.2.0: + resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + dev: true - '@typescript-eslint/type-utils@6.17.0': - resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -560,30 +937,58 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/type-utils@7.1.0': - resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/types@5.62.0': + /@typescript-eslint/types@5.62.0: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@typescript-eslint/types@6.17.0': - resolution: {integrity: sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@typescript-eslint/types@7.18.0: + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + dev: true - '@typescript-eslint/types@7.1.0': - resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} + /@typescript-eslint/types@7.2.0: + resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} engines: {node: ^16.0.0 || >=18.0.0} + dev: true - '@typescript-eslint/typescript-estree@5.62.0': + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -591,59 +996,177 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/typescript-estree@6.17.0': - resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2): + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/visitor-keys': 7.18.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/typescript-estree@7.1.0': - resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2): + resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 7.2.0 + '@typescript-eslint/visitor-keys': 7.2.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/utils@5.62.0': + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - '@typescript-eslint/utils@6.17.0': - resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - '@typescript-eslint/utils@7.1.0': - resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} - engines: {node: ^16.0.0 || >=18.0.0} + /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@typescript-eslint/scope-manager': 7.18.0 + '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + eslint: 8.57.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - '@typescript-eslint/visitor-keys@5.62.0': + /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@typescript-eslint/visitor-keys@6.17.0': - resolution: {integrity: sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@typescript-eslint/visitor-keys@7.18.0: + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + dependencies: + '@typescript-eslint/types': 7.18.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@typescript-eslint/visitor-keys@7.1.0': - resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} + /@typescript-eslint/visitor-keys@7.2.0: + resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.2.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@ungap/structured-clone@1.2.0': + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true - '@vercel/style-guide@5.2.0': + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -660,2877 +1183,380 @@ packages: optional: true typescript: optional: true + dependencies: + '@babel/core': 7.25.2 + '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) + eslint-plugin-react: 7.36.1(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) + prettier: 3.3.3 + prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) + typescript: 5.6.2 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - jest + - supports-color + dev: true - acorn-jsx@5.3.2: + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.12.1 + dev: true - acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true - acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} hasBin: true + dev: true - agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + /agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} engines: {node: '>= 14'} + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true - aggregate-error@3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true - ajv@6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - - arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - - 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==} - - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} - - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} - engines: {node: '>= 0.4'} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} - engines: {node: '>= 0.4'} - - array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} - - array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} - - array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} - - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} - engines: {node: '>= 0.4'} - - ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - - ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} - - asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} - - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} - engines: {node: '>= 0.4'} - - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} - engines: {node: '>=4'} - - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - - basic-ftp@5.0.3: - resolution: {integrity: sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==} - engines: {node: '>=10.0.0'} - - big-integer@1.6.51: - resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==} - engines: {node: '>=0.6'} - - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - - bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} - - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} - engines: {node: '>=8'} - - browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} - - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - - builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - - bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - - busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} - - call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - - caniuse-lite@1.0.30001593: - resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} - - 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'} - - change-case@3.1.0: - resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} - - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} - - cli-spinners@2.9.0: - resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} - engines: {node: '>=6'} - - cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - - client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - - clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - - 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-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - constant-case@2.0.0: - resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - core-js-pure@3.32.1: - resolution: {integrity: sha512-f52QZwkFVDPf7UEQZGHKx6NYxsxmVGJe5DIvbzOdRMJlmT6yv0KDjR8rmy3ngr/t5wU54c7Sp/qIJH0ppbhVpQ==} - - create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - - cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} - - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - - damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - - data-uri-to-buffer@5.0.1: - resolution: {integrity: sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==} - engines: {node: '>= 14'} - - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - 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==} - - default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - - default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - - defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} - - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - 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'} - - degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} - - del@5.1.0: - resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} - engines: {node: '>=8'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - - detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - 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'} - - dot-case@2.1.1: - resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} - - dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - electron-to-chromium@1.4.583: - resolution: {integrity: sha512-93y1gcONABZ7uqYe/JWDVQP/Pj/sQSunF0HVAPdlg/pfBnOyBMLlQUxWvkqcljJg1+W6cjvPuYD+r1Th9Tn8mA==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} - engines: {node: '>=10.13.0'} - - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - - es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} - engines: {node: '>= 0.4'} - - es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} - - es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} - engines: {node: '>= 0.4'} - - es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} - - es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true - - eslint-config-next@14.2.6: - resolution: {integrity: sha512-z0URA5LO6y8lS/YLN0EDW/C4LEkDODjJzA37dvLVdzCPzuewjzTe1os5g3XclZAZrQ8X8hPaSMQ2JuVWwMmrTA==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - - eslint-config-prettier@9.1.0: - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' - - eslint-config-turbo@2.0.0: - resolution: {integrity: sha512-EtdL8t3iuj6JFHq8nESXwnu0U7K/ug7dkxTsYNctuR6udOudjLMZz3A0P131Bz5ZFmPoFmkdHjlRYwocGgLbOw==} - peerDependencies: - eslint: '>6.6.0' - - eslint-import-resolver-alias@1.1.2: - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' - - eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - 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-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.0: - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest@27.6.0: - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - - eslint-plugin-playwright@0.16.0: - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-testing-library@6.1.2: - resolution: {integrity: sha512-Ra16FeBlonfbScOIdZEta9o+OxtwDqiUt+4UCpIM42TuatyLdtfU/SbwnIzPcAszrbl58PGwyZ9YGU9dwIo/tA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - - eslint-plugin-turbo@2.0.0: - resolution: {integrity: sha512-31tZqfGbjBn6BzXVsmW50c2m8NDra6mOS2us/qHxUwN4YrHI/uYSpyItAw4qdVrxk7RmilvmnJ5WXFwtnfuLqw==} - peerDependencies: - eslint: '>6.6.0' - - eslint-plugin-unicorn@48.0.1: - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - 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@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - 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'} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} - 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==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - 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'} - - flat-cache@3.0.4: - resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.2.7: - resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-extra@8.1.0: - resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} - engines: {node: '>=6 <7 || >=8'} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - - get-uri@6.0.1: - resolution: {integrity: sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==} - engines: {node: '>= 14'} - - git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - - 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@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - - globby@10.0.2: - resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} - engines: {node: '>=8'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gradient-string@2.0.2: - resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} - engines: {node: '>=10'} - - graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - - handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - 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-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - - header-case@1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - http-proxy-agent@7.0.0: - resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} - engines: {node: '>= 14'} - - https-proxy-agent@7.0.1: - resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} - engines: {node: '>= 14'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - 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'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} - - inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} - - internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - - ip@1.1.8: - resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} - - ip@2.0.0: - resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} - - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - 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-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - hasBin: true - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-lower-case@1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} - - is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - 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-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-upper-case@1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} - - is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - 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 - - jsonfile@4.0.0: - resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - - levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - 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'} - - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - - lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lower-case-first@1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} - - lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - 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'} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - 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'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - - mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - - next@14.2.6: - resolution: {integrity: sha512-57Su7RqXs5CBKKKOagt8gPhMM3CpjgbeQhrtei2KLAA1vTNm7jfKS+uDARkSW8ZETUflDCBIsUKGSyQdRs4U4g==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true - - no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} - - node-plop@0.26.3: - resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} - engines: {node: '>=8.9.4'} - - node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - - object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - 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'} - - open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - ora@4.1.1: - resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} - engines: {node: '>=8'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - - 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-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-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - pac-proxy-agent@7.0.0: - resolution: {integrity: sha512-t4tRAMx0uphnZrio0S0Jw9zg3oDbz1zVhQ/Vy18FjLfP1XOLNUEjaVxYCYRI6NS+BsMBXKIzV6cTLOkO9AtywA==} - engines: {node: '>= 14'} - - pac-resolver@7.0.0: - resolution: {integrity: sha512-Fd9lT9vJbHYRACT8OhCbZBbxr6KRSawSovFpy8nDGshaK99S/EBhVIHp9+crhxrsZOuvLpgL1n23iyPg6Rl2hg==} - engines: {node: '>= 14'} - - param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} - - 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'} - - pascal-case@2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} - - path-case@2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - 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.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - - postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-packagejson@2.4.6: - resolution: {integrity: sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - hasBin: true - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - proxy-agent@6.3.0: - resolution: {integrity: sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==} - engines: {node: '>= 14'} - - proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} - engines: {node: '>=6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - - registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} - - registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} - - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - hasBin: true - - run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - - run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} - - rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} - - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - engines: {node: '>=0.4'} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - 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.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - hasBin: true - - sentence-case@2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} - - set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - 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'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - - snake-case@2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} - - socks-proxy-agent@8.0.1: - resolution: {integrity: sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==} - engines: {node: '>= 14'} - - socks@2.7.1: - resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} - engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} - - sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - - sort-package-json@2.6.0: - resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} - hasBin: true - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - 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.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - 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-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-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - 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'} - - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - 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-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - swap-case@1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} - - synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - - tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - - tinygradient@1.1.5: - resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} - - title-case@2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} - - titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - ts-api-utils@1.0.2: - resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - ts-node@10.9.1: - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} - 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.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - turbo-darwin-64@2.0.7: - resolution: {integrity: sha512-J1RBvQGqKeUwLJrZbfrm4tHshagdMeGAwd7rpLpfUrw0PNmGfcBazJf6dIGXG59/GHzJmS0/eAZ8qDchfVbIFA==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.0.7: - resolution: {integrity: sha512-h1JK8uuEjoHx1SvvTZiottj+4kDmiv+hivnLUzNwO75qKblMsd38IsFB0J2sMRz7JacFlf+3ry8SItznBW67Xw==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.0.7: - resolution: {integrity: sha512-dsr7GFeHAYVMnXWDDjhpsAQetejU4OlkNBRA5hfmnIcl2sSyOYa3EvoeJ6j5z5vTNIJ9VO4I1h0jK3lTjEoonA==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.0.7: - resolution: {integrity: sha512-bJbwXvyX1XPzY1jHgkqggls/L4yFyHVK8GGACF3kcg6x7lYV2SXkUYRyOC3WqzW7euqa9Zw/32jrIPP4Qy31Vw==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.0.7: - resolution: {integrity: sha512-aBH+5A7IN957MqXMrw8xN0CWtH/fPFL+xTlloO6074Eaa8WfnctSAnaSujm6f4xF2T8lFx+ZprBvnO9oKvLQQQ==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.0.7: - resolution: {integrity: sha512-ButUCpO5nTi+jyTSIY2mQ9dVz+mCGxJ6sHyn0xGlNoJWdisKXb0BtWCLAjM26gg/yp9Kt1MBowMQyYVruPV0Qw==} - cpu: [arm64] - os: [win32] - - turbo@2.0.7: - resolution: {integrity: sha512-76iNWZpmKAKjj+yL0Wtcu2LpDIM5Nz7JS3fHOZPYS0AKuC2boJ24276VAiK4PKwbpBB//TYKDpSLuQ6cfR49pg==} - hasBin: true - - type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} - - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} - engines: {node: '>=0.8.0'} - hasBin: true - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - universalify@0.1.2: - resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} - engines: {node: '>= 4.0.0'} - - universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} - engines: {node: '>= 10.0.0'} - - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} - - upper-case-first@1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} - - upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - - which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - - which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - - 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'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - - yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - - '@babel/code-frame@7.22.13': - dependencies: - '@babel/highlight': 7.22.20 - chalk: 2.4.2 - - '@babel/compat-data@7.23.3': {} - - '@babel/core@7.23.3': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.3) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.3 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.23.3(@babel/core@7.23.3)(eslint@8.57.0)': - dependencies: - '@babel/core': 7.23.3 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.23.3': - dependencies: - '@babel/types': 7.23.3 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.20 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.22.15': - dependencies: - '@babel/compat-data': 7.23.3 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.3 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.23.3 - - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.23.3 - - '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.3)': - dependencies: - '@babel/core': 7.23.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-simple-access@7.22.5': - dependencies: - '@babel/types': 7.23.3 - - '@babel/helper-split-export-declaration@7.22.6': - dependencies: - '@babel/types': 7.23.3 - - '@babel/helper-string-parser@7.22.5': {} - - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/helper-validator-option@7.22.15': {} - - '@babel/helpers@7.23.2': - dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.3 - '@babel/types': 7.23.3 - transitivePeerDependencies: - - supports-color - - '@babel/highlight@7.22.20': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/parser@7.23.3': - dependencies: - '@babel/types': 7.23.3 - - '@babel/runtime-corejs3@7.22.10': - dependencies: - core-js-pure: 3.32.1 - regenerator-runtime: 0.14.0 - - '@babel/runtime@7.23.2': - dependencies: - regenerator-runtime: 0.14.0 - - '@babel/template@7.22.15': - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - - '@babel/traverse@7.23.3': - dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.3 - '@babel/types': 7.23.3 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.23.3': - dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@cspotcode/source-map-support@0.8.1': - dependencies: - '@jridgewell/trace-mapping': 0.3.9 - - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.0': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.0': {} - - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.2': {} - - '@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 - - '@jridgewell/gen-mapping@0.3.3': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.20 - - '@jridgewell/resolve-uri@3.1.1': {} - - '@jridgewell/set-array@1.1.2': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.20': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jridgewell/trace-mapping@0.3.9': - dependencies: - '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@microsoft/tsdoc-config@0.16.2': - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - - '@microsoft/tsdoc@0.14.2': {} - - '@next/env@14.2.6': {} - - '@next/eslint-plugin-next@14.2.6': - dependencies: - glob: 10.3.10 - - '@next/swc-darwin-arm64@14.2.6': - optional: true - - '@next/swc-darwin-x64@14.2.6': - optional: true - - '@next/swc-linux-arm64-gnu@14.2.6': - optional: true - - '@next/swc-linux-arm64-musl@14.2.6': - optional: true - - '@next/swc-linux-x64-gnu@14.2.6': - optional: true - - '@next/swc-linux-x64-musl@14.2.6': - optional: true - - '@next/swc-win32-arm64-msvc@14.2.6': - optional: true - - '@next/swc-win32-ia32-msvc@14.2.6': - optional: true - - '@next/swc-win32-x64-msvc@14.2.6': - optional: true - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/utils@2.4.2': - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.1 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.0 - tslib: 2.6.2 - - '@rushstack/eslint-patch@1.5.1': {} - - '@swc/counter@0.1.3': {} - - '@swc/helpers@0.5.5': - dependencies: - '@swc/counter': 0.1.3 - tslib: 2.6.2 - - '@tootallnate/quickjs-emscripten@0.23.0': {} - - '@tsconfig/node10@1.0.9': {} - - '@tsconfig/node12@1.0.11': {} - - '@tsconfig/node14@1.0.3': {} - - '@tsconfig/node16@1.0.4': {} - - '@turbo/gen@1.12.4(@types/node@20.11.24)(typescript@5.3.3)': - dependencies: - '@turbo/workspaces': 1.12.4 - chalk: 2.4.2 - commander: 10.0.1 - fs-extra: 10.1.0 - inquirer: 8.2.6 - minimatch: 9.0.3 - node-plop: 0.26.3 - proxy-agent: 6.3.0 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.3.3) - update-check: 1.5.4 - validate-npm-package-name: 5.0.0 - transitivePeerDependencies: - - '@swc/core' - - '@swc/wasm' - - '@types/node' - - supports-color - - typescript - - '@turbo/workspaces@1.12.4': - dependencies: - chalk: 2.4.2 - commander: 10.0.1 - execa: 5.1.1 - fast-glob: 3.3.1 - fs-extra: 10.1.0 - gradient-string: 2.0.2 - inquirer: 8.2.6 - js-yaml: 4.1.0 - ora: 4.1.1 - rimraf: 3.0.2 - semver: 7.5.4 - update-check: 1.5.4 - - '@types/eslint@8.56.5': - dependencies: - '@types/estree': 1.0.5 - '@types/json-schema': 7.0.12 - - '@types/estree@1.0.5': {} - - '@types/glob@7.2.0': - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 20.11.24 - - '@types/inquirer@6.5.0': - dependencies: - '@types/through': 0.0.30 - rxjs: 6.6.7 - - '@types/json-schema@7.0.12': {} - - '@types/json5@0.0.29': {} - - '@types/minimatch@5.1.2': {} - - '@types/node@20.11.24': - dependencies: - undici-types: 5.26.5 - - '@types/normalize-package-data@2.4.4': {} - - '@types/prop-types@15.7.5': {} - - '@types/react-dom@18.2.19': - dependencies: - '@types/react': 18.2.61 - - '@types/react@18.2.61': - dependencies: - '@types/prop-types': 15.7.5 - '@types/scheduler': 0.16.3 - csstype: 3.1.2 - - '@types/scheduler@0.16.3': {} - - '@types/semver@7.5.0': {} - - '@types/through@0.0.30': - dependencies: - '@types/node': 20.11.24 - - '@types/tinycolor2@1.4.6': {} - - '@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.17.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/scope-manager@6.17.0': - dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 - - '@typescript-eslint/scope-manager@7.1.0': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - - '@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@6.17.0': {} - - '@typescript-eslint/types@7.1.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/visitor-keys': 6.17.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.0 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@6.17.0': - dependencies: - '@typescript-eslint/types': 6.17.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.1.0': - dependencies: - '@typescript-eslint/types': 7.1.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.2.6)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3)': - dependencies: - '@babel/core': 7.23.3 - '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - eslint-config-prettier: 9.1.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.1.2(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - optionalDependencies: - '@next/eslint-plugin-next': 14.2.6 - eslint: 8.57.0 - prettier: 3.2.5 - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - - acorn-jsx@5.3.2(acorn@8.10.0): - dependencies: - acorn: 8.10.0 - - acorn-walk@8.2.0: {} - - acorn@8.10.0: {} - - agent-base@7.1.0: - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - 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 + dev: true - ansi-escapes@4.3.2: + /ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.21.3 + dev: true - ansi-regex@5.0.1: {} + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true - ansi-regex@6.0.1: {} + /ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + dev: true - ansi-styles@3.2.1: + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} dependencies: color-convert: 1.9.3 + dev: true - ansi-styles@4.3.0: + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: true - ansi-styles@6.2.1: {} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: true - arg@4.1.3: {} + /arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + dev: true - argparse@2.0.1: {} + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true - aria-query@5.3.0: + /aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} dependencies: - dequal: 2.0.3 + deep-equal: 2.2.3 + dev: true - array-buffer-byte-length@1.0.0: + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true - array-includes@3.1.7: + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 is-string: 1.0.7 + dev: true - array-union@2.1.0: {} + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true - array.prototype.findlastindex@1.2.3: + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + dev: true - array.prototype.flat@1.3.2: + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flatmap@1.3.2: + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 + dev: true - array.prototype.tosorted@1.1.2: + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 + dev: true - arraybuffer.prototype.slice@1.0.2: + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - ast-types-flow@0.0.8: {} + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true - ast-types@0.13.4: + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} dependencies: - tslib: 2.6.2 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true + + /ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true - asynciterator.prototype@1.0.0: + /ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} dependencies: - has-symbols: 1.0.3 - - available-typed-arrays@1.0.5: {} + tslib: 2.7.0 + dev: true - axe-core@4.7.0: {} - - axobject-query@3.2.1: + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} dependencies: - dequal: 2.0.3 + possible-typed-array-names: 1.0.0 + dev: true - balanced-match@1.0.2: {} + /axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + dev: true + + /axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + dev: true - base64-js@1.5.1: {} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true - basic-ftp@5.0.3: {} + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true - big-integer@1.6.51: {} + /basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + dev: true - bl@4.1.0: + /bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 + dev: true - bplist-parser@0.2.0: - dependencies: - big-integer: 1.6.51 - - brace-expansion@1.1.11: + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: true - brace-expansion@2.0.1: + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 + dev: true - braces@3.0.2: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 + dev: true - browserslist@4.22.1: + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - caniuse-lite: 1.0.30001593 - electron-to-chromium: 1.4.583 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.24 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + dev: true - buffer@5.7.1: + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + dev: true - builtin-modules@3.3.0: {} - - builtins@5.0.1: - dependencies: - semver: 7.5.4 - - bundle-name@3.0.0: - dependencies: - run-applescript: 5.0.0 + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true - busboy@1.6.0: + /busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} dependencies: streamsearch: 1.1.0 + dev: false - call-bind@1.0.5: + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 + dev: true - callsites@3.1.0: {} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true - camel-case@3.0.0: + /camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 + dev: true - caniuse-lite@1.0.30001593: {} + /caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} - chalk@2.4.2: + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + dev: true - chalk@3.0.0: + /chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - chalk@4.1.2: + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: true - change-case@3.1.0: + /change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} dependencies: camel-case: 3.0.0 constant-case: 2.0.0 @@ -3550,117 +1576,246 @@ snapshots: title-case: 2.1.1 upper-case: 1.1.3 upper-case-first: 1.1.2 + dev: true - chardet@0.7.0: {} + /chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + dev: true - ci-info@3.9.0: {} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: true - clean-regexp@1.0.0: + /clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} dependencies: escape-string-regexp: 1.0.5 + dev: true - clean-stack@2.2.0: {} + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true - cli-cursor@3.1.0: + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} dependencies: restore-cursor: 3.1.0 + dev: true - cli-spinners@2.9.0: {} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: true - cli-width@3.0.0: {} + /cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + dev: true - client-only@0.0.1: {} + /client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false - clone@1.0.4: {} + /clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + dev: true - color-convert@1.9.3: + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 + dev: true - color-convert@2.0.1: + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: true - color-name@1.1.3: {} + /color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - color-name@1.1.4: {} + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true - commander@10.0.1: {} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true - concat-map@0.0.1: {} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: true - constant-case@2.0.0: + /constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} dependencies: snake-case: 2.1.0 upper-case: 1.1.3 + dev: true - convert-source-map@2.0.0: {} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true - core-js-pure@3.32.1: {} + /core-js-pure@3.38.1: + resolution: {integrity: sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==} + requiresBuild: true + dev: true - create-require@1.1.1: {} + /create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + dev: true - cross-spawn@7.0.3: + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: true - csstype@3.1.2: {} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + dev: true - damerau-levenshtein@1.0.8: {} + /damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true - data-uri-to-buffer@5.0.1: {} + /data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + dev: true - debug@3.2.7: + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} dependencies: - ms: 2.1.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true - debug@4.3.4: + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} dependencies: - ms: 2.1.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true - deep-extend@0.6.0: {} + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true - deep-is@0.1.4: {} + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + dev: true - default-browser-id@3.0.0: + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 + ms: 2.1.3 + dev: true - default-browser@4.0.0: + /deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true + + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - defaults@1.0.4: + /defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} dependencies: clone: 1.0.4 + dev: true - define-data-property@1.1.1: + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + dev: true - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 + dev: true - degenerator@5.0.1: + /degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} dependencies: ast-types: 0.13.4 escodegen: 2.1.0 esprima: 4.0.1 + dev: true - del@5.1.0: + /del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} dependencies: globby: 10.0.2 graceful-fs: 4.2.11 @@ -3670,391 +1825,676 @@ snapshots: p-map: 3.0.0 rimraf: 3.0.2 slash: 3.0.0 + dev: true - dequal@2.0.3: {} - - detect-indent@7.0.1: {} + /detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + dev: true - detect-newline@4.0.1: {} + /detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - diff@4.0.2: {} + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + dev: true - dir-glob@3.0.1: + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: true - doctrine@2.1.0: + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} dependencies: esutils: 2.0.3 + dev: true - doctrine@3.0.0: + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} dependencies: esutils: 2.0.3 + dev: true - dot-case@2.1.1: + /dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} dependencies: no-case: 2.3.2 + dev: true - dotenv@16.0.3: {} + /dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + dev: true - eastasianwidth@0.2.0: {} + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true - electron-to-chromium@1.4.583: {} + /electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} + dev: true - emoji-regex@8.0.0: {} + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true - emoji-regex@9.2.2: {} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true - enhanced-resolve@5.15.0: + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 + dev: true - error-ex@1.3.2: + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: true - es-abstract@1.22.3: + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true - es-iterator-helpers@1.0.15: + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.6 + internal-slot: 1.0.7 iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 + safe-array-concat: 1.1.2 + dev: true + + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true - es-set-tostringtag@2.0.2: + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true - es-shim-unscopables@1.0.2: + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} dependencies: - hasown: 2.0.0 + hasown: 2.0.2 + dev: true - es-to-primitive@1.2.1: + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 + dev: true - escalade@3.1.1: {} + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true - escape-string-regexp@1.0.5: {} + /escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + dev: true - escape-string-regexp@4.0.0: {} + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true - escodegen@2.1.0: + /escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 + dev: true - eslint-config-next@14.2.6(eslint@8.57.0)(typescript@5.3.3): + /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-z0URA5LO6y8lS/YLN0EDW/C4LEkDODjJzA37dvLVdzCPzuewjzTe1os5g3XclZAZrQ8X8hPaSMQ2JuVWwMmrTA==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@next/eslint-plugin-next': 14.2.6 - '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - optionalDependencies: - typescript: 5.3.3 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-react: 7.36.1(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + typescript: 5.6.2 transitivePeerDependencies: - eslint-import-resolver-webpack + - eslint-plugin-import-x - supports-color + dev: true - eslint-config-prettier@9.1.0(eslint@8.57.0): + /eslint-config-prettier@9.1.0(eslint@8.57.1): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 + dev: true - eslint-config-turbo@2.0.0(eslint@8.57.0): + /eslint-config-turbo@2.1.2(eslint@8.57.1): + resolution: {integrity: sha512-UCNwxBrTOx0K41h1OrwMg7vPdGvcGSAlj40ZzpuUi0S2Muac2UOs+6F2dMYQiKg7lX2HAtyHXlF0T2wlWNHjGg==} + peerDependencies: + eslint: '>6.6.0' dependencies: - eslint: 8.57.0 - eslint-plugin-turbo: 2.0.0(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-turbo: 2.1.2(eslint@8.57.1) + dev: true - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)): + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' dependencies: - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) + dev: true - eslint-import-resolver-node@0.3.9: + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color + dev: true - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1): + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) - fast-glob: 3.3.1 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: true - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.1 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + fast-glob: 3.3.2 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0): + /eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 dependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint-plugin-import@2.29.0)(eslint@8.57.0) + eslint: 8.57.1 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0): + /eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 dependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0) transitivePeerDependencies: - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + /eslint-module-utils@2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 dependencies: + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 - optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color + dev: true - eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.0 - ignore: 5.3.1 + eslint: 8.57.1 + ignore: 5.3.2 + dev: true - eslint-plugin-import@2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1): + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.29.0)(eslint@8.57.0))(eslint@8.57.0) - hasown: 2.0.0 - is-core-module: 2.13.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: true - eslint-plugin-import@2.29.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0): + /eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - hasown: 2.0.0 - is-core-module: 2.13.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 - optionalDependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: true - eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 - optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 dependencies: - '@babel/runtime': 7.23.2 - aria-query: 5.3.0 - array-includes: 3.1.7 + aria-query: 5.1.3 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 + axe-core: 4.10.0 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 - hasown: 2.0.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 + dev: true - eslint-plugin-only-warn@1.1.0: {} + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true - eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true dependencies: - eslint: 8.57.0 - optionalDependencies: - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) + eslint: 8.57.1 + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + dev: true - eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.57.0 + eslint: 8.57.1 + dev: true - eslint-plugin-react@7.33.2(eslint@8.57.0): + /eslint-plugin-react@7.36.1(eslint@8.57.1): + resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + dev: true - eslint-plugin-testing-library@6.1.2(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-tsdoc@0.2.17: + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 + dev: true - eslint-plugin-turbo@2.0.0(eslint@8.57.0): + /eslint-plugin-turbo@2.1.2(eslint@8.57.1): + resolution: {integrity: sha512-q2ikGubfVLZDPEKliiuubZc3sI5oqbKIZJ6fRi6Bldv8E3cMNH3Qt7g6hXZV4+GxwQbzEEteCYSBNbOn1DBqRg==} + peerDependencies: + eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.57.0 + eslint: 8.57.1 + dev: true - eslint-plugin-unicorn@48.0.1(eslint@8.57.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.57.1): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.57.0 - esquery: 1.5.0 + eslint: 8.57.1 + esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -4063,43 +2503,59 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.3 strip-indent: 3.0.0 + dev: true - eslint-scope@5.1.1: + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 + dev: true - eslint-scope@7.2.2: + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + dev: true - eslint-visitor-keys@2.1.0: {} + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true - eslint-visitor-keys@3.4.3: {} + /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} + dev: true - eslint@8.57.0: + /eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -4107,7 +2563,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4117,35 +2573,60 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color + dev: true - espree@9.6.1: + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 + dev: true - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true - esquery@1.5.0: + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 + dev: true - esrecurse@4.3.0: + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 + dev: true - estraverse@4.3.0: {} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true - estraverse@5.3.0: {} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true - esutils@2.0.3: {} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -4156,156 +2637,236 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: true - execa@7.2.0: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - - external-editor@3.1.0: + /external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 + dev: true - fast-deep-equal@3.1.3: {} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true - fast-glob@3.3.1: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} 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.5 + micromatch: 4.0.8 + dev: true - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true - fast-levenshtein@2.0.6: {} + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true - fastq@1.15.0: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 + dev: true - figures@3.2.0: + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} dependencies: escape-string-regexp: 1.0.5 + dev: true - file-entry-cache@6.0.1: + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.0.4 + flat-cache: 3.2.0 + dev: true - fill-range@7.0.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: true - find-up@4.1.0: + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 + dev: true - find-up@5.0.0: + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: true - flat-cache@3.0.4: + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.7 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 + dev: true - flatted@3.2.7: {} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true - for-each@0.3.3: + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 + dev: true - foreground-child@3.1.1: + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 + dev: true - fs-extra@10.1.0: + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 + dev: true - fs-extra@8.1.0: + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 - jsonfile: 4.0.0 - universalify: 0.1.2 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true - function.prototype.name@1.1.6: + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 + dev: true - functions-have-names@1.2.3: {} + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true - gensync@1.0.0-beta.2: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true - get-intrinsic@1.2.2: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 + dev: true - get-stdin@9.0.0: {} + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true - get-symbol-description@1.0.0: + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true - get-tsconfig@4.7.2: + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: resolve-pkg-maps: 1.0.0 + dev: true - get-uri@6.0.1: + /get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} dependencies: - basic-ftp: 5.0.3 - data-uri-to-buffer: 5.0.1 - debug: 4.3.4 - fs-extra: 8.1.0 + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.7 + fs-extra: 11.2.0 transitivePeerDependencies: - supports-color + dev: true - git-hooks-list@3.1.0: {} + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: true - glob-parent@6.0.2: + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true - glob@10.3.10: + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + dev: true - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -4313,141 +2874,232 @@ snapshots: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: true - globals@11.12.0: {} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true - globals@13.24.0: + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 + dev: true - globalthis@1.0.3: + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 + dev: true - globby@10.0.2: + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} dependencies: '@types/glob': 7.2.0 array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 + fast-glob: 3.3.2 glob: 7.2.3 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true - globby@11.1.0: + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.3.1 + fast-glob: 3.3.2 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true - globby@13.2.2: + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.3.1 + fast-glob: 3.3.2 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 + dev: true - gopd@1.0.1: + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 + dev: true - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gradient-string@2.0.2: + /gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 tinygradient: 1.1.5 + dev: true - graphemer@1.4.0: {} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true - handlebars@4.7.8: + /handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true dependencies: minimist: 1.2.8 neo-async: 2.6.2 source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.19.3 + dev: true - has-bigints@1.0.2: {} + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true - has-flag@3.0.0: {} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true - has-flag@4.0.0: {} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true - has-property-descriptors@1.0.1: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.2 + es-define-property: 1.0.0 + dev: true - has-proto@1.0.1: {} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true - has-symbols@1.0.3: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true - has-tostringtag@1.0.0: + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true - hasown@2.0.0: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: true - header-case@1.0.1: + /header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 + dev: true - hosted-git-info@2.8.9: {} + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true - http-proxy-agent@7.0.0: + /http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 - debug: 4.3.4 + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - https-proxy-agent@7.0.1: + /https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 - debug: 4.3.4 + agent-base: 7.1.1 + debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - human-signals@2.1.0: {} - - human-signals@4.3.1: {} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true - iconv-lite@0.4.24: + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true - ieee754@1.2.1: {} + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true - ignore@5.3.1: {} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true - import-fresh@3.3.0: + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true - indent-string@4.0.0: {} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true - inflight@1.0.6: + /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. dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: true - inherits@2.0.4: {} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true - ini@1.3.8: {} + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: true - inquirer@7.3.3: + /inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -4462,8 +3114,11 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 + dev: true - inquirer@8.2.6: + /inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -4480,318 +3135,590 @@ snapshots: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 + dev: true - internal-slot@1.0.6: + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true - ip@1.1.8: {} + /ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + dev: true - ip@2.0.0: {} + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-array-buffer@3.0.2: + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: true - is-async-function@2.0.0: + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-bigint@1.0.4: + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true - is-boolean-object@1.1.2: + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-builtin-module@3.2.1: + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 + dev: true - is-callable@1.2.7: {} - - is-core-module@2.13.1: + /is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} dependencies: - hasown: 2.0.0 + semver: 7.6.3 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true - is-date-object@1.0.5: + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + hasown: 2.0.2 + dev: true - is-docker@2.2.1: {} + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true - is-docker@3.0.0: {} + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: true - is-finalizationregistry@1.0.2: + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + dev: true - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true - is-generator-function@1.0.10: + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: true - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 - - is-interactive@1.0.0: {} + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + dev: true - is-lower-case@1.1.3: + /is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} dependencies: lower-case: 1.1.4 + dev: true - is-map@2.0.2: {} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true - is-negative-zero@2.0.2: {} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true - is-number-object@1.0.7: + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true - is-path-cwd@2.2.0: {} + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true - is-path-inside@3.0.3: {} + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true - is-plain-obj@4.1.0: {} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + dev: true - is-regex@1.1.4: + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-set@2.0.2: {} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true - is-shared-array-buffer@1.0.2: + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + dev: true - is-stream@2.0.1: {} - - is-stream@3.0.0: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true - is-string@1.0.7: + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-symbol@1.0.4: + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true - is-typed-array@1.1.12: + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 + dev: true - is-unicode-supported@0.1.0: {} + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true - is-upper-case@1.1.2: + /is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} dependencies: upper-case: 1.1.3 + dev: true - is-weakmap@2.0.1: {} - - is-weakref@1.0.2: - dependencies: - call-bind: 1.0.5 + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true - is-weakset@2.0.2: + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + dev: true - is-wsl@2.2.0: + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: - is-docker: 2.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true - isarray@2.0.5: {} + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true - isbinaryfile@4.0.10: {} + /isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + dev: true - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true - iterator.prototype@1.1.2: + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true - jackspeak@2.3.6: + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 + dev: true - jju@1.4.0: {} + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@4.1.0: + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 + dev: true + + /jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + dev: true - jsesc@0.5.0: {} + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true - jsesc@2.5.2: {} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: true - jsesc@3.0.2: {} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true - json-parse-even-better-errors@2.3.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true - json-schema-traverse@0.4.1: {} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true - json-stable-stringify-without-jsonify@1.0.1: {} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true - json5@1.0.2: + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - json5@2.2.3: {} - - jsonfile@4.0.0: - optionalDependencies: - graceful-fs: 4.2.11 + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true - jsonfile@6.1.0: + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + dev: true - jsx-ast-utils@3.3.5: + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 + object.assign: 4.1.5 + object.values: 1.2.0 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true - language-subtag-registry@0.3.22: {} + /language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + dev: true - language-tags@1.0.9: + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 + dev: true - levn@0.4.1: + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: true - locate-path@5.0.0: + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 + dev: true - locate-path@6.0.0: + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: true - lodash.get@4.4.2: {} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: true - lodash.merge@4.6.2: {} + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - lodash@4.17.21: {} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true - log-symbols@3.0.0: + /log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} dependencies: chalk: 2.4.2 + dev: true - log-symbols@4.1.0: + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 + dev: true - loose-envify@1.4.0: + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 - lower-case-first@1.0.2: + /lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} dependencies: lower-case: 1.1.4 + dev: true - lower-case@1.1.4: {} + /lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + dev: true - lru-cache@10.2.0: {} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + dev: true - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: true - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-cache@7.18.3: {} + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + dev: true - make-error@1.3.6: {} + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: true - merge-stream@2.0.0: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true - merge2@1.4.1: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true - micromatch@4.0.5: + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 + dev: true - mimic-fn@2.1.0: {} - - mimic-fn@4.0.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true - min-indent@1.0.1: {} + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true - minimatch@3.1.2: + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + dev: true + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true - minimatch@9.0.3: + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 + dev: true - minimist@1.2.8: {} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true - minipass@7.0.4: {} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: true - mkdirp@0.5.6: + /mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - ms@2.1.2: {} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true - mute-stream@0.0.8: {} + /mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + dev: true - nanoid@3.3.7: {} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false - natural-compare@1.4.0: {} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true - neo-async@2.6.2: {} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true - netmask@2.0.2: {} + /netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + dev: true - next@14.2.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /next@14.2.6(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-57Su7RqXs5CBKKKOagt8gPhMM3CpjgbeQhrtei2KLAA1vTNm7jfKS+uDARkSW8ZETUflDCBIsUKGSyQdRs4U4g==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true dependencies: '@next/env': 14.2.6 '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001593 + caniuse-lite: 1.0.30001660 graceful-fs: 4.2.11 postcss: 8.4.31 react: 18.3.1 @@ -4810,14 +3737,19 @@ snapshots: transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: false - no-case@2.3.2: + /no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} dependencies: lower-case: 1.1.4 + dev: true - node-plop@0.26.3: + /node-plop@0.26.3: + resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} + engines: {node: '>=8.9.4'} dependencies: - '@babel/runtime-corejs3': 7.22.10 + '@babel/runtime-corejs3': 7.25.6 '@types/inquirer': 6.5.0 change-case: 3.1.0 del: 5.1.0 @@ -4828,463 +3760,724 @@ snapshots: lodash.get: 4.4.2 mkdirp: 0.5.6 resolve: 1.22.8 + dev: true - node-releases@2.0.13: {} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true - normalize-package-data@2.5.0: + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 + dev: true - npm-run-path@4.0.1: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: true - npm-run-path@5.1.0: - dependencies: - path-key: 4.0.0 + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true - object-assign@4.1.1: {} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + dev: true - object-inspect@1.13.1: {} + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + dev: true - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true - object.assign@4.1.4: + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true - object.entries@1.1.7: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - - object.fromentries@2.0.7: + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - object.groupby@1.0.1: + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - object.hasown@1.1.3: + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + dev: true - object.values@1.1.7: + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: true - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: true - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - open@9.1.0: - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - - optionator@0.9.3: + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 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 + dev: true - ora@4.1.1: + /ora@4.1.1: + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} + engines: {node: '>=8'} dependencies: chalk: 3.0.0 cli-cursor: 3.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 3.0.0 mute-stream: 0.0.8 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true - ora@5.4.1: + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + dev: true - os-tmpdir@1.0.2: {} + /os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + dev: true - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: true - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: true - p-locate@4.1.0: + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 + dev: true - p-locate@5.0.0: + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: true - p-map@3.0.0: + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} dependencies: aggregate-error: 3.1.0 + dev: true - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true - pac-proxy-agent@7.0.0: + /pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.0 - debug: 4.3.4 - get-uri: 6.0.1 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.1 - pac-resolver: 7.0.0 - socks-proxy-agent: 8.0.1 + agent-base: 7.1.1 + debug: 4.3.7 + get-uri: 6.0.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.4 transitivePeerDependencies: - supports-color + dev: true - pac-resolver@7.0.0: + /pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} dependencies: degenerator: 5.0.1 - ip: 1.1.8 netmask: 2.0.2 + dev: true - param-case@2.1.1: + /param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} dependencies: no-case: 2.3.2 + dev: true - parent-module@1.0.1: + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: true - pascal-case@2.0.1: + /pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 + dev: true - path-case@2.1.1: + /path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} dependencies: no-case: 2.3.2 + dev: true - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true - path-key@3.1.1: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true - path-key@4.0.0: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true - path-parse@1.0.7: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true - path-scurry@1.10.1: + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - path-type@4.0.0: {} + /picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picocolors@1.0.0: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true - picomatch@2.3.1: {} + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true - pluralize@8.0.0: {} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true - postcss@8.4.31: + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 + picocolors: 1.1.0 + source-map-js: 1.2.1 + dev: false - prelude-ls@1.2.1: {} + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true - prettier-plugin-packagejson@2.4.6(prettier@3.2.5): + /prettier-plugin-packagejson@2.5.2(prettier@3.3.3): + resolution: {integrity: sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true dependencies: - sort-package-json: 2.6.0 - synckit: 0.8.5 - optionalDependencies: - prettier: 3.2.5 + prettier: 3.3.3 + sort-package-json: 2.10.1 + synckit: 0.9.1 + dev: true - prettier@3.2.5: {} + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + dev: true - prop-types@15.8.1: + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + dev: true - proxy-agent@6.3.0: + /proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.1 + agent-base: 7.1.1 + debug: 4.3.7 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.5 lru-cache: 7.18.3 - pac-proxy-agent: 7.0.0 + pac-proxy-agent: 7.0.2 proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.1 + socks-proxy-agent: 8.0.4 transitivePeerDependencies: - supports-color + dev: true - proxy-from-env@1.1.0: {} + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: true - punycode@2.3.0: {} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true - rc@1.2.8: + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + dev: true - react-dom@18.3.1(react@18.3.1): + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 + dev: false - react-is@16.13.1: {} - - react@18.2.0: - dependencies: - loose-envify: 1.4.0 + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true - react@18.3.1: + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 + dev: false - read-pkg-up@7.0.1: + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: true - read-pkg@5.2.0: + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: true - readable-stream@3.6.2: + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: true - reflect.getprototypeof@1.0.4: + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 - - regenerator-runtime@0.14.0: {} - - regexp-tree@0.1.27: {} + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true - regexp.prototype.flags@1.5.1: + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true - registry-auth-token@3.3.2: + /registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} dependencies: rc: 1.2.8 safe-buffer: 5.2.1 + dev: true - registry-url@3.1.0: + /registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} dependencies: rc: 1.2.8 + dev: true - regjsparser@0.10.0: + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true dependencies: jsesc: 0.5.0 + dev: true - resolve-from@4.0.0: {} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true - resolve-pkg-maps@1.0.0: {} + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true - resolve@1.19.0: + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 + dev: true - resolve@1.22.8: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - resolve@2.0.0-next.5: + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - restore-cursor@3.1.0: + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 + dev: true - reusify@1.0.4: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true - rimraf@3.0.2: + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - run-applescript@5.0.0: - dependencies: - execa: 5.1.1 - - run-async@2.4.1: {} + /run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + dev: true - run-parallel@1.2.0: + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: true - rxjs@6.6.7: + /rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} dependencies: tslib: 1.14.1 + dev: true - rxjs@7.8.1: + /rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.2 + tslib: 2.7.0 + dev: true - safe-array-concat@1.0.1: + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 + dev: true - safe-buffer@5.2.1: {} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true - safe-regex-test@1.0.0: + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 + dev: true - safer-buffer@2.1.2: {} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true - scheduler@0.23.2: + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 + dev: false - semver@5.7.2: {} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true - sentence-case@2.1.1: + /sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 + dev: true - set-function-length@1.1.1: + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 gopd: 1.0.1 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true - set-function-name@2.0.1: + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: true - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true - side-channel@1.0.4: + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: true - signal-exit@3.0.7: {} + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true - signal-exit@4.1.0: {} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true - slash@4.0.0: {} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true - smart-buffer@4.2.0: {} + /smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + dev: true - snake-case@2.1.0: + /snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} dependencies: no-case: 2.3.2 + dev: true - socks-proxy-agent@8.0.1: + /socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} dependencies: - agent-base: 7.1.0 - debug: 4.3.4 - socks: 2.7.1 + agent-base: 7.1.1 + debug: 4.3.7 + socks: 2.8.3 transitivePeerDependencies: - supports-color + dev: true - socks@2.7.1: + /socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} dependencies: - ip: 2.0.0 + ip-address: 9.0.5 smart-buffer: 4.2.0 + dev: true - sort-object-keys@1.1.3: {} + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true - sort-package-json@2.6.0: + /sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -5292,327 +4485,588 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 + semver: 7.6.3 sort-object-keys: 1.1.3 + dev: true - source-map-js@1.0.2: {} + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + dev: false - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true - spdx-correct@3.2.0: + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.20 + dev: true - spdx-exceptions@2.3.0: {} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + dev: true - spdx-expression-parse@3.0.1: + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 + dev: true - spdx-license-ids@3.0.16: {} + /spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + dev: true + + /sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + dev: true + + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + dependencies: + internal-slot: 1.0.7 + dev: true - streamsearch@1.1.0: {} + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: true - string-width@5.1.2: + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 + dev: true + + /string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true - string.prototype.matchall@4.0.10: + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + + /string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true - string.prototype.trim@1.2.8: + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimend@1.0.7: + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimstart@1.0.7: + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - string_decoder@1.3.0: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: true - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: true - strip-ansi@7.1.0: + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} dependencies: - ansi-regex: 6.0.1 - - strip-bom@3.0.0: {} + ansi-regex: 6.1.0 + dev: true - strip-final-newline@2.0.0: {} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true - strip-final-newline@3.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true - strip-indent@3.0.0: + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true - strip-json-comments@2.0.1: {} + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: true - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true - styled-jsx@5.1.1(react@18.3.1): + /styled-jsx@5.1.1(react@18.3.1): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true dependencies: client-only: 0.0.1 react: 18.3.1 + dev: false - supports-color@5.5.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 + dev: true - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: true - supports-preserve-symlinks-flag@1.0.0: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true - swap-case@1.1.2: + /swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} dependencies: lower-case: 1.1.4 upper-case: 1.1.3 + dev: true - synckit@0.8.5: + /synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/utils': 2.4.2 - tslib: 2.6.2 + '@pkgr/core': 0.1.1 + tslib: 2.7.0 + dev: true - tapable@2.2.1: {} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true - text-table@0.2.0: {} + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - through@2.3.8: {} + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true - tinycolor2@1.6.0: {} + /tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + dev: true - tinygradient@1.1.5: + /tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} dependencies: '@types/tinycolor2': 1.4.6 tinycolor2: 1.6.0 + dev: true - title-case@2.1.1: + /title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} dependencies: no-case: 2.3.2 upper-case: 1.1.3 + dev: true - titleize@3.0.0: {} - - tmp@0.0.33: + /tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} dependencies: os-tmpdir: 1.0.2 + dev: true - to-fast-properties@2.0.0: {} + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: true - ts-api-utils@1.0.2(typescript@5.3.3): + /ts-api-utils@1.3.0(typescript@5.6.2): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.6.2 + dev: true - ts-node@10.9.1(@types/node@20.11.24)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.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 dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.9 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.24 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 20.16.5 + acorn: 8.12.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.3.3 + typescript: 5.6.2 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: true - tsconfig-paths@3.14.2: + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true - tslib@1.14.1: {} + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true - tslib@2.6.2: {} + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.6.2): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.6.2 + dev: true - turbo-darwin-64@2.0.7: + /turbo-darwin-64@2.1.2: + resolution: {integrity: sha512-3TEBxHWh99h2yIzkuIigMEOXt/ItYQp0aPiJjPd1xN4oDcsKK5AxiFKPH9pdtfIBzYsY59kQhZiFj0ELnSP7Bw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - turbo-darwin-arm64@2.0.7: + /turbo-darwin-arm64@2.1.2: + resolution: {integrity: sha512-he0miWNq2WxJzsH82jS2Z4MXpnkzn9SH8a79iPXiJkq25QREImucscM4RPasXm8wARp91pyysJMq6aasD45CeA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - turbo-linux-64@2.0.7: + /turbo-linux-64@2.1.2: + resolution: {integrity: sha512-fKUBcc0rK8Vdqv5a/E3CSpMBLG1bzwv+Q0Q83F8fG2ZfNCNKGbcEYABdonNZkkx141Rj03cZQFCgxu3MVEGU+A==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - turbo-linux-arm64@2.0.7: + /turbo-linux-arm64@2.1.2: + resolution: {integrity: sha512-sV8Bpmm0WiuxgbhxymcC7wSsuxfBBieI98GegSwbr/bs1ANAgzCg93urIrdKdQ3/b31zZxQwcaP4FBF1wx1Qdg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - turbo-windows-64@2.0.7: + /turbo-windows-64@2.1.2: + resolution: {integrity: sha512-wcmIJZI9ORT9ykHGliFE6kWRQrlH930QGSjSgWC8uFChFFuOyUlvC7ttcxuSvU9VqC7NF4C+GVAcFJQ8lTjN7g==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - turbo-windows-arm64@2.0.7: + /turbo-windows-arm64@2.1.2: + resolution: {integrity: sha512-zdnXjrhk7YO6CP+Q5wPueEvOCLH4lDa6C4rrwiakcWcPgcQGbVozJlo4uaQ6awo8HLWQEvOwu84RkWTdLAc/Hw==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - turbo@2.0.7: + /turbo@2.1.2: + resolution: {integrity: sha512-Jb0rbU4iHEVQ18An/YfakdIv9rKnd3zUfSE117EngrfWXFHo3RndVH96US3GsT8VHpwTncPePDBT2t06PaFLrw==} + hasBin: true optionalDependencies: - turbo-darwin-64: 2.0.7 - turbo-darwin-arm64: 2.0.7 - turbo-linux-64: 2.0.7 - turbo-linux-arm64: 2.0.7 - turbo-windows-64: 2.0.7 - turbo-windows-arm64: 2.0.7 - - type-check@0.4.0: + turbo-darwin-64: 2.1.2 + turbo-darwin-arm64: 2.1.2 + turbo-linux-64: 2.1.2 + turbo-linux-arm64: 2.1.2 + turbo-windows-64: 2.1.2 + turbo-windows-arm64: 2.1.2 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 + dev: true - type-fest@0.20.2: {} + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true - type-fest@0.21.3: {} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true - type-fest@0.6.0: {} + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true - type-fest@0.8.1: {} + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true - typed-array-buffer@1.0.0: + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-length@1.0.0: + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-offset@1.0.0: + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-length@1.0.4: + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 - - typescript@5.3.3: {} + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true - typescript@5.4.5: {} + /typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true - uglify-js@3.17.4: + /uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + requiresBuild: true + dev: true optional: true - unbox-primitive@1.0.2: + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true - undici-types@5.26.5: {} - - universalify@0.1.2: {} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + dev: true - universalify@2.0.0: {} - - untildify@4.0.0: {} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true - update-browserslist-db@1.0.13(browserslist@4.22.1): + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 - picocolors: 1.0.0 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 + dev: true - update-check@1.5.4: + /update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} dependencies: registry-auth-token: 3.3.2 registry-url: 3.1.0 + dev: true - upper-case-first@1.1.2: + /upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} dependencies: upper-case: 1.1.3 + dev: true - upper-case@1.1.3: {} + /upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + dev: true - uri-js@4.4.1: + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 + dev: true - util-deprecate@1.0.2: {} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true - v8-compile-cache-lib@3.0.1: {} + /v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + dev: true - validate-npm-package-license@3.0.4: + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + dev: true - validate-npm-package-name@5.0.0: - dependencies: - builtins: 5.0.1 + /validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - wcwidth@1.0.1: + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 + dev: true - which-boxed-primitive@1.0.2: + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true - which-builtin-type@1.1.3: + /which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -5621,54 +5075,89 @@ snapshots: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true - which-collection@1.0.1: + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true - which-typed-array@1.1.13: + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + dev: true - wordwrap@1.0.0: {} + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + dev: true - wrap-ansi@6.2.0: + /wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrap-ansi@7.0.0: + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 + dev: true - wrap-ansi@8.1.0: + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 + dev: true - wrappy@1.0.2: {} - - yallist@3.1.1: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true - yallist@4.0.0: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true - yn@3.1.1: {} + /yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + dev: true - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/examples/kitchen-sink/apps/storefront/next-env.d.ts b/examples/kitchen-sink/apps/storefront/next-env.d.ts index 4f11a03dc6cc3..40c3d68096c27 100644 --- a/examples/kitchen-sink/apps/storefront/next-env.d.ts +++ b/examples/kitchen-sink/apps/storefront/next-env.d.ts @@ -2,4 +2,4 @@ /// // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/kitchen-sink/pnpm-lock.yaml b/examples/kitchen-sink/pnpm-lock.yaml index 776bc870892cb..bf10e13cae602 100644 --- a/examples/kitchen-sink/pnpm-lock.yaml +++ b/examples/kitchen-sink/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -10,10 +10,10 @@ importers: devDependencies: prettier: specifier: ^3.2.5 - version: 3.2.5 + version: 3.3.3 turbo: specifier: ^2.0.5 - version: 2.0.5 + version: 2.1.2 apps/admin: dependencies: @@ -22,10 +22,10 @@ importers: version: link:../../packages/ui react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -35,19 +35,19 @@ importers: version: link:../../packages/config-typescript '@types/react': specifier: ^18.2.62 - version: 18.2.62 + version: 18.3.6 '@types/react-dom': specifier: ^18.2.19 - version: 18.2.19 + version: 18.3.0 '@vitejs/plugin-react': specifier: ^4.2.1 - version: 4.2.1(vite@5.1.4) + version: 4.3.1(vite@5.4.6) typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 vite: specifier: ^5.1.4 - version: 5.1.4 + version: 5.4.6 apps/api: dependencies: @@ -56,13 +56,13 @@ importers: version: link:../../packages/logger body-parser: specifier: ^1.20.2 - version: 1.20.2 + version: 1.20.3 cors: specifier: ^2.8.5 version: 2.8.5 express: specifier: ^4.18.3 - version: 4.18.3 + version: 4.21.0 morgan: specifier: ^1.10.0 version: 1.10.0 @@ -87,92 +87,92 @@ importers: version: 4.17.21 '@types/jest': specifier: ^29.5.12 - version: 29.5.12 + version: 29.5.13 '@types/morgan': specifier: ^1.9.9 version: 1.9.9 '@types/node': specifier: ^20.11.24 - version: 20.11.24 + version: 20.16.5 '@types/supertest': specifier: ^6.0.2 version: 6.0.2 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.24) + version: 29.7.0(@types/node@20.16.5) supertest: specifier: ^6.3.4 version: 6.3.4 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.3.3) + version: 8.2.4(typescript@5.6.2) typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 apps/blog: dependencies: '@remix-run/node': specifier: ^2.9.2 - version: 2.9.2(typescript@5.3.3) + version: 2.12.0(typescript@5.6.2) '@remix-run/react': specifier: ^2.9.2 - version: 2.9.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) + version: 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2) '@remix-run/server-runtime': specifier: ^2.9.2 - version: 2.9.2(typescript@5.3.3) + version: 2.12.0(typescript@5.6.2) '@repo/ui': specifier: workspace:* version: link:../../packages/ui '@vercel/analytics': specifier: ^1.2.2 - version: 1.3.1(react@18.2.0) + version: 1.3.1(react@18.3.1) '@vercel/remix': specifier: 2.9.2-patch.2 - version: 2.9.2-patch.2(@remix-run/dev@2.9.2)(@remix-run/node@2.9.2)(@remix-run/server-runtime@2.9.2)(react-dom@18.2.0)(react@18.2.0) + version: 2.9.2-patch.2(@remix-run/dev@2.12.0)(@remix-run/node@2.12.0)(@remix-run/server-runtime@2.12.0)(react-dom@18.3.1)(react@18.3.1) isbot: specifier: ^4 version: 4.4.0 react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) devDependencies: '@remix-run/dev': specifier: ^2.9.2 - version: 2.9.2(@remix-run/react@2.9.2)(typescript@5.3.3)(vite@5.1.4) + version: 2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6) '@remix-run/eslint-config': specifier: ^2.9.2 - version: 2.10.0(eslint@8.57.0)(react@18.2.0)(typescript@5.3.3) + version: 2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.6.2) '@types/react': specifier: ^18.2.20 - version: 18.2.62 + version: 18.3.6 '@types/react-dom': specifier: ^18.2.7 - version: 18.2.19 + version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: ^6.7.4 - version: 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) '@typescript-eslint/parser': specifier: ^6.7.4 - version: 6.12.0(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(eslint@8.57.1)(typescript@5.6.2) autoprefixer: specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.38) + version: 10.4.20(postcss@8.4.47) eslint: specifier: ^8.38.0 - version: 8.57.0 + version: 8.57.1 typescript: specifier: ^5.1.6 - version: 5.3.3 + version: 5.6.2 vite: specifier: ^5.1.0 - version: 5.1.4 + version: 5.4.6 vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.3.2(typescript@5.3.3)(vite@5.1.4) + version: 4.3.2(typescript@5.6.2)(vite@5.4.6) apps/storefront: dependencies: @@ -184,17 +184,17 @@ importers: version: link:../../packages/ui next: specifier: ^14.1.1 - version: 14.1.1(react-dom@18.2.0)(react@18.2.0) + version: 14.2.11(react-dom@18.3.1)(react@18.3.1) react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) devDependencies: '@next/eslint-plugin-next': specifier: ^14.1.1 - version: 14.1.1 + version: 14.2.11 '@repo/eslint-config': specifier: workspace:* version: link:../../packages/config-eslint @@ -203,34 +203,34 @@ importers: version: link:../../packages/config-typescript '@types/node': specifier: ^20.11.24 - version: 20.11.24 + version: 20.16.5 '@types/react': specifier: ^18.2.62 - version: 18.2.62 + version: 18.3.6 '@types/react-dom': specifier: ^18.2.19 - version: 18.2.19 + version: 18.3.0 typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 packages/config-eslint: devDependencies: '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2) eslint-config-turbo: specifier: ^2.0.0 - version: 2.0.0(eslint@8.57.0) + version: 2.1.2(eslint@8.57.1) eslint-plugin-mdx: specifier: ^3.1.5 - version: 3.1.5(eslint@8.57.0) + version: 3.1.5(eslint@8.57.1) eslint-plugin-only-warn: specifier: ^1.1.0 version: 1.1.0 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.0)(typescript@5.3.3) + version: 0.8.0(eslint@8.57.1)(typescript@5.6.2) packages/config-typescript: {} @@ -238,7 +238,7 @@ importers: dependencies: ts-jest: specifier: ^29.1.2 - version: 29.1.2(@babel/core@7.24.0)(jest@29.7.0)(typescript@5.3.3) + version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.6.2) devDependencies: jest-environment-jsdom: specifier: ^29.7.0 @@ -257,19 +257,19 @@ importers: version: link:../config-typescript '@types/jest': specifier: ^29.5.12 - version: 29.5.12 + version: 29.5.13 '@types/node': specifier: ^20.11.24 - version: 20.11.24 + version: 20.16.5 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.24) + version: 29.7.0(@types/node@20.16.5) tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.3.3) + version: 8.2.4(typescript@5.6.2) typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 packages/ui: devDependencies: @@ -284,859 +284,1232 @@ importers: version: link:../config-typescript '@types/jest': specifier: ^29.5.12 - version: 29.5.12 + version: 29.5.13 '@types/node': specifier: ^20.11.24 - version: 20.11.24 + version: 20.16.5 '@types/react': specifier: ^18.2.62 - version: 18.2.62 + version: 18.3.6 '@types/react-dom': specifier: ^18.2.19 - version: 18.2.19 + version: 18.3.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.24) + version: 29.7.0(@types/node@20.16.5) react: specifier: ^18.2.0 - version: 18.2.0 + version: 18.3.1 react-dom: specifier: ^18.2.0 - version: 18.2.0(react@18.2.0) + version: 18.3.1(react@18.3.1) tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.3.3) + version: 8.2.4(typescript@5.6.2) typescript: specifier: ^5.3.3 - version: 5.3.3 + version: 5.6.2 packages: - '@aashutoshrathi/word-wrap@1.2.6': - resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} - engines: {node: '>=0.10.0'} - - '@ampproject/remapping@2.2.1': - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} - engines: {node: '>=6.0.0'} - - '@ampproject/remapping@2.3.0': + /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - '@babel/code-frame@7.23.5': - resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} - engines: {node: '>=6.9.0'} - - '@babel/code-frame@7.24.7': + /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.1.0 - '@babel/compat-data@7.23.5': - resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} - engines: {node: '>=6.9.0'} - - '@babel/core@7.23.7': - resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==} + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.0': - resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/eslint-parser@7.23.3': - resolution: {integrity: sha512-9bTuNlyx7oSstodm1cR1bECj4fkiknsDa1YniISkJemMY3DGhJNYBECbe6QD/q54mp2J8VO66jW3/7uP//iFCw==} + /@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.1): + resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 - - '@babel/generator@7.23.6': - resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} - engines: {node: '>=6.9.0'} + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + dependencies: + '@babel/core': 7.25.2 + '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 + eslint: 8.57.1 + eslint-visitor-keys: 2.1.0 + semver: 6.3.1 + dev: true - '@babel/generator@7.24.7': - resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 - '@babel/helper-annotate-as-pure@7.24.7': + /@babel/helper-annotate-as-pure@7.24.7: resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.22.15': - resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} + /@babel/helper-create-class-features-plugin@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/helper-replace-supers': 7.25.0(@babel/core@7.25.2) + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/traverse': 7.25.6 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.23.0': - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.22.15': - resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + /@babel/helper-member-expression-to-functions@7.24.8: + resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-imports@7.24.7': + /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-transforms@7.23.3': - resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-plugin-utils@7.22.5': - resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + /@babel/helper-optimise-call-expression@7.24.7: + resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 - '@babel/helper-plugin-utils@7.24.7': - resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.22.20': - resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + /@babel/helper-replace-supers@7.25.0(@babel/core@7.25.2): + resolution: {integrity: sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-member-expression-to-functions': 7.24.8 + '@babel/helper-optimise-call-expression': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-string-parser@7.23.4': - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-string-parser@7.24.7': - resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + /@babel/helper-skip-transparent-expression-wrappers@7.24.7: + resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': + /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-validator-option@7.24.7': - resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.23.7': - resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==} - engines: {node: '>=6.9.0'} - - '@babel/helpers@7.24.0': - resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 - '@babel/highlight@7.24.7': + /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.1.0 - '@babel/parser@7.23.6': - resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} - engines: {node: '>=6.0.0'} - - '@babel/parser@7.24.0': - resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} - engines: {node: '>=6.0.0'} - - '@babel/parser@7.24.7': - resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.25.6 - '@babel/plugin-syntax-async-generators@7.8.4': + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.2): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-bigint@7.8.3': + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13': + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.2): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-decorators@7.23.3': - resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.2): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + /@babel/plugin-syntax-decorators@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + /@babel/plugin-syntax-import-attributes@7.25.6(@babel/core@7.25.2): + resolution: {integrity: sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==} + engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.23.3': - resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} - engines: {node: '>=6.9.0'} + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.2): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.2): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx@7.24.7': + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4': + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.2): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3': + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3': + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-chaining@7.8.3': + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.2): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.2): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5': + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.2): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript@7.23.3': - resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + /@babel/plugin-syntax-typescript@7.25.4(@babel/core@7.25.2): + resolution: {integrity: sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-commonjs@7.23.3': - resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + /@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.25.2): + resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-simple-access': 7.24.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-react-display-name@7.24.7': + /@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-transform-react-jsx-development@7.24.7': + /@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + dev: true - '@babel/plugin-transform-react-jsx-self@7.23.3': - resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-transform-react-jsx-source@7.23.3': - resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} + /@babel/plugin-transform-react-jsx@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-KQsqEAVBpU82NM/B/N9j9WOdphom1SZH3R+2V7INrQUH+V9EBFwZsEJl8eBIVeQE62FxJCc70jzEZwqU7RcVqA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/plugin-transform-react-pure-annotations@7.24.7': + /@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-transform-typescript@7.23.4': - resolution: {integrity: sha512-39hCCOl+YUAyMOu6B9SmUTiHUU0t/CxJNUmY3qRdJujbqi+lrQcL11ysYUsAvFWPBdhihrv1z0oRG84Yr3dODQ==} + /@babel/plugin-transform-typescript@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-annotate-as-pure': 7.24.7 + '@babel/helper-create-class-features-plugin': 7.25.4(@babel/core@7.25.2) + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/preset-react@7.24.7': + /@babel/preset-react@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx': 7.25.2(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color + dev: true - '@babel/preset-typescript@7.23.3': - resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} + /@babel/preset-typescript@7.24.7(@babel/core@7.25.2): + resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-validator-option': 7.24.8 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.25.2) + '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2) + transitivePeerDependencies: + - supports-color - '@babel/runtime@7.23.4': - resolution: {integrity: sha512-2Yv65nlWnWlSpe3fXEyX5i7fx5kIKo4Qbcj+hMO0odwaneFjfXw5fdum+4yL20O0QiaHpia0cYQ9xpNMqrBwHg==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.22.15': - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} - engines: {node: '>=6.9.0'} - - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} - engines: {node: '>=6.9.0'} - - '@babel/traverse@7.23.7': - resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} + /@babel/runtime@7.25.6: + resolution: {integrity: sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==} engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 - '@babel/traverse@7.24.0': - resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 - '@babel/traverse@7.24.7': - resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color - '@babel/types@7.23.6': - resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} - engines: {node: '>=6.9.0'} + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@babel/types@7.24.7': - resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} - engines: {node: '>=6.9.0'} + /@emotion/hash@0.9.2: + resolution: {integrity: sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==} - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + /@esbuild/aix-ppc64@0.21.5: + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + optional: true - '@emotion/hash@0.9.1': - resolution: {integrity: sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==} + /@esbuild/aix-ppc64@0.23.1: + resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm64@0.17.6': + /@esbuild/android-arm64@0.17.6: resolution: {integrity: sha512-YnYSCceN/dUzUr5kdtUzB+wZprCafuD89Hs0Aqv9QSdwhYQybhXTaSTcrl6X/aWThn1a/j0eEpUBGOE7269REg==} engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-arm64@0.18.20': - resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} + /@esbuild/android-arm64@0.21.5: + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-arm64@0.19.7': - resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} - engines: {node: '>=12'} + /@esbuild/android-arm64@0.23.1: + resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} + engines: {node: '>=18'} cpu: [arm64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm@0.17.6': + /@esbuild/android-arm@0.17.6: resolution: {integrity: sha512-bSC9YVUjADDy1gae8RrioINU6e1lCkg3VGVwm0QQ2E1CWcC4gnMce9+B6RpxuSsrsXsk1yojn7sp1fnG8erE2g==} engines: {node: '>=12'} cpu: [arm] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-arm@0.18.20': - resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} + /@esbuild/android-arm@0.21.5: + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} engines: {node: '>=12'} cpu: [arm] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-arm@0.19.7': - resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} - engines: {node: '>=12'} + /@esbuild/android-arm@0.23.1: + resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} + engines: {node: '>=18'} cpu: [arm] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-x64@0.17.6': + /@esbuild/android-x64@0.17.6: resolution: {integrity: sha512-MVcYcgSO7pfu/x34uX9u2QIZHmXAB7dEiLQC5bBl5Ryqtpj9lT2sg3gNDEsrPEmimSJW2FXIaxqSQ501YLDsZQ==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-x64@0.18.20': - resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} + /@esbuild/android-x64@0.21.5: + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true + optional: true - '@esbuild/android-x64@0.19.7': - resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} - engines: {node: '>=12'} + /@esbuild/android-x64@0.23.1: + resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} + engines: {node: '>=18'} cpu: [x64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-arm64@0.17.6': + /@esbuild/darwin-arm64@0.17.6: resolution: {integrity: sha512-bsDRvlbKMQMt6Wl08nHtFz++yoZHsyTOxnjfB2Q95gato+Yi4WnRl13oC2/PJJA9yLCoRv9gqT/EYX0/zDsyMA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true + optional: true - '@esbuild/darwin-arm64@0.18.20': - resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} + /@esbuild/darwin-arm64@0.21.5: + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true + optional: true - '@esbuild/darwin-arm64@0.19.7': - resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} - engines: {node: '>=12'} + /@esbuild/darwin-arm64@0.23.1: + resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} + engines: {node: '>=18'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-x64@0.17.6': + /@esbuild/darwin-x64@0.17.6: resolution: {integrity: sha512-xh2A5oPrYRfMFz74QXIQTQo8uA+hYzGWJFoeTE8EvoZGHb+idyV4ATaukaUvnnxJiauhs/fPx3vYhU4wiGfosg==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true + optional: true - '@esbuild/darwin-x64@0.18.20': - resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} + /@esbuild/darwin-x64@0.21.5: + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true + optional: true - '@esbuild/darwin-x64@0.19.7': - resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} - engines: {node: '>=12'} + /@esbuild/darwin-x64@0.23.1: + resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} + engines: {node: '>=18'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-arm64@0.17.6': + /@esbuild/freebsd-arm64@0.17.6: resolution: {integrity: sha512-EnUwjRc1inT4ccZh4pB3v1cIhohE2S4YXlt1OvI7sw/+pD+dIE4smwekZlEPIwY6PhU6oDWwITrQQm5S2/iZgg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true + optional: true - '@esbuild/freebsd-arm64@0.18.20': - resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} + /@esbuild/freebsd-arm64@0.21.5: + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true + optional: true - '@esbuild/freebsd-arm64@0.19.7': - resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} - engines: {node: '>=12'} + /@esbuild/freebsd-arm64@0.23.1: + resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} + engines: {node: '>=18'} cpu: [arm64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-x64@0.17.6': + /@esbuild/freebsd-x64@0.17.6: resolution: {integrity: sha512-Uh3HLWGzH6FwpviUcLMKPCbZUAFzv67Wj5MTwK6jn89b576SR2IbEp+tqUHTr8DIl0iDmBAf51MVaP7pw6PY5Q==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true + optional: true - '@esbuild/freebsd-x64@0.18.20': - resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} + /@esbuild/freebsd-x64@0.21.5: + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true + optional: true - '@esbuild/freebsd-x64@0.19.7': - resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} - engines: {node: '>=12'} + /@esbuild/freebsd-x64@0.23.1: + resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} + engines: {node: '>=18'} cpu: [x64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm64@0.17.6': + /@esbuild/linux-arm64@0.17.6: resolution: {integrity: sha512-bUR58IFOMJX523aDVozswnlp5yry7+0cRLCXDsxnUeQYJik1DukMY+apBsLOZJblpH+K7ox7YrKrHmJoWqVR9w==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-arm64@0.18.20': - resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} + /@esbuild/linux-arm64@0.21.5: + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-arm64@0.19.7': - resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} - engines: {node: '>=12'} + /@esbuild/linux-arm64@0.23.1: + resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} + engines: {node: '>=18'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm@0.17.6': + /@esbuild/linux-arm@0.17.6: resolution: {integrity: sha512-7YdGiurNt7lqO0Bf/U9/arrPWPqdPqcV6JCZda4LZgEn+PTQ5SMEI4MGR52Bfn3+d6bNEGcWFzlIxiQdS48YUw==} engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-arm@0.18.20': - resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} + /@esbuild/linux-arm@0.21.5: + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-arm@0.19.7': - resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} - engines: {node: '>=12'} + /@esbuild/linux-arm@0.23.1: + resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} + engines: {node: '>=18'} cpu: [arm] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ia32@0.17.6': + /@esbuild/linux-ia32@0.17.6: resolution: {integrity: sha512-ujp8uoQCM9FRcbDfkqECoARsLnLfCUhKARTP56TFPog8ie9JG83D5GVKjQ6yVrEVdMie1djH86fm98eY3quQkQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-ia32@0.18.20': - resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} + /@esbuild/linux-ia32@0.21.5: + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-ia32@0.19.7': - resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} - engines: {node: '>=12'} + /@esbuild/linux-ia32@0.23.1: + resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} + engines: {node: '>=18'} cpu: [ia32] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-loong64@0.17.6': + /@esbuild/linux-loong64@0.17.6: resolution: {integrity: sha512-y2NX1+X/Nt+izj9bLoiaYB9YXT/LoaQFYvCkVD77G/4F+/yuVXYCWz4SE9yr5CBMbOxOfBcy/xFL4LlOeNlzYQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-loong64@0.18.20': - resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} + /@esbuild/linux-loong64@0.21.5: + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-loong64@0.19.7': - resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} - engines: {node: '>=12'} + /@esbuild/linux-loong64@0.23.1: + resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} + engines: {node: '>=18'} cpu: [loong64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-mips64el@0.17.6': + /@esbuild/linux-mips64el@0.17.6: resolution: {integrity: sha512-09AXKB1HDOzXD+j3FdXCiL/MWmZP0Ex9eR8DLMBVcHorrWJxWmY8Nms2Nm41iRM64WVx7bA/JVHMv081iP2kUA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-mips64el@0.18.20': - resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} + /@esbuild/linux-mips64el@0.21.5: + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-mips64el@0.19.7': - resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} - engines: {node: '>=12'} + /@esbuild/linux-mips64el@0.23.1: + resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} + engines: {node: '>=18'} cpu: [mips64el] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ppc64@0.17.6': + /@esbuild/linux-ppc64@0.17.6: resolution: {integrity: sha512-AmLhMzkM8JuqTIOhxnX4ubh0XWJIznEynRnZAVdA2mMKE6FAfwT2TWKTwdqMG+qEaeyDPtfNoZRpJbD4ZBv0Tg==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-ppc64@0.18.20': - resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} + /@esbuild/linux-ppc64@0.21.5: + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-ppc64@0.19.7': - resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} - engines: {node: '>=12'} + /@esbuild/linux-ppc64@0.23.1: + resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} + engines: {node: '>=18'} cpu: [ppc64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-riscv64@0.17.6': + /@esbuild/linux-riscv64@0.17.6: resolution: {integrity: sha512-Y4Ri62PfavhLQhFbqucysHOmRamlTVK10zPWlqjNbj2XMea+BOs4w6ASKwQwAiqf9ZqcY9Ab7NOU4wIgpxwoSQ==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-riscv64@0.18.20': - resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} + /@esbuild/linux-riscv64@0.21.5: + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-riscv64@0.19.7': - resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} - engines: {node: '>=12'} + /@esbuild/linux-riscv64@0.23.1: + resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} + engines: {node: '>=18'} cpu: [riscv64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-s390x@0.17.6': + /@esbuild/linux-s390x@0.17.6: resolution: {integrity: sha512-SPUiz4fDbnNEm3JSdUW8pBJ/vkop3M1YwZAVwvdwlFLoJwKEZ9L98l3tzeyMzq27CyepDQ3Qgoba44StgbiN5Q==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-s390x@0.18.20': - resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} + /@esbuild/linux-s390x@0.21.5: + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-s390x@0.19.7': - resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} - engines: {node: '>=12'} + /@esbuild/linux-s390x@0.23.1: + resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} + engines: {node: '>=18'} cpu: [s390x] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-x64@0.17.6': + /@esbuild/linux-x64@0.17.6: resolution: {integrity: sha512-a3yHLmOodHrzuNgdpB7peFGPx1iJ2x6m+uDvhP2CKdr2CwOaqEFMeSqYAHU7hG+RjCq8r2NFujcd/YsEsFgTGw==} engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-x64@0.18.20': - resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} + /@esbuild/linux-x64@0.21.5: + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true + optional: true - '@esbuild/linux-x64@0.19.7': - resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} - engines: {node: '>=12'} + /@esbuild/linux-x64@0.23.1: + resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} + engines: {node: '>=18'} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/netbsd-x64@0.17.6': + /@esbuild/netbsd-x64@0.17.6: resolution: {integrity: sha512-EanJqcU/4uZIBreTrnbnre2DXgXSa+Gjap7ifRfllpmyAU7YMvaXmljdArptTHmjrkkKm9BK6GH5D5Yo+p6y5A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true + optional: true - '@esbuild/netbsd-x64@0.18.20': - resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} + /@esbuild/netbsd-x64@0.21.5: + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true + optional: true - '@esbuild/netbsd-x64@0.19.7': - resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} - engines: {node: '>=12'} + /@esbuild/netbsd-x64@0.23.1: + resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} + engines: {node: '>=18'} cpu: [x64] os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-arm64@0.23.1: + resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/openbsd-x64@0.17.6': + /@esbuild/openbsd-x64@0.17.6: resolution: {integrity: sha512-xaxeSunhQRsTNGFanoOkkLtnmMn5QbA0qBhNet/XLVsc+OVkpIWPHcr3zTW2gxVU5YOHFbIHR9ODuaUdNza2Vw==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true + optional: true - '@esbuild/openbsd-x64@0.18.20': - resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} + /@esbuild/openbsd-x64@0.21.5: + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true + optional: true - '@esbuild/openbsd-x64@0.19.7': - resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} - engines: {node: '>=12'} + /@esbuild/openbsd-x64@0.23.1: + resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} + engines: {node: '>=18'} cpu: [x64] os: [openbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/sunos-x64@0.17.6': + /@esbuild/sunos-x64@0.17.6: resolution: {integrity: sha512-gnMnMPg5pfMkZvhHee21KbKdc6W3GR8/JuE0Da1kjwpK6oiFU3nqfHuVPgUX2rsOx9N2SadSQTIYV1CIjYG+xw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true + optional: true - '@esbuild/sunos-x64@0.18.20': - resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} + /@esbuild/sunos-x64@0.21.5: + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true + optional: true - '@esbuild/sunos-x64@0.19.7': - resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} - engines: {node: '>=12'} + /@esbuild/sunos-x64@0.23.1: + resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} + engines: {node: '>=18'} cpu: [x64] os: [sunos] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-arm64@0.17.6': + /@esbuild/win32-arm64@0.17.6: resolution: {integrity: sha512-G95n7vP1UnGJPsVdKXllAJPtqjMvFYbN20e8RK8LVLhlTiSOH1sd7+Gt7rm70xiG+I5tM58nYgwWrLs6I1jHqg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-arm64@0.18.20': - resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} + /@esbuild/win32-arm64@0.21.5: + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-arm64@0.19.7': - resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} - engines: {node: '>=12'} + /@esbuild/win32-arm64@0.23.1: + resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} + engines: {node: '>=18'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-ia32@0.17.6': + /@esbuild/win32-ia32@0.17.6: resolution: {integrity: sha512-96yEFzLhq5bv9jJo5JhTs1gI+1cKQ83cUpyxHuGqXVwQtY5Eq54ZEsKs8veKtiKwlrNimtckHEkj4mRh4pPjsg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-ia32@0.18.20': - resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} + /@esbuild/win32-ia32@0.21.5: + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-ia32@0.19.7': - resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} - engines: {node: '>=12'} + /@esbuild/win32-ia32@0.23.1: + resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} + engines: {node: '>=18'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-x64@0.17.6': + /@esbuild/win32-x64@0.17.6: resolution: {integrity: sha512-n6d8MOyUrNp6G4VSpRcgjs5xj4A91svJSaiwLIDWVWEsZtpN5FA9NlBbZHDmAJc2e8e6SF4tkBD3HAvPF+7igA==} engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-x64@0.18.20': - resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} + /@esbuild/win32-x64@0.21.5: + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true + optional: true - '@esbuild/win32-x64@0.19.7': - resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} - engines: {node: '>=12'} + /@esbuild/win32-x64@0.23.1: + resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} + engines: {node: '>=18'} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@eslint-community/eslint-utils@4.4.0': + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + dev: true - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + /@eslint-community/regexpp@4.11.1: + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true - '@eslint/eslintrc@2.1.4': + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.7 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.2 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + /@eslint/js@8.57.1: + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + /@humanwhocodes/config-array@0.13.0: + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true - '@humanwhocodes/module-importer@1.0.1': + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} + dev: true - '@humanwhocodes/object-schema@2.0.2': - resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead + dev: true - '@isaacs/cliui@8.0.2': + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + 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 - '@istanbuljs/load-nyc-config@1.1.0': + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} + 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': + /@istanbuljs/schema@0.1.3: resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} engines: {node: '>=8'} - '@jest/console@29.7.0': + /@jest/console@29.7.0: resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': 29.6.3 + '@types/node': 20.16.5 + chalk: 4.1.2 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + slash: 3.0.0 - '@jest/core@29.7.0': + /@jest/core@29.7.0: resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1144,28 +1517,87 @@ packages: peerDependenciesMeta: node-notifier: optional: true + dependencies: + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.16.5 + 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@20.16.5) + 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 + 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 + 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': + /@jest/environment@29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.16.5 + jest-mock: 29.7.0 - '@jest/expect-utils@29.7.0': + /@jest/expect-utils@29.7.0: resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 - '@jest/expect@29.7.0': + /@jest/expect@29.7.0: resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color - '@jest/fake-timers@29.7.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} + dependencies: + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 + '@types/node': 20.16.5 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 - '@jest/globals@29.7.0': + /@jest/globals@29.7.0: resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color - '@jest/reporters@29.7.0': + /@jest/reporters@29.7.0: resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1173,183 +1605,412 @@ packages: peerDependenciesMeta: node-notifier: optional: true + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.16.5 + 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 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + 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': + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 - '@jest/source-map@29.6.3': + /@jest/source-map@29.6.3: resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + callsites: 3.1.0 + graceful-fs: 4.2.11 - '@jest/test-result@29.7.0': + /@jest/test-result@29.7.0: resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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': + /@jest/test-sequencer@29.7.0: resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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': + /@jest/transform@29.7.0: resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/core': 7.25.2 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + 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': + /@jest/types@29.6.3: resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.16.5 + '@types/yargs': 17.0.33 + chalk: 4.1.2 - '@jridgewell/gen-mapping@0.3.5': + /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + 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/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': + /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.25': + /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 - '@jspm/core@2.0.1': + /@jspm/core@2.0.1: resolution: {integrity: sha512-Lg3PnLp0QXpxwLIAuuJboLeRaIhrgJjeuh797QADg3xz8wGLugQOS5DpsE8A6i6Adgzf+bacllkKZG3J0tGfDw==} - '@mdx-js/mdx@2.3.0': + /@mdx-js/mdx@2.3.0: resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} + dependencies: + '@types/estree-jsx': 1.0.5 + '@types/mdx': 2.0.13 + estree-util-build-jsx: 2.2.2 + estree-util-is-identifier-name: 2.1.0 + estree-util-to-js: 1.2.0 + estree-walker: 3.0.3 + hast-util-to-estree: 2.3.3 + markdown-extensions: 1.1.1 + periscopic: 3.1.0 + remark-mdx: 2.3.0 + remark-parse: 10.0.2 + remark-rehype: 10.1.0 + unified: 10.1.2 + unist-util-position-from-estree: 1.1.2 + unist-util-stringify-position: 3.0.3 + unist-util-visit: 4.1.2 + vfile: 5.3.7 + transitivePeerDependencies: + - supports-color - '@microsoft/tsdoc-config@0.16.2': + /@microsoft/tsdoc-config@0.16.2: resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + ajv: 6.12.6 + jju: 1.4.0 + resolve: 1.19.0 + dev: true - '@microsoft/tsdoc@0.14.2': + /@microsoft/tsdoc@0.14.2: resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + dev: true - '@next/env@14.1.1': - resolution: {integrity: sha512-7CnQyD5G8shHxQIIg3c7/pSeYFeMhsNbpU/bmvH7ZnDql7mNRgg8O2JZrhrc/soFnfBnKP4/xXNiiSIPn2w8gA==} + /@next/env@14.2.11: + resolution: {integrity: sha512-HYsQRSIXwiNqvzzYThrBwq6RhXo3E0n8j8nQnAs8i4fCEo2Zf/3eS0IiRA8XnRg9Ha0YnpkyJZIZg1qEwemrHw==} + dev: false - '@next/eslint-plugin-next@14.1.1': - resolution: {integrity: sha512-NP1WoGFnFLpqqCWgGFjnn/sTwUExdPyjeFKRdQP1X/bL/tjAQ/TXDmYqw6vzGaP5NaZ2u6xzg+N/0nd7fOPOGQ==} + /@next/eslint-plugin-next@14.2.11: + resolution: {integrity: sha512-7mw+xW7Y03Ph4NTCcAzYe+vu4BNjEHZUfZayyF3Y1D9RX6c5NIe25m1grHEAkyUuaqjRxOYhnCNeglOkIqLkBA==} + dependencies: + glob: 10.3.10 + dev: true - '@next/swc-darwin-arm64@14.1.1': - resolution: {integrity: sha512-yDjSFKQKTIjyT7cFv+DqQfW5jsD+tVxXTckSe1KIouKk75t1qZmj/mV3wzdmFb0XHVGtyRjDMulfVG8uCKemOQ==} + /@next/swc-darwin-arm64@14.2.11: + resolution: {integrity: sha512-eiY9u7wEJZWp/Pga07Qy3ZmNEfALmmSS1HtsJF3y1QEyaExu7boENz11fWqDmZ3uvcyAxCMhTrA1jfVxITQW8g==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: false + optional: true - '@next/swc-darwin-x64@14.1.1': - resolution: {integrity: sha512-KCQmBL0CmFmN8D64FHIZVD9I4ugQsDBBEJKiblXGgwn7wBCSe8N4Dx47sdzl4JAg39IkSN5NNrr8AniXLMb3aw==} + /@next/swc-darwin-x64@14.2.11: + resolution: {integrity: sha512-lnB0zYCld4yE0IX3ANrVMmtAbziBb7MYekcmR6iE9bujmgERl6+FK+b0MBq0pl304lYe7zO4yxJus9H/Af8jbg==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-arm64-gnu@14.1.1': - resolution: {integrity: sha512-YDQfbWyW0JMKhJf/T4eyFr4b3tceTorQ5w2n7I0mNVTFOvu6CGEzfwT3RSAQGTi/FFMTFcuspPec/7dFHuP7Eg==} + /@next/swc-linux-arm64-gnu@14.2.11: + resolution: {integrity: sha512-Ulo9TZVocYmUAtzvZ7FfldtwUoQY0+9z3BiXZCLSUwU2bp7GqHA7/bqrfsArDlUb2xeGwn3ZuBbKtNK8TR0A8w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-arm64-musl@14.1.1': - resolution: {integrity: sha512-fiuN/OG6sNGRN/bRFxRvV5LyzLB8gaL8cbDH5o3mEiVwfcMzyE5T//ilMmaTrnA8HLMS6hoz4cHOu6Qcp9vxgQ==} + /@next/swc-linux-arm64-musl@14.2.11: + resolution: {integrity: sha512-fH377DnKGyUnkWlmUpFF1T90m0dADBfK11dF8sOQkiELF9M+YwDRCGe8ZyDzvQcUd20Rr5U7vpZRrAxKwd3Rzg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-x64-gnu@14.1.1': - resolution: {integrity: sha512-rv6AAdEXoezjbdfp3ouMuVqeLjE1Bin0AuE6qxE6V9g3Giz5/R3xpocHoAi7CufRR+lnkuUjRBn05SYJ83oKNQ==} + /@next/swc-linux-x64-gnu@14.2.11: + resolution: {integrity: sha512-a0TH4ZZp4NS0LgXP/488kgvWelNpwfgGTUCDXVhPGH6pInb7yIYNgM4kmNWOxBFt+TIuOH6Pi9NnGG4XWFUyXQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-linux-x64-musl@14.1.1': - resolution: {integrity: sha512-YAZLGsaNeChSrpz/G7MxO3TIBLaMN8QWMr3X8bt6rCvKovwU7GqQlDu99WdvF33kI8ZahvcdbFsy4jAFzFX7og==} + /@next/swc-linux-x64-musl@14.2.11: + resolution: {integrity: sha512-DYYZcO4Uir2gZxA4D2JcOAKVs8ZxbOFYPpXSVIgeoQbREbeEHxysVsg3nY4FrQy51e5opxt5mOHl/LzIyZBoKA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-arm64-msvc@14.1.1': - resolution: {integrity: sha512-1L4mUYPBMvVDMZg1inUYyPvFSduot0g73hgfD9CODgbr4xiTYe0VOMTZzaRqYJYBA9mana0x4eaAaypmWo1r5A==} + /@next/swc-win32-arm64-msvc@14.2.11: + resolution: {integrity: sha512-PwqHeKG3/kKfPpM6of1B9UJ+Er6ySUy59PeFu0Un0LBzJTRKKAg2V6J60Yqzp99m55mLa+YTbU6xj61ImTv9mg==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-ia32-msvc@14.1.1': - resolution: {integrity: sha512-jvIE9tsuj9vpbbXlR5YxrghRfMuG0Qm/nZ/1KDHc+y6FpnZ/apsgh+G6t15vefU0zp3WSpTMIdXRUsNl/7RSuw==} + /@next/swc-win32-ia32-msvc@14.2.11: + resolution: {integrity: sha512-0U7PWMnOYIvM74GY6rbH6w7v+vNPDVH1gUhlwHpfInJnNe5LkmUZqhp7FNWeNa5wbVgRcRi1F1cyxp4dmeLLvA==} engines: {node: '>= 10'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: false + optional: true - '@next/swc-win32-x64-msvc@14.1.1': - resolution: {integrity: sha512-S6K6EHDU5+1KrBDLko7/c1MNy/Ya73pIAmvKeFwsF4RmBFJSO7/7YeD4FnZ4iBdzE69PpQ4sOMU9ORKeNuxe8A==} + /@next/swc-win32-x64-msvc@14.2.11: + resolution: {integrity: sha512-gQpS7mcgovWoaTG1FbS5/ojF7CGfql1Q0ZLsMrhcsi2Sr9HEqsUZ70MPJyaYBXbk6iEAP7UXMD9HC8KY1qNwvA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] + requiresBuild: true + dev: false + optional: true - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + dependencies: + eslint-scope: 5.1.1 + dev: true - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + /@nolyfill/is-core-module@1.0.39: + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + dev: true - '@npmcli/config@8.2.0': - resolution: {integrity: sha512-YoEYZFg0hRSRP/Chmq+J4FvULFvji6SORUYWQc10FiJ+ReAnViXcDCENg6kM6dID04bAoKNUygrby798+gYBbQ==} + /@npmcli/config@8.3.4: + resolution: {integrity: sha512-01rtHedemDNhUXdicU7s+QYz/3JyV5Naj84cvdXGH4mgCdL+agmSYaLF4LUG4vMCLzhBO8YtS0gPpH1FGvbgAw==} engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/map-workspaces': 3.0.6 + '@npmcli/package-json': 5.2.0 + ci-info: 4.0.0 + ini: 4.1.3 + nopt: 7.2.1 + proc-log: 4.2.0 + semver: 7.6.3 + walk-up-path: 3.0.1 + transitivePeerDependencies: + - bluebird + dev: true - '@npmcli/fs@3.1.0': - resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==} + /@npmcli/fs@3.1.1: + resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + semver: 7.6.3 - '@npmcli/git@4.1.0': + /@npmcli/git@4.1.0: resolution: {integrity: sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/promise-spawn': 6.0.2 + lru-cache: 7.18.3 + npm-pick-manifest: 8.0.2 + proc-log: 3.0.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 3.0.1 + transitivePeerDependencies: + - bluebird + + /@npmcli/git@5.0.8: + resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/promise-spawn': 7.0.2 + ini: 4.1.3 + lru-cache: 10.4.3 + npm-pick-manifest: 9.1.0 + proc-log: 4.2.0 + promise-inflight: 1.0.1 + promise-retry: 2.0.1 + semver: 7.6.3 + which: 4.0.0 + transitivePeerDependencies: + - bluebird + dev: true + + /@npmcli/map-workspaces@3.0.6: + resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/name-from-folder': 2.0.0 + glob: 10.4.5 + minimatch: 9.0.5 + read-package-json-fast: 3.0.2 + dev: true + + /@npmcli/name-from-folder@2.0.0: + resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true + + /@npmcli/package-json@4.0.1: + resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/git': 4.1.0 + glob: 10.4.5 + hosted-git-info: 6.1.1 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 5.0.0 + proc-log: 3.0.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + + /@npmcli/package-json@5.2.0: + resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + '@npmcli/git': 5.0.8 + glob: 10.4.5 + hosted-git-info: 7.0.2 + json-parse-even-better-errors: 3.0.2 + normalize-package-data: 6.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + transitivePeerDependencies: + - bluebird + dev: true - '@npmcli/map-workspaces@3.0.4': - resolution: {integrity: sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - '@npmcli/name-from-folder@2.0.0': - resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - '@npmcli/package-json@4.0.1': - resolution: {integrity: sha512-lRCEGdHZomFsURroh522YvA/2cVb9oPIJrjHanCJZkiasz1BzcnLr3tBJhlV7S86MBJBuAQ33is2D60YitZL2Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - '@npmcli/promise-spawn@6.0.2': + /@npmcli/promise-spawn@6.0.2: resolution: {integrity: sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + which: 3.0.1 + + /@npmcli/promise-spawn@7.0.2: + resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + which: 4.0.0 + dev: true - '@pkgjs/parseargs@0.11.0': + /@pkgjs/parseargs@0.11.0: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} + requiresBuild: true + optional: true - '@pkgr/core@0.1.0': - resolution: {integrity: sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - - '@pkgr/utils@2.4.2': - resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==} + /@pkgr/core@0.1.1: + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + dev: true - '@remix-run/dev@2.9.2': - resolution: {integrity: sha512-70dr9HH/mCHP5+uPoQXyS9+r73IL//IDPaFruIhK8kmmLPGAg5bGyFRz/xX6LTa98gPdAwZXxBy7frudeh2Z0Q==} + /@remix-run/dev@2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6): + resolution: {integrity: sha512-/87YQORdlJg5YChd7nVBM/hRXHZA4GfUjhKbZyNrh03bazCQBF+6EsXbzpJ6cCFOpZgecsN0Xv648Qw0VuJjwg==} engines: {node: '>=18.0.0'} hasBin: true peerDependencies: - '@remix-run/react': ^2.9.2 - '@remix-run/serve': ^2.9.2 + '@remix-run/react': ^2.12.0 + '@remix-run/serve': ^2.12.0 typescript: ^5.1.0 vite: ^5.1.0 wrangler: ^3.28.2 @@ -1362,9 +2023,81 @@ packages: optional: true wrangler: optional: true + dependencies: + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/plugin-syntax-decorators': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/preset-typescript': 7.24.7(@babel/core@7.25.2) + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + '@mdx-js/mdx': 2.3.0 + '@npmcli/package-json': 4.0.1 + '@remix-run/node': 2.12.0(typescript@5.6.2) + '@remix-run/react': 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2) + '@remix-run/router': 1.19.2 + '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@types/mdx': 2.0.13 + '@vanilla-extract/integration': 6.5.0 + arg: 5.0.2 + cacache: 17.1.4 + chalk: 4.1.2 + chokidar: 3.6.0 + cross-spawn: 7.0.3 + dotenv: 16.4.5 + es-module-lexer: 1.5.4 + esbuild: 0.17.6 + esbuild-plugins-node-modules-polyfill: 1.6.6(esbuild@0.17.6) + execa: 5.1.1 + exit-hook: 2.2.1 + express: 4.21.0 + fs-extra: 10.1.0 + get-port: 5.1.1 + gunzip-maybe: 1.4.2 + jsesc: 3.0.2 + json5: 2.2.3 + lodash: 4.17.21 + lodash.debounce: 4.0.8 + minimatch: 9.0.5 + ora: 5.4.1 + picocolors: 1.1.0 + picomatch: 2.3.1 + pidtree: 0.6.0 + postcss: 8.4.47 + postcss-discard-duplicates: 5.1.0(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-modules: 6.0.0(postcss@8.4.47) + prettier: 2.8.8 + pretty-ms: 7.0.1 + react-refresh: 0.14.2 + remark-frontmatter: 4.0.1 + remark-mdx-frontmatter: 1.1.1 + semver: 7.6.3 + set-cookie-parser: 2.7.0 + tar-fs: 2.1.1 + tsconfig-paths: 4.2.0 + typescript: 5.6.2 + vite: 5.4.6 + ws: 7.5.10 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - bluebird + - bufferutil + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - ts-node + - utf-8-validate - '@remix-run/eslint-config@2.10.0': - resolution: {integrity: sha512-6UNOVsV6T7Q0BCQ28heT4tMzZFDnNPTZXzwCM3bPf6gRZgZ8IlBX3ZvmncisRHiiNphYtmXR/p/e3kJWNH5OCA==} + /@remix-run/eslint-config@2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.6.2): + resolution: {integrity: sha512-9MfVRuto/8EOYFf4zdg765x5TQ1l03CG7ZsLBLI22fn/OoJtOp5gGXeHaWMiFo+nLHlP27wEH2y9j7NshxdcMA==} engines: {node: '>=18.0.0'} peerDependencies: eslint: ^8.0.0 @@ -1373,18 +2106,53 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@babel/core': 7.25.2 + '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) + '@babel/preset-react': 7.24.7(@babel/core@7.25.2) + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest-dom: 4.0.3(eslint@8.57.1) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-node: 11.1.0(eslint@8.57.1) + eslint-plugin-react: 7.36.1(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.1)(typescript@5.6.2) + react: 18.3.1 + typescript: 5.6.2 + transitivePeerDependencies: + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - jest + - supports-color + dev: true - '@remix-run/node@2.9.2': - resolution: {integrity: sha512-2Mt2107pfelz4T+ziDBef3P4A7kgPqCDshnEYCVGxInivJ3HHwAKUcb7MhGa8uMMMA6LMWxbAPYNHPzC3iKv2A==} + /@remix-run/node@2.12.0(typescript@5.6.2): + resolution: {integrity: sha512-83Jaoc6gpSuD4e6rCk7N5ZHAXNmDw4fJC+kPeDCsd6+wLtTLSi7u9Zo9/Q7moLZ3oyH+aR+LGdkxLULYv+Q6Og==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true + dependencies: + '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@remix-run/web-fetch': 4.4.2 + '@web3-storage/multipart-parser': 1.0.0 + cookie-signature: 1.2.1 + source-map-support: 0.5.21 + stream-slice: 0.1.2 + typescript: 5.6.2 + undici: 6.19.8 - '@remix-run/react@2.9.2': - resolution: {integrity: sha512-DcZDzm68MBxGn8hjf/VsuUpjxDYZ8VOOH79P1zWu4hb3hBr90WV1Sa/gIAFUEGpOCcSQ0EG/ci8MaFxcAaPz2Q==} + /@remix-run/react@2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2): + resolution: {integrity: sha512-Y109tI37Icr0BSU8sWSo8jDPkXaErJ/e1h0fkPvq6LZ0DrlcmHWBxzWJKID431I/KJvhVvBgVCuDamZTRVOZ5Q==} engines: {node: '>=18.0.0'} peerDependencies: react: ^18.0.0 @@ -1393,297 +2161,533 @@ packages: peerDependenciesMeta: typescript: optional: true - - '@remix-run/router@1.16.1': - resolution: {integrity: sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==} + dependencies: + '@remix-run/router': 1.19.2 + '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.2(react@18.3.1) + react-router-dom: 6.26.2(react-dom@18.3.1)(react@18.3.1) + turbo-stream: 2.4.0 + typescript: 5.6.2 + + /@remix-run/router@1.19.2: + resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} - '@remix-run/server-runtime@2.9.2': - resolution: {integrity: sha512-dX37FEeMVVg7KUbpRhX4hD0nUY0Sscz/qAjU4lYCdd6IzwJGariTmz+bQTXKCjploZuXj09OQZHSOS/ydkUVDA==} + /@remix-run/server-runtime@2.12.0(typescript@5.6.2): + resolution: {integrity: sha512-o9ukOr3XKmyY8UufTrDdkgD3fiy+z+f4qEzvCQnvC0+EasCyN9hb1Vbui6Koo/5HKvahC4Ga8RcWyvhykKrG3g==} engines: {node: '>=18.0.0'} peerDependencies: typescript: ^5.1.0 peerDependenciesMeta: typescript: optional: true + dependencies: + '@remix-run/router': 1.19.2 + '@types/cookie': 0.6.0 + '@web3-storage/multipart-parser': 1.0.0 + cookie: 0.6.0 + set-cookie-parser: 2.7.0 + source-map: 0.7.4 + turbo-stream: 2.4.0 + typescript: 5.6.2 - '@remix-run/web-blob@3.1.0': + /@remix-run/web-blob@3.1.0: resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} + dependencies: + '@remix-run/web-stream': 1.1.0 + web-encoding: 1.1.5 - '@remix-run/web-fetch@4.4.2': + /@remix-run/web-fetch@4.4.2: resolution: {integrity: sha512-jgKfzA713/4kAW/oZ4bC3MoLWyjModOVDjFPNseVqcJKSafgIscrYL9G50SurEYLswPuoU3HzSbO0jQCMYWHhA==} engines: {node: ^10.17 || >=12.3} + dependencies: + '@remix-run/web-blob': 3.1.0 + '@remix-run/web-file': 3.1.0 + '@remix-run/web-form-data': 3.1.0 + '@remix-run/web-stream': 1.1.0 + '@web3-storage/multipart-parser': 1.0.0 + abort-controller: 3.0.0 + data-uri-to-buffer: 3.0.1 + mrmime: 1.0.1 - '@remix-run/web-file@3.1.0': + /@remix-run/web-file@3.1.0: resolution: {integrity: sha512-dW2MNGwoiEYhlspOAXFBasmLeYshyAyhIdrlXBi06Duex5tDr3ut2LFKVj7tyHLmn8nnNwFf1BjNbkQpygC2aQ==} + dependencies: + '@remix-run/web-blob': 3.1.0 - '@remix-run/web-form-data@3.1.0': + /@remix-run/web-form-data@3.1.0: resolution: {integrity: sha512-NdeohLMdrb+pHxMQ/Geuzdp0eqPbea+Ieo8M8Jx2lGC6TBHsgHzYcBvr0LyPdPVycNRDEpWpiDdCOdCryo3f9A==} + dependencies: + web-encoding: 1.1.5 - '@remix-run/web-stream@1.1.0': + /@remix-run/web-stream@1.1.0: resolution: {integrity: sha512-KRJtwrjRV5Bb+pM7zxcTJkhIqWWSy+MYsIxHK+0m5atcznsf15YwUBWHWulZerV2+vvHH1Lp1DD7pw6qKW8SgA==} + dependencies: + web-streams-polyfill: 3.3.3 - '@rollup/rollup-android-arm-eabi@4.5.2': - resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} + /@rollup/rollup-android-arm-eabi@4.21.3: + resolution: {integrity: sha512-MmKSfaB9GX+zXl6E8z4koOr/xU63AMVleLEa64v7R0QF/ZloMs5vcD1sHgM64GXXS1csaJutG+ddtzcueI/BLg==} cpu: [arm] os: [android] + requiresBuild: true + optional: true - '@rollup/rollup-android-arm64@4.5.2': - resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} + /@rollup/rollup-android-arm64@4.21.3: + resolution: {integrity: sha512-zrt8ecH07PE3sB4jPOggweBjJMzI1JG5xI2DIsUbkA+7K+Gkjys6eV7i9pOenNSDJH3eOr/jLb/PzqtmdwDq5g==} cpu: [arm64] os: [android] + requiresBuild: true + optional: true - '@rollup/rollup-darwin-arm64@4.5.2': - resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} + /@rollup/rollup-darwin-arm64@4.21.3: + resolution: {integrity: sha512-P0UxIOrKNBFTQaXTxOH4RxuEBVCgEA5UTNV6Yz7z9QHnUJ7eLX9reOd/NYMO3+XZO2cco19mXTxDMXxit4R/eQ==} cpu: [arm64] os: [darwin] + requiresBuild: true + optional: true - '@rollup/rollup-darwin-x64@4.5.2': - resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} + /@rollup/rollup-darwin-x64@4.21.3: + resolution: {integrity: sha512-L1M0vKGO5ASKntqtsFEjTq/fD91vAqnzeaF6sfNAy55aD+Hi2pBI5DKwCO+UNDQHWsDViJLqshxOahXyLSh3EA==} cpu: [x64] os: [darwin] + requiresBuild: true + optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': - resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} + /@rollup/rollup-linux-arm-gnueabihf@4.21.3: + resolution: {integrity: sha512-btVgIsCjuYFKUjopPoWiDqmoUXQDiW2A4C3Mtmp5vACm7/GnyuprqIDPNczeyR5W8rTXEbkmrJux7cJmD99D2g==} cpu: [arm] os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-arm-musleabihf@4.21.3: + resolution: {integrity: sha512-zmjbSphplZlau6ZTkxd3+NMtE4UKVy7U4aVFMmHcgO5CUbw17ZP6QCgyxhzGaU/wFFdTfiojjbLG3/0p9HhAqA==} + cpu: [arm] + os: [linux] + requiresBuild: true + optional: true - '@rollup/rollup-linux-arm64-gnu@4.5.2': - resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} + /@rollup/rollup-linux-arm64-gnu@4.21.3: + resolution: {integrity: sha512-nSZfcZtAnQPRZmUkUQwZq2OjQciR6tEoJaZVFvLHsj0MF6QhNMg0fQ6mUOsiCUpTqxTx0/O6gX0V/nYc7LrgPw==} cpu: [arm64] os: [linux] + requiresBuild: true + optional: true - '@rollup/rollup-linux-arm64-musl@4.5.2': - resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} + /@rollup/rollup-linux-arm64-musl@4.21.3: + resolution: {integrity: sha512-MnvSPGO8KJXIMGlQDYfvYS3IosFN2rKsvxRpPO2l2cum+Z3exiExLwVU+GExL96pn8IP+GdH8Tz70EpBhO0sIQ==} cpu: [arm64] os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-powerpc64le-gnu@4.21.3: + resolution: {integrity: sha512-+W+p/9QNDr2vE2AXU0qIy0qQE75E8RTwTwgqS2G5CRQ11vzq0tbnfBd6brWhS9bCRjAjepJe2fvvkvS3dno+iw==} + cpu: [ppc64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.21.3: + resolution: {integrity: sha512-yXH6K6KfqGXaxHrtr+Uoy+JpNlUlI46BKVyonGiaD74ravdnF9BUNC+vV+SIuB96hUMGShhKV693rF9QDfO6nQ==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + optional: true + + /@rollup/rollup-linux-s390x-gnu@4.21.3: + resolution: {integrity: sha512-R8cwY9wcnApN/KDYWTH4gV/ypvy9yZUHlbJvfaiXSB48JO3KpwSpjOGqO4jnGkLDSk1hgjYkTbTt6Q7uvPf8eg==} + cpu: [s390x] + os: [linux] + requiresBuild: true + optional: true - '@rollup/rollup-linux-x64-gnu@4.5.2': - resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} + /@rollup/rollup-linux-x64-gnu@4.21.3: + resolution: {integrity: sha512-kZPbX/NOPh0vhS5sI+dR8L1bU2cSO9FgxwM8r7wHzGydzfSjLRCFAT87GR5U9scj2rhzN3JPYVC7NoBbl4FZ0g==} cpu: [x64] os: [linux] + requiresBuild: true + optional: true - '@rollup/rollup-linux-x64-musl@4.5.2': - resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} + /@rollup/rollup-linux-x64-musl@4.21.3: + resolution: {integrity: sha512-S0Yq+xA1VEH66uiMNhijsWAafffydd2X5b77eLHfRmfLsRSpbiAWiRHV6DEpz6aOToPsgid7TI9rGd6zB1rhbg==} cpu: [x64] os: [linux] + requiresBuild: true + optional: true - '@rollup/rollup-win32-arm64-msvc@4.5.2': - resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} + /@rollup/rollup-win32-arm64-msvc@4.21.3: + resolution: {integrity: sha512-9isNzeL34yquCPyerog+IMCNxKR8XYmGd0tHSV+OVx0TmE0aJOo9uw4fZfUuk2qxobP5sug6vNdZR6u7Mw7Q+Q==} cpu: [arm64] os: [win32] + requiresBuild: true + optional: true - '@rollup/rollup-win32-ia32-msvc@4.5.2': - resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} + /@rollup/rollup-win32-ia32-msvc@4.21.3: + resolution: {integrity: sha512-nMIdKnfZfzn1Vsk+RuOvl43ONTZXoAPUUxgcU0tXooqg4YrAqzfKzVenqqk2g5efWh46/D28cKFrOzDSW28gTA==} cpu: [ia32] os: [win32] + requiresBuild: true + optional: true - '@rollup/rollup-win32-x64-msvc@4.5.2': - resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} + /@rollup/rollup-win32-x64-msvc@4.21.3: + resolution: {integrity: sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==} cpu: [x64] os: [win32] + requiresBuild: true + optional: true - '@rushstack/eslint-patch@1.6.0': - resolution: {integrity: sha512-2/U3GXA6YiPYQDLGwtGlnNgKYBSwCFIHf8Y9LUY5VATHdtbLlU0Y1R3QoBnT0aB4qv/BEiVVsj7LJXoQCgJ2vA==} + /@rtsao/scc@1.1.0: + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + dev: true - '@sinclair/typebox@0.27.8': + /@rushstack/eslint-patch@1.10.4: + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + dev: true + + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sinonjs/commons@3.0.0': - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + dependencies: + type-detect: 4.0.8 - '@sinonjs/fake-timers@10.3.0': + /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + dependencies: + '@sinonjs/commons': 3.0.1 - '@storybook/csf@0.0.1': + /@storybook/csf@0.0.1: resolution: {integrity: sha512-USTLkZze5gkel8MYCujSRBVIrUQ3YPBrLOx7GNk/0wttvVtlzWXAq9eLbQ4p/NicGxP+3T7KPEMVV//g+yubpw==} + dependencies: + lodash: 4.17.21 + dev: true - '@swc/helpers@0.5.2': - resolution: {integrity: sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==} + /@swc/counter@0.1.3: + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + dev: false + + /@swc/helpers@0.5.5: + resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + dependencies: + '@swc/counter': 0.1.3 + tslib: 2.7.0 + dev: false - '@testing-library/dom@8.20.1': + /@testing-library/dom@8.20.1: resolution: {integrity: sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g==} engines: {node: '>=12'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/runtime': 7.25.6 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + dev: true - '@tootallnate/once@2.0.0': + /@tootallnate/once@2.0.0: resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} engines: {node: '>= 10'} + dev: true - '@ts-morph/common@0.11.1': + /@ts-morph/common@0.11.1: resolution: {integrity: sha512-7hWZS0NRpEsNV8vWJzg7FEz6V8MaLNeJOmwmghqUXTpzk16V1LLZhdo+4QvE/+zv4cVci0OviuJFnqhEfoV3+g==} + dependencies: + fast-glob: 3.3.2 + minimatch: 3.1.2 + mkdirp: 1.0.4 + path-browserify: 1.0.1 + dev: false - '@types/acorn@4.0.6': + /@types/acorn@4.0.6: resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.5 - '@types/aria-query@5.0.4': + /@types/aria-query@5.0.4: resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + dev: true - '@types/babel__core@7.20.5': + /@types/babel__core@7.20.5: resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 - '@types/babel__generator@7.6.7': - resolution: {integrity: sha512-6Sfsq+EaaLrw4RmdFWE9Onp63TOUue71AWb4Gpa6JxzgTYtimbM086WnYTy2U67AofR++QKCo08ZP6pwx8YFHQ==} + /@types/babel__generator@7.6.8: + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + dependencies: + '@babel/types': 7.25.6 - '@types/babel__template@7.4.4': + /@types/babel__template@7.4.4: resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + dependencies: + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 - '@types/babel__traverse@7.20.5': - resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + /@types/babel__traverse@7.20.6: + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + dependencies: + '@babel/types': 7.25.6 - '@types/body-parser@1.19.5': + /@types/body-parser@1.19.5: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.16.5 + dev: true - '@types/concat-stream@2.0.3': + /@types/concat-stream@2.0.3: resolution: {integrity: sha512-3qe4oQAPNwVNwK4C9c8u+VJqv9kez+2MR4qJpoPFfXtgxxif1QbFusvXzK0/Wra2VX07smostI2VMmJNSpZjuQ==} + dependencies: + '@types/node': 20.16.5 + dev: true - '@types/connect@3.4.38': + /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + dependencies: + '@types/node': 20.16.5 + dev: true - '@types/cookie@0.6.0': + /@types/cookie@0.6.0: resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} - '@types/cookiejar@2.1.5': + /@types/cookiejar@2.1.5: resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + dev: true - '@types/cors@2.8.17': + /@types/cors@2.8.17: resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + dependencies: + '@types/node': 20.16.5 + dev: true - '@types/debug@4.1.12': + /@types/debug@4.1.12: resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 - '@types/estree-jsx@1.0.3': - resolution: {integrity: sha512-pvQ+TKeRHeiUGRhvYwRrQ/ISnohKkSJR14fT2yqyZ4e9K5vqc7hrtY2Y1Dw0ZwAzQ6DQsxsaCUuSIIi8v0Cq6w==} + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} + dependencies: + '@types/estree': 1.0.5 - '@types/estree@1.0.5': + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - '@types/express-serve-static-core@4.17.41': - resolution: {integrity: sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==} + /@types/express-serve-static-core@4.19.5: + resolution: {integrity: sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==} + dependencies: + '@types/node': 20.16.5 + '@types/qs': 6.9.16 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 + dev: true - '@types/express@4.17.21': + /@types/express@4.17.21: resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + dependencies: + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.5 + '@types/qs': 6.9.16 + '@types/serve-static': 1.15.7 + dev: true - '@types/graceful-fs@4.1.9': + /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} + dependencies: + '@types/node': 20.16.5 - '@types/hast@2.3.8': - resolution: {integrity: sha512-aMIqAlFd2wTIDZuvLbhUT+TGvMxrNC8ECUIVtH6xxy0sQLs3iu6NO8Kp/VT5je7i5ufnebXzdV1dNDMnvaH6IQ==} + /@types/hast@2.3.10: + resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} + dependencies: + '@types/unist': 2.0.11 - '@types/hast@3.0.4': + /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.3 + dev: true - '@types/http-errors@2.0.4': + /@types/http-errors@2.0.4: resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: true - '@types/is-empty@1.2.3': + /@types/is-empty@1.2.3: resolution: {integrity: sha512-4J1l5d79hoIvsrKh5VUKVRA1aIdsOb10Hu5j3J2VfP/msDnfTdGPmNp2E1Wg+vs97Bktzo+MZePFFXSGoykYJw==} + dev: true - '@types/istanbul-lib-coverage@2.0.6': + /@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': + /@types/istanbul-lib-report@3.0.3: resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 - '@types/istanbul-reports@3.0.4': + /@types/istanbul-reports@3.0.4: resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + /@types/jest@29.5.13: + resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} + dependencies: + expect: 29.7.0 + pretty-format: 29.7.0 + dev: true - '@types/jsdom@20.0.1': + /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + dependencies: + '@types/node': 20.16.5 + '@types/tough-cookie': 4.0.5 + parse5: 7.1.2 + dev: true - '@types/json-schema@7.0.15': + /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/json5@0.0.29': + /@types/json5@0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true - '@types/mdast@3.0.15': + /@types/mdast@3.0.15: resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.11 - '@types/mdast@4.0.3': - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + dependencies: + '@types/unist': 3.0.3 + dev: true - '@types/mdx@2.0.10': - resolution: {integrity: sha512-Rllzc5KHk0Al5/WANwgSPl1/CwjqCy+AZrGd78zuK+jO9aDM6ffblZ+zIjgPNAaEBmlO0RYDvLNh7wD0zKVgEg==} + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/methods@1.1.4': + /@types/methods@1.1.4: resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + dev: true - '@types/mime@1.3.5': + /@types/mime@1.3.5: resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: true - '@types/mime@3.0.4': - resolution: {integrity: sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw==} - - '@types/morgan@1.9.9': + /@types/morgan@1.9.9: resolution: {integrity: sha512-iRYSDKVaC6FkGSpEVVIvrRGw0DfJMiQzIn3qr2G5B3C//AWkulhXgaBd7tS9/J79GWSYMTHGs7PfI5b3Y8m+RQ==} + dependencies: + '@types/node': 20.16.5 + dev: true - '@types/ms@0.7.34': + /@types/ms@0.7.34: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.11.24': - resolution: {integrity: sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==} + /@types/node@20.16.5: + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + dependencies: + undici-types: 6.19.8 - '@types/normalize-package-data@2.4.4': + /@types/normalize-package-data@2.4.4: resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + dev: true - '@types/prop-types@15.7.11': - resolution: {integrity: sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==} + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + dev: true - '@types/qs@6.9.10': - resolution: {integrity: sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==} + /@types/qs@6.9.16: + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + dev: true - '@types/range-parser@1.2.7': + /@types/range-parser@1.2.7: resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: true - '@types/react-dom@18.2.19': - resolution: {integrity: sha512-aZvQL6uUbIJpjZk4U8JZGbau9KDeAwMfmhyWorxgBkqDIEf6ROjRozcmPIicqsUwPUjbkDfHKgGee1Lq65APcA==} - - '@types/react@18.2.62': - resolution: {integrity: sha512-l3f57BbaEKP0xcFzf+5qRG8/PXykZiuVM6eEoPtqBPCp6dxO3HhDkLIgIyXPhPKNAeXn3KO2pEaNgzaEo/asaw==} + /@types/react-dom@18.3.0: + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + dependencies: + '@types/react': 18.3.6 + dev: true - '@types/scheduler@0.16.8': - resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} + /@types/react@18.3.6: + resolution: {integrity: sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==} + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 + dev: true - '@types/semver@7.5.6': - resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true - '@types/send@0.17.4': + /@types/send@0.17.4: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.16.5 + dev: true - '@types/serve-static@1.15.5': - resolution: {integrity: sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==} + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + dependencies: + '@types/http-errors': 2.0.4 + '@types/node': 20.16.5 + '@types/send': 0.17.4 + dev: true - '@types/stack-utils@2.0.3': + /@types/stack-utils@2.0.3: resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} - '@types/superagent@8.1.1': - resolution: {integrity: sha512-YQyEXA4PgCl7EVOoSAS3o0fyPFU6erv5mMixztQYe1bqbWmmn8c+IrqoxjQeZe4MgwXikgcaZPiI/DsbmOVlzA==} + /@types/superagent@8.1.9: + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 20.16.5 + form-data: 4.0.0 + dev: true - '@types/supertest@6.0.2': + /@types/supertest@6.0.2: resolution: {integrity: sha512-137ypx2lk/wTQbW6An6safu9hXmajAifU/s7szAHLN/FeIm5w7yR0Wkl9fdJMRSHwOn4HLAI0DaB2TOORuhPDg==} + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.9 + dev: true - '@types/supports-color@8.1.3': + /@types/supports-color@8.1.3: resolution: {integrity: sha512-Hy6UMpxhE3j1tLpl27exp1XqHD7n8chAiNPzWfz16LPZoMMoSc4dzLl6w9qijkEb/r5O1ozdu1CWGA2L83ZeZg==} + dev: true - '@types/tough-cookie@4.0.5': + /@types/tough-cookie@4.0.5: resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + dev: true - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + dev: true - '@types/yargs-parser@21.0.3': + /@types/yargs-parser@21.0.3: resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + dependencies: + '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@5.62.0': + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1693,9 +2697,26 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare-lite: 1.4.0 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/eslint-plugin@6.12.0': - resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -1704,8 +2725,26 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + eslint: 8.57.1 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/parser@5.62.0': + /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1714,9 +2753,19 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/parser@6.12.0': - resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1724,16 +2773,35 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + eslint: 8.57.1 + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/scope-manager@5.62.0': + /@typescript-eslint/scope-manager@5.62.0: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + dev: true - '@typescript-eslint/scope-manager@6.12.0': - resolution: {integrity: sha512-5gUvjg+XdSj8pcetdL9eXJzQNTl3RD7LgUiYTl8Aabdi8hFkaGSYnaS6BLc0BGNaDH+tVzVwmKtWvu0jLgWVbw==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + dev: true - '@typescript-eslint/type-utils@5.62.0': + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1742,9 +2810,19 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + tsutils: 3.21.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/type-utils@6.12.0': - resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -1752,16 +2830,28 @@ packages: peerDependenciesMeta: typescript: optional: true - - '@typescript-eslint/types@5.62.0': - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + dependencies: + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + eslint: 8.57.1 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types@5.62.0: + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true - '@typescript-eslint/types@6.12.0': - resolution: {integrity: sha512-MA16p/+WxM5JG/F3RTpRIcuOghWO30//VEOvzubM8zuOOBYXsP+IfjoCXXiIfy2Ta8FRh9+IO9QLlaFQUU+10Q==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} + dev: true - '@typescript-eslint/typescript-estree@5.62.0': + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1769,52 +2859,157 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/visitor-keys': 5.62.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.6.3 + tsutils: 3.21.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/typescript-estree@6.12.0': - resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.3.7 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.6.2) + typescript: 5.6.2 + transitivePeerDependencies: + - supports-color + dev: true - '@typescript-eslint/utils@5.62.0': + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 5.62.0 + '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + eslint: 8.57.1 + eslint-scope: 5.1.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - '@typescript-eslint/utils@6.12.0': - resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + eslint: 8.57.1 + semver: 7.6.3 + transitivePeerDependencies: + - supports-color + - typescript + dev: true - '@typescript-eslint/visitor-keys@5.62.0': + /@typescript-eslint/visitor-keys@5.62.0: resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.62.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@typescript-eslint/visitor-keys@6.12.0': - resolution: {integrity: sha512-rg3BizTZHF1k3ipn8gfrzDXXSFKyOEB5zxYXInQ6z0hUvmQlhaZQzK+YmHmNViMA9HzW5Q9+bPPt90bU6GQwyw==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + dev: true - '@ungap/structured-clone@1.2.0': + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true - '@vanilla-extract/babel-plugin-debug-ids@1.0.3': - resolution: {integrity: sha512-vm4jYu1xhSa6ofQ9AhIpR3DkAp4c+eoR1Rpm8/TQI4DmWbmGbOjYRcqV0aWsfaIlNhN4kFuxFMKBNN9oG6iRzA==} + /@vanilla-extract/babel-plugin-debug-ids@1.0.6: + resolution: {integrity: sha512-C188vUEYmw41yxg3QooTs8r1IdbDQQ2mH7L5RkORBnHx74QlmsNfqVmKwAVTgrlYt8JoRaWMtPfGm/Ql0BNQrA==} + dependencies: + '@babel/core': 7.25.2 + transitivePeerDependencies: + - supports-color - '@vanilla-extract/css@1.14.0': - resolution: {integrity: sha512-rYfm7JciWZ8PFzBM/HDiE2GLnKI3xJ6/vdmVJ5BSgcCZ5CxRlM9Cjqclni9lGzF3eMOijnUhCd/KV8TOzyzbMA==} + /@vanilla-extract/css@1.15.5: + resolution: {integrity: sha512-N1nQebRWnXvlcmu9fXKVUs145EVwmWtMD95bpiEKtvehHDpUhmO1l2bauS7FGYKbi3dU1IurJbGpQhBclTr1ng==} + dependencies: + '@emotion/hash': 0.9.2 + '@vanilla-extract/private': 1.0.6 + css-what: 6.1.0 + cssesc: 3.0.0 + csstype: 3.1.3 + dedent: 1.5.3 + deep-object-diff: 1.1.9 + deepmerge: 4.3.1 + lru-cache: 10.4.3 + media-query-parser: 2.0.2 + modern-ahocorasick: 1.0.1 + picocolors: 1.1.0 + transitivePeerDependencies: + - babel-plugin-macros - '@vanilla-extract/integration@6.2.4': - resolution: {integrity: sha512-+AfymNMVq9sEUe0OJpdCokmPZg4Zi6CqKaW/PnUOfDwEn53ighHOMOBl5hAgxYR8Kiz9NG43Bn00mkjWlFi+ng==} + /@vanilla-extract/integration@6.5.0: + resolution: {integrity: sha512-E2YcfO8vA+vs+ua+gpvy1HRqvgWbI+MTlUpxA8FvatOvybuNcWAY0CKwQ/Gpj7rswYKtC6C7+xw33emM6/ImdQ==} + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + '@vanilla-extract/babel-plugin-debug-ids': 1.0.6 + '@vanilla-extract/css': 1.15.5 + esbuild: 0.17.6 + eval: 0.1.8 + find-up: 5.0.0 + javascript-stringify: 2.1.0 + lodash: 4.17.21 + mlly: 1.7.1 + outdent: 0.8.0 + vite: 5.4.6 + vite-node: 1.6.0 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser - '@vanilla-extract/private@1.0.3': - resolution: {integrity: sha512-17kVyLq3ePTKOkveHxXuIJZtGYs+cSoev7BlP+Lf4916qfDhk/HBjvlYDe8egrea7LNPHKwSZJK/bzZC+Q6AwQ==} + /@vanilla-extract/private@1.0.6: + resolution: {integrity: sha512-ytsG/JLweEjw7DBuZ/0JCN4WAQgM9erfSTdS1NQY778hFQSZ6cfCDEZZ0sgVm4k54uNz6ImKB33AYvSR//fjxw==} - '@vercel/analytics@1.3.1': + /@vercel/analytics@1.3.1(react@18.3.1): resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==} peerDependencies: next: '>= 13' @@ -1824,8 +3019,12 @@ packages: optional: true react: optional: true + dependencies: + react: 18.3.1 + server-only: 0.0.1 + dev: false - '@vercel/remix@2.9.2-patch.2': + /@vercel/remix@2.9.2-patch.2(@remix-run/dev@2.12.0)(@remix-run/node@2.12.0)(@remix-run/server-runtime@2.12.0)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-sKSeBFqTj0HSYsf7KpxA84ixrb4AkuoDm0G7hlrWUnRtCy9Fa65YX8fbHoewdVbc8uTBa2XAiBCjPMmtohas9w==} engines: {node: '>=18.0.0'} peerDependencies: @@ -1834,11 +3033,26 @@ packages: '@remix-run/server-runtime': 2.9.2 react: '*' react-dom: '*' + dependencies: + '@remix-run/dev': 2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6) + '@remix-run/node': 2.12.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@vercel/static-config': 3.0.0 + isbot: 3.8.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + ts-morph: 12.0.0 + dev: false - '@vercel/static-config@3.0.0': + /@vercel/static-config@3.0.0: resolution: {integrity: sha512-2qtvcBJ1bGY0dYGYh3iM7yGKkk971FujLEDXzuW5wcZsPr1GSEjO/w2iSr3qve6nDDtBImsGoDEnus5FI4+fIw==} + dependencies: + ajv: 8.6.3 + json-schema-to-ts: 1.6.4 + ts-morph: 12.0.0 + dev: false - '@vercel/style-guide@5.2.0': + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1855,7023 +3069,2020 @@ packages: optional: true typescript: optional: true + dependencies: + '@babel/core': 7.25.2 + '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) + '@rushstack/eslint-patch': 1.10.4 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 + eslint-config-prettier: 9.1.0(eslint@8.57.1) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) + eslint-plugin-react: 7.36.1(eslint@8.57.1) + eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-tsdoc: 0.2.17 + eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) + prettier: 3.3.3 + prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) + typescript: 5.6.2 + transitivePeerDependencies: + - eslint-import-resolver-node + - eslint-import-resolver-webpack + - eslint-plugin-import-x + - jest + - supports-color + dev: true - '@vitejs/plugin-react@4.2.1': - resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + /@vitejs/plugin-react@4.3.1(vite@5.4.6): + resolution: {integrity: sha512-m/V2syj5CuVnaxcUJOQRel/Wr31FFXRFlnOoq1TVtkCxsY5veGMTEmpWHndrhB2U8ScHtCQB1e+4hWYExQc6Lg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.2.0 || ^5.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 5.4.6 + transitivePeerDependencies: + - supports-color + dev: true - '@web3-storage/multipart-parser@1.0.0': + /@web3-storage/multipart-parser@1.0.0: resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} - '@zxing/text-encoding@0.9.0': + /@zxing/text-encoding@0.9.0: resolution: {integrity: sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==} + requiresBuild: true + optional: true - abab@2.0.6: + /abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + dev: true - abbrev@2.0.0: + /abbrev@2.0.0: resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - abort-controller@3.0.0: + /abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} + dependencies: + event-target-shim: 5.0.1 - accepts@1.3.8: + /accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.35 + negotiator: 0.6.3 - acorn-globals@7.0.1: + /acorn-globals@7.0.1: resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + dependencies: + acorn: 8.12.1 + acorn-walk: 8.3.4 + dev: true - acorn-jsx@5.3.2: + /acorn-jsx@5.3.2(acorn@8.12.1): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.12.1 - acorn-walk@8.3.0: - resolution: {integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==} + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} + dependencies: + acorn: 8.12.1 + dev: true - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + /acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} engines: {node: '>=0.4.0'} + hasBin: true - agent-base@6.0.2: + /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + dependencies: + debug: 4.3.7 + transitivePeerDependencies: + - supports-color + dev: true - aggregate-error@3.1.0: + /aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 - ajv@6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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 + dev: true - ajv@8.6.3: + /ajv@8.6.3: resolution: {integrity: sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: false - ansi-escapes@4.3.2: + /ansi-escapes@4.3.2: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 - ansi-regex@5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + /ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} - ansi-styles@3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 - ansi-styles@4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 - ansi-styles@5.2.0: + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - any-promise@1.3.0: + /any-promise@1.3.0: resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: true - anymatch@3.1.3: + /anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 - arg@5.0.2: + /arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - argparse@1.0.10: + /argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 - argparse@2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.1.3: + /aria-query@5.1.3: resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + dependencies: + deep-equal: 2.2.3 + dev: true - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} - - array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true - array-flatten@1.1.1: + /array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - array-includes@3.1.7: - resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + /array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true - array-union@2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: true + + /array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.findlastindex@1.2.3: - resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==} + /array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flat@1.3.2: + /array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.flatmap@1.3.2: + /array.prototype.flatmap@1.3.2: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-shim-unscopables: 1.0.2 + dev: true - array.prototype.tosorted@1.1.2: - resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==} + /array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true - arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + dev: true - asap@2.0.6: + /asap@2.0.6: resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + dev: true - ast-types-flow@0.0.8: + /ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + dev: true - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + /astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true - asynciterator.prototype@1.0.0: - resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: false - asynckit@0.4.0: + /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + /autoprefixer@10.4.20(postcss@8.4.47): + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 + dependencies: + browserslist: 4.23.3 + caniuse-lite: 1.0.30001660 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-value-parser: 4.2.0 + dev: true - available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + /axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} engines: {node: '>=4'} + dev: true - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + /axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + dev: true - babel-jest@29.7.0: + /babel-jest@29.7.0(@babel/core@7.25.2): resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.25.2 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.5 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.25.2) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color - babel-plugin-istanbul@6.1.1: + /babel-plugin-istanbul@6.1.1: resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} engines: {node: '>=8'} + dependencies: + '@babel/helper-plugin-utils': 7.24.8 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color - babel-plugin-jest-hoist@29.6.3: + /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} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + '@types/babel__core': 7.20.5 + '@types/babel__traverse': 7.20.6 - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + /babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.2): + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 - - babel-preset-jest@29.6.3: + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.2) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.2) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.2) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.2) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.2) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.2) + + /babel-preset-jest@29.6.3(@babel/core@7.25.2): 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 + dependencies: + '@babel/core': 7.25.2 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) - bail@2.0.2: + /bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - balanced-match@1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - base64-js@1.5.1: + /base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - basic-auth@2.0.1: + /basic-auth@2.0.1: resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} engines: {node: '>= 0.8'} + dependencies: + safe-buffer: 5.1.2 + dev: false - big-integer@1.6.52: - resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} - engines: {node: '>=0.6'} - - binary-extensions@2.2.0: - resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} - bl@4.1.0: + /bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + /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} + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 2.6.9 + 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 - bplist-parser@0.2.0: - resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==} - engines: {node: '>= 5.10.0'} - - brace-expansion@1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 - brace-expansion@2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + dependencies: + fill-range: 7.1.1 - browserify-zlib@0.1.4: + /browserify-zlib@0.1.4: resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + dependencies: + pako: 0.2.9 - browserslist@4.22.2: - resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - - browserslist@4.23.1: - resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + dependencies: + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.24 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) - bs-logger@0.2.6: + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + dependencies: + fast-json-stable-stringify: 2.1.0 + dev: false - bser@2.1.1: + /bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + dependencies: + node-int64: 0.4.0 - buffer-from@1.1.2: + /buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - buffer@5.7.1: + /buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 - builtin-modules@3.3.0: + /builtin-modules@3.3.0: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} + dev: true - builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} - - bundle-name@3.0.0: - resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==} - engines: {node: '>=12'} - - bundle-require@4.0.2: - resolution: {integrity: sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==} + /bundle-require@5.0.0(esbuild@0.23.1): + resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} peerDependencies: - esbuild: '>=0.17' + esbuild: '>=0.18' + dependencies: + esbuild: 0.23.1 + load-tsconfig: 0.2.5 + dev: true - busboy@1.6.0: + /busboy@1.6.0: resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} engines: {node: '>=10.16.0'} + dependencies: + streamsearch: 1.1.0 + dev: false - bytes@3.1.2: + /bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} - cac@6.7.14: + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} - cacache@17.1.4: + /cacache@17.1.4: resolution: {integrity: sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dependencies: + '@npmcli/fs': 3.1.1 + fs-minipass: 3.0.3 + glob: 10.4.5 + lru-cache: 7.18.3 + minipass: 7.1.2 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + p-map: 4.0.0 + ssri: 10.0.6 + tar: 6.2.1 + unique-filename: 3.0.0 - call-bind@1.0.5: - resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} - - call-bind@1.0.7: + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + set-function-length: 1.2.2 - callsites@3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - camelcase@5.3.1: + /camelcase@5.3.1: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - camelcase@6.3.0: + /camelcase@6.3.0: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001593: - resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} + /caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} - caniuse-lite@1.0.30001636: - resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} - - ccount@2.0.1: + /ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 - chalk@4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - char-regex@1.0.2: + /char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} - character-entities-html4@2.1.0: + /character-entities-html4@2.1.0: resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: + /character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} + dev: true - character-entities-legacy@3.0.0: + /character-entities-legacy@3.0.0: resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@1.2.4: + /character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} + dev: true - character-entities@2.0.2: + /character-entities@2.0.2: resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@1.1.4: + /character-reference-invalid@1.1.4: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + dev: true - character-reference-invalid@2.0.1: + /character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.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 - chownr@1.1.4: + /chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chownr@2.0.0: + /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} - ci-info@3.9.0: + /ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - ci-info@4.0.0: + /ci-info@4.0.0: resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==} engines: {node: '>=8'} + dev: true - cjs-module-lexer@1.2.3: - resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} + /cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} - clean-regexp@1.0.0: + /clean-regexp@1.0.0: resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} engines: {node: '>=4'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true - clean-stack@2.2.0: + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - cli-cursor@3.1.0: + /cli-cursor@3.1.0: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 - cli-spinners@2.9.2: + /cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - client-only@0.0.1: + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + dev: false - cliui@8.0.1: + /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 - clone@1.0.4: + /clone@1.0.4: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} - co@4.6.0: + /co@4.6.0: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} - code-block-writer@10.1.1: + /code-block-writer@10.1.1: resolution: {integrity: sha512-67ueh2IRGst/51p0n6FvPrnRjAGHY5F8xdjkgrYE7DDzpJe6qA07RYQ9VcoUeo5ATOjSOiWpSL3SWBRRbempMw==} + dev: false - collect-v8-coverage@1.0.2: + /collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 - color-convert@2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 - color-name@1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - combined-stream@1.0.8: + /combined-stream@1.0.8: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true - comma-separated-tokens@2.0.3: + /comma-separated-tokens@2.0.3: resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@4.1.1: + /commander@4.1.1: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + dev: true - component-emitter@1.3.1: + /component-emitter@1.3.1: resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} + dev: true - concat-map@0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - concat-stream@2.0.0: + /concat-stream@2.0.0: resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} engines: {'0': node >= 6.0} + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.2 + typedarray: 0.0.6 + dev: true - content-disposition@0.5.4: + /confbox@0.1.7: + resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} + + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: true + + /content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.2.1 - content-type@1.0.5: + /content-type@1.0.5: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - convert-source-map@2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie-signature@1.0.6: + /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie-signature@1.2.1: + /cookie-signature@1.2.1: resolution: {integrity: sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==} engines: {node: '>=6.6.0'} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} - engines: {node: '>= 0.6'} - - cookie@0.6.0: + /cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} - cookiejar@2.1.4: + /cookiejar@2.1.4: resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + dev: true - core-util-is@1.0.3: + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cors@2.8.5: + /cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + dev: false - create-jest@29.7.0: + /create-jest@29.7.0(@types/node@20.16.5): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + 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@20.16.5) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node - cross-spawn@7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - css-what@6.1.0: + /css-what@6.1.0: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} - cssesc@3.0.0: + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true - cssom@0.3.8: + /cssom@0.3.8: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + dev: true - cssom@0.5.0: + /cssom@0.5.0: resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + dev: true - cssstyle@2.3.0: + /cssstyle@2.3.0: resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} engines: {node: '>=8'} + dependencies: + cssom: 0.3.8 + dev: true - csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - damerau-levenshtein@1.0.8: + /damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + dev: true - data-uri-to-buffer@3.0.1: + /data-uri-to-buffer@3.0.1: resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} engines: {node: '>= 6'} - data-urls@3.0.2: + /data-urls@3.0.2: resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} engines: {node: '>=12'} + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + dev: true + + /data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true + + /data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-data-view: 1.0.1 + dev: true - debug@2.6.9: + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true + dependencies: + ms: 2.0.0 - debug@3.2.7: + /debug@3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true + dependencies: + ms: 2.1.3 + dev: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true + dependencies: + ms: 2.1.3 - decimal.js@10.4.3: + /decimal.js@10.4.3: resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true - decode-named-character-reference@1.0.2: + /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 - dedent@1.5.1: - resolution: {integrity: sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: babel-plugin-macros: optional: true - deep-equal@2.2.3: + /deep-equal@2.2.3: resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + es-get-iterator: 1.1.3 + get-intrinsic: 1.2.4 + is-arguments: 1.1.1 + is-array-buffer: 3.0.4 + is-date-object: 1.0.5 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + side-channel: 1.0.6 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true - deep-is@0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true - deep-object-diff@1.1.9: + /deep-object-diff@1.1.9: resolution: {integrity: sha512-Rn+RuwkmkDwCi2/oXOFS9Gsr5lJZu/yTGpK7wAaAIE75CC+LCGEZHpY6VQJa/RoJcrmaA/docWJZvYohlNkWPA==} - deepmerge@4.3.1: + /deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} - default-browser-id@3.0.0: - resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==} - engines: {node: '>=12'} - - default-browser@4.0.0: - resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==} - engines: {node: '>=14.16'} - - defaults@1.0.4: + /defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + dependencies: + clone: 1.0.4 - define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} - engines: {node: '>= 0.4'} - - define-data-property@1.1.4: + /define-data-property@1.1.4: resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 - define-lazy-prop@3.0.0: - resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} - engines: {node: '>=12'} - - define-properties@1.2.1: + /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true - delayed-stream@1.0.0: + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + dev: true - depd@2.0.0: + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - dequal@2.0.3: + /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destroy@1.2.0: + /destroy@1.2.0: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - detect-indent@7.0.1: + /detect-indent@7.0.1: resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} engines: {node: '>=12.20'} + dev: true - detect-newline@3.1.0: + /detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} - detect-newline@4.0.1: + /detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - devlop@1.1.0: + /devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: true - dezalgo@1.0.4: + /dezalgo@1.0.4: resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + dev: true - diff-sequences@29.6.3: + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} - dir-glob@3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true - doctrine@2.1.0: + /doctrine@2.1.0: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true - doctrine@3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true - dom-accessibility-api@0.5.16: + /dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dev: true - domexception@4.0.0: + /domexception@4.0.0: resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + dependencies: + webidl-conversions: 7.0.0 + dev: true - dotenv@16.0.3: + /dotenv@16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} + dev: true - dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} - duplexify@3.7.1: + /duplexify@3.7.1: resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-shift: 1.0.3 - eastasianwidth@0.2.0: + /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ee-first@1.1.1: + /ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.622: - resolution: {integrity: sha512-GZ47DEy0Gm2Z8RVG092CkFvX7SdotG57c4YZOe8W8qD4rOmk3plgeNmiLVRHP/Liqj1wRiY3uUUod9vb9hnxZA==} + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.2 + dev: false - electron-to-chromium@1.4.811: - resolution: {integrity: sha512-CDyzcJ5XW78SHzsIOdn27z8J4ist8eaFLhdto2hSMSJQgsiwvbv2fbizcKUICryw1Wii1TI/FEkvzvJsR3awrA==} + /electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} - emittery@0.13.1: + /emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + /emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + dev: true - emoji-regex@8.0.0: + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - emoji-regex@9.2.2: + /emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - encodeurl@1.0.2: + /encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} - end-of-stream@1.4.4: + /encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + /end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 - enhanced-resolve@5.15.0: - resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==} + /enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + dev: true - entities@4.5.0: + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + dev: true - err-code@2.0.3: + /err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} - error-ex@1.3.2: + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 - es-abstract@1.22.3: - resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==} + /es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + es-set-tostringtag: 2.0.3 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.2 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.8 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + dev: true - es-define-property@1.0.0: + /es-define-property@1.0.0: resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 - es-errors@1.3.0: + /es-errors@1.3.0: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-get-iterator@1.1.3: + /es-get-iterator@1.1.3: resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.0.7 + isarray: 2.0.5 + stop-iteration-iterator: 1.0.0 + dev: true + + /es-iterator-helpers@1.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.2 + dev: true - es-iterator-helpers@1.0.15: - resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==} + /es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} - es-module-lexer@1.4.1: - resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} + /es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + dev: true - es-set-tostringtag@2.0.2: - resolution: {integrity: sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==} + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + dev: true - es-shim-unscopables@1.0.2: + /es-shim-unscopables@1.0.2: resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.2 + dev: true - es-to-primitive@1.2.1: + /es-to-primitive@1.2.1: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true - esbuild-plugins-node-modules-polyfill@1.6.1: - resolution: {integrity: sha512-6sAwI24PV8W0zxeO+i4BS5zoQypS3SzEGwIdxpzpy65riRuK8apMw8PN0aKVLCTnLr0FgNIxUMRd9BsreBrtog==} + /esbuild-plugins-node-modules-polyfill@1.6.6(esbuild@0.17.6): + resolution: {integrity: sha512-0wDvliv65SCaaGtmoITnmXqqiUzU+ggFupnOgkEo2B9cQ+CUt58ql2+EY6dYoEsoqiHRu2NuTrFUJGMJEgMmLw==} engines: {node: '>=14.0.0'} peerDependencies: - esbuild: ^0.14.0 || ^0.15.0 || ^0.16.0 || ^0.17.0 || ^0.18.0 || ^0.19.0 + esbuild: '>=0.14.0 ^0.23.0' + dependencies: + '@jspm/core': 2.0.1 + esbuild: 0.17.6 + local-pkg: 0.5.0 + resolve.exports: 2.0.2 - esbuild@0.17.6: + /esbuild@0.17.6: resolution: {integrity: sha512-TKFRp9TxrJDdRWfSsSERKEovm6v30iHnrjlcGhLBOtReE28Yp1VSBRfO3GTaOFMoxsNerx4TjrhzSuma9ha83Q==} engines: {node: '>=12'} hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.17.6 + '@esbuild/android-arm64': 0.17.6 + '@esbuild/android-x64': 0.17.6 + '@esbuild/darwin-arm64': 0.17.6 + '@esbuild/darwin-x64': 0.17.6 + '@esbuild/freebsd-arm64': 0.17.6 + '@esbuild/freebsd-x64': 0.17.6 + '@esbuild/linux-arm': 0.17.6 + '@esbuild/linux-arm64': 0.17.6 + '@esbuild/linux-ia32': 0.17.6 + '@esbuild/linux-loong64': 0.17.6 + '@esbuild/linux-mips64el': 0.17.6 + '@esbuild/linux-ppc64': 0.17.6 + '@esbuild/linux-riscv64': 0.17.6 + '@esbuild/linux-s390x': 0.17.6 + '@esbuild/linux-x64': 0.17.6 + '@esbuild/netbsd-x64': 0.17.6 + '@esbuild/openbsd-x64': 0.17.6 + '@esbuild/sunos-x64': 0.17.6 + '@esbuild/win32-arm64': 0.17.6 + '@esbuild/win32-ia32': 0.17.6 + '@esbuild/win32-x64': 0.17.6 - esbuild@0.18.20: - resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} + /esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} engines: {node: '>=12'} hasBin: true - - esbuild@0.19.7: - resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} - engines: {node: '>=12'} - - escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + /esbuild@0.23.1: + resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} + engines: {node: '>=18'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.23.1 + '@esbuild/android-arm': 0.23.1 + '@esbuild/android-arm64': 0.23.1 + '@esbuild/android-x64': 0.23.1 + '@esbuild/darwin-arm64': 0.23.1 + '@esbuild/darwin-x64': 0.23.1 + '@esbuild/freebsd-arm64': 0.23.1 + '@esbuild/freebsd-x64': 0.23.1 + '@esbuild/linux-arm': 0.23.1 + '@esbuild/linux-arm64': 0.23.1 + '@esbuild/linux-ia32': 0.23.1 + '@esbuild/linux-loong64': 0.23.1 + '@esbuild/linux-mips64el': 0.23.1 + '@esbuild/linux-ppc64': 0.23.1 + '@esbuild/linux-riscv64': 0.23.1 + '@esbuild/linux-s390x': 0.23.1 + '@esbuild/linux-x64': 0.23.1 + '@esbuild/netbsd-x64': 0.23.1 + '@esbuild/openbsd-arm64': 0.23.1 + '@esbuild/openbsd-x64': 0.23.1 + '@esbuild/sunos-x64': 0.23.1 + '@esbuild/win32-arm64': 0.23.1 + '@esbuild/win32-ia32': 0.23.1 + '@esbuild/win32-x64': 0.23.1 + dev: true + + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-html@1.0.3: + /escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - escape-string-regexp@1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: + /escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} - escape-string-regexp@4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + dev: true - escodegen@2.1.0: + /escodegen@2.1.0: resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + dev: true - eslint-config-prettier@9.0.0: - resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} + /eslint-config-prettier@9.1.0(eslint@8.57.1): + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' + dependencies: + eslint: 8.57.1 + dev: true - eslint-config-turbo@2.0.0: - resolution: {integrity: sha512-EtdL8t3iuj6JFHq8nESXwnu0U7K/ug7dkxTsYNctuR6udOudjLMZz3A0P131Bz5ZFmPoFmkdHjlRYwocGgLbOw==} + /eslint-config-turbo@2.1.2(eslint@8.57.1): + resolution: {integrity: sha512-UCNwxBrTOx0K41h1OrwMg7vPdGvcGSAlj40ZzpuUi0S2Muac2UOs+6F2dMYQiKg7lX2HAtyHXlF0T2wlWNHjGg==} peerDependencies: eslint: '>6.6.0' + dependencies: + eslint: 8.57.1 + eslint-plugin-turbo: 2.1.2(eslint@8.57.1) + dev: true - eslint-import-resolver-alias@1.1.2: + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0): resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} engines: {node: '>= 4'} peerDependencies: eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + dev: true - eslint-import-resolver-node@0.3.7: + /eslint-import-resolver-node@0.3.7: resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true - eslint-import-resolver-node@0.3.9: + /eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.15.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} + /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1): + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' - - eslint-mdx@3.1.5: - resolution: {integrity: sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==} - engines: {node: '>=18.0.0'} - peerDependencies: - eslint: '>=8.0.0' - - eslint-module-utils@2.8.0: - resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} - 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-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-eslint-comments@3.2.0: - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.29.0: - resolution: {integrity: sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true - - eslint-plugin-jest-dom@4.0.3: - resolution: {integrity: sha512-9j+n8uj0+V0tmsoS7bYC7fLhQmIvjRqRYEcbDSi+TKPsTThLLXCyj5swMSSf/hTleeMktACnn+HFqXBr5gbcbA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} - peerDependencies: - eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 - - eslint-plugin-jest@26.9.0: - resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jest@27.6.0: - resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true - - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-markdown@3.0.1: - resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - - eslint-plugin-mdx@3.1.5: - resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} - engines: {node: '>=18.0.0'} - peerDependencies: - eslint: '>=8.0.0' - - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=5.16.0' - - eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - - eslint-plugin-playwright@0.16.0: - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - - eslint-plugin-react@7.33.2: - resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - - eslint-plugin-storybook@0.8.0: - resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} - engines: {node: '>= 18'} - peerDependencies: - eslint: '>=6' - - eslint-plugin-testing-library@5.11.1: - resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-testing-library@6.2.0: - resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 - - eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} - - eslint-plugin-turbo@2.0.0: - resolution: {integrity: sha512-31tZqfGbjBn6BzXVsmW50c2m8NDra6mOS2us/qHxUwN4YrHI/uYSpyItAw4qdVrxk7RmilvmnJ5WXFwtnfuLqw==} - peerDependencies: - eslint: '>6.6.0' - - eslint-plugin-unicorn@48.0.1: - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} - - eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - - 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@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} - 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-util-attach-comments@2.1.1: - resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} - - estree-util-build-jsx@2.2.2: - resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} - - estree-util-is-identifier-name@1.1.0: - resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} - - estree-util-is-identifier-name@2.1.0: - resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-to-js@1.2.0: - resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} - - estree-util-value-to-estree@1.3.0: - resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} - engines: {node: '>=12.0.0'} - - estree-util-visit@1.2.1: - resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - 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'} - - eval@0.1.8: - resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} - engines: {node: '>= 0.8'} - - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - execa@7.2.0: - resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==} - engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} - - exit-hook@2.2.1: - resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} - engines: {node: '>=6'} - - 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.18.3: - resolution: {integrity: sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==} - engines: {node: '>= 0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - 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-safe-stringify@2.1.1: - resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - - fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - - fb-watchman@2.0.2: - resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} - - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} - - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} - engines: {node: '>=8'} - - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} - engines: {node: '>= 0.8'} - - 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'} - - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} - - flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - - for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} - engines: {node: '>= 6'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - formidable@2.1.2: - resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@4.3.7: - resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - - fs-minipass@2.1.0: - resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} - engines: {node: '>= 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.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.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} - - functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - - generic-names@4.0.0: - resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} - - 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-intrinsic@1.2.2: - resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} - - get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} - - get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} - - get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} - engines: {node: '>= 0.4'} - - get-tsconfig@4.7.2: - resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==} - - git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - - 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@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - - glob@7.1.6: - resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - - globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} - - globalthis@1.0.3: - resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} - engines: {node: '>= 0.4'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - globrex@0.1.2: - resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} - - gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} - - 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==} - - gunzip-maybe@1.4.2: - resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} - hasBin: true - - has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - - 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-property-descriptors@1.0.1: - resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} - engines: {node: '>= 0.4'} - - has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - - has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} - engines: {node: '>= 0.4'} - - hasown@2.0.0: - resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} - engines: {node: '>= 0.4'} - - hast-util-to-estree@2.3.3: - resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} - - hast-util-whitespace@2.0.1: - resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - - hexoid@1.0.0: - resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} - engines: {node: '>=8'} - - hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - - hosted-git-info@6.1.1: - resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - html-encoding-sniffer@3.0.0: - resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} - engines: {node: '>=12'} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - http-errors@2.0.0: - resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} - engines: {node: '>= 0.8'} - - http-proxy-agent@5.0.0: - resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} - engines: {node: '>= 6'} - - https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - human-signals@4.3.1: - resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} - engines: {node: '>=14.18.0'} - - 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.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} - engines: {node: '>= 4'} - - import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} - - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} - engines: {node: '>=8'} - - import-meta-resolve@4.0.0: - resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==} - - 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'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@4.1.1: - resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - - internal-slot@1.0.6: - resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==} - engines: {node: '>= 0.4'} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} - - is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} - - is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} - - is-buffer@2.0.5: - resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} - engines: {node: '>=4'} - - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - - is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} - - is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} - - is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-deflate@1.0.0: - resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - - is-docker@3.0.0: - resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-empty@1.2.0: - resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-generator-fn@2.1.0: - resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} - engines: {node: '>=6'} - - is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-gzip@1.0.0: - resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-inside-container@1.0.0: - resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} - engines: {node: '>=14.16'} - - is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - - is-map@2.0.2: - resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} - - is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} - engines: {node: '>= 0.4'} - - is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - 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-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - - is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} - - is-set@2.0.2: - resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} - - is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} - - 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-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} - - is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} - - is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} - engines: {node: '>= 0.4'} - - is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - - is-weakmap@2.0.1: - resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} - - is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} - - is-weakset@2.0.2: - resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - - isbot@3.8.0: - resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==} - engines: {node: '>=12'} - - isbot@4.4.0: - resolution: {integrity: sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==} - engines: {node: '>=18'} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - 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.1: - resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} - 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-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} - - javascript-stringify@2.1.0: - resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - - 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@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 - - jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - - joycon@3.1.1: - resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} - engines: {node: '>=10'} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - - js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true - - jsdom@20.0.3: - resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} - engines: {node: '>=14'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - - jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-parse-even-better-errors@3.0.0: - resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - json-schema-to-ts@1.6.4: - resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} - - 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-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - - json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} - - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - - jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - 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'} - - language-subtag-registry@0.3.22: - resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} - - language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} - - 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'} - - lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - 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} - - load-plugin@6.0.2: - resolution: {integrity: sha512-3KRkTvCOsyNrx4zvBl/+ZMqPdVyp26TIf6xkmfEGuGwCfNQ/HzhktwbJCxd1KJpzPbK42t/WVOL3cX+TDaMRuQ==} - - load-tsconfig@0.2.5: - resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} - engines: {node: '>= 12.13.0'} - - local-pkg@0.4.3: - resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} - engines: {node: '>=14'} - - 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'} - - 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.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.sortby@4.7.0: - resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} - - lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - - log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - - lru-cache@10.1.0: - resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==} - engines: {node: 14 || >=16.14} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - - lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - - lz-string@1.5.0: - resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} - hasBin: true - - make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - - make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - - makeerror@1.0.12: - resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} - - markdown-extensions@1.1.1: - resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} - engines: {node: '>=0.10.0'} - - mdast-util-definitions@5.1.2: - resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} - - mdast-util-from-markdown@0.8.5: - resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - - mdast-util-from-markdown@1.3.1: - resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} - - mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} - - mdast-util-frontmatter@1.0.1: - resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} - - mdast-util-mdx-expression@1.3.2: - resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} - - mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} - - mdast-util-mdx-jsx@2.1.4: - resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} - - mdast-util-mdx-jsx@3.1.0: - resolution: {integrity: sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w==} - - mdast-util-mdx@2.0.1: - resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@1.3.1: - resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@3.0.1: - resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@12.3.0: - resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} - - mdast-util-to-markdown@1.5.0: - resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} - - mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} - - mdast-util-to-string@2.0.0: - resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - - mdast-util-to-string@3.2.0: - resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - media-query-parser@2.0.2: - resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} - - 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'} - - micromark-core-commonmark@1.1.0: - resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} - - micromark-core-commonmark@2.0.0: - resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==} - - micromark-extension-frontmatter@1.1.1: - resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} - - micromark-extension-mdx-expression@1.0.8: - resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} - - micromark-extension-mdx-expression@3.0.0: - resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} - - micromark-extension-mdx-jsx@1.0.5: - resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} - - micromark-extension-mdx-jsx@3.0.0: - resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} - - micromark-extension-mdx-md@1.0.1: - resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@1.0.5: - resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@1.0.1: - resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@1.1.0: - resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} - - micromark-factory-destination@2.0.0: - resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} - - micromark-factory-label@1.1.0: - resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} - - micromark-factory-label@2.0.0: - resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} - - micromark-factory-mdx-expression@1.0.9: - resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} - - micromark-factory-mdx-expression@2.0.1: - resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - - micromark-factory-space@2.0.0: - resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} - - micromark-factory-title@1.1.0: - resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} - - micromark-factory-title@2.0.0: - resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} - - micromark-factory-whitespace@1.1.0: - resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} - - micromark-factory-whitespace@2.0.0: - resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - - micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} - - micromark-util-chunked@1.1.0: - resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} - - micromark-util-chunked@2.0.0: - resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} - - micromark-util-classify-character@1.1.0: - resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} - - micromark-util-classify-character@2.0.0: - resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} - - micromark-util-combine-extensions@1.1.0: - resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} - - micromark-util-combine-extensions@2.0.0: - resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} - - micromark-util-decode-numeric-character-reference@1.1.0: - resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} - - micromark-util-decode-numeric-character-reference@2.0.1: - resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} - - micromark-util-decode-string@1.1.0: - resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} - - micromark-util-decode-string@2.0.0: - resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} - - micromark-util-encode@1.1.0: - resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - - micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - - micromark-util-events-to-acorn@1.2.3: - resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} - - micromark-util-events-to-acorn@2.0.2: - resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} - - micromark-util-html-tag-name@1.2.0: - resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - - micromark-util-html-tag-name@2.0.0: - resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} - - micromark-util-normalize-identifier@1.1.0: - resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} - - micromark-util-normalize-identifier@2.0.0: - resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} - - micromark-util-resolve-all@1.1.0: - resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} - - micromark-util-resolve-all@2.0.0: - resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} - - micromark-util-sanitize-uri@1.2.0: - resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} - - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - - micromark-util-subtokenize@1.1.0: - resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} - - micromark-util-subtokenize@2.0.0: - resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - - micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - - micromark@2.11.4: - resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} - - micromark@3.2.0: - resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} - - micromark@4.0.0: - resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} - - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} - engines: {node: '>=8.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - 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'} - - mime@2.6.0: - resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} - engines: {node: '>=4.0.0'} - - 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'} - - min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - - minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - minipass-collect@1.0.2: - resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} - engines: {node: '>= 8'} - - 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@5.0.0: - resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} - engines: {node: '>=8'} - - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - - minizlib@2.1.2: - resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} - engines: {node: '>= 8'} - - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@1.0.4: - resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} - engines: {node: '>=10'} - hasBin: true - - mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} - - modern-ahocorasick@1.0.1: - resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} - - morgan@1.10.0: - resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} - engines: {node: '>= 0.8.0'} - - mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - - mrmime@1.0.1: - resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - - natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - - natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - next@14.1.1: - resolution: {integrity: sha512-McrGJqlGSHeaz2yTRPkEucxQKe5Zq7uPwyeHNmJaZNY4wx9E9QdxmTp310agFRoMuIYgQrCrT3petg13fSVOww==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - sass: - optional: true - - node-int64@0.4.0: - resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} - - nopt@7.2.0: - resolution: {integrity: sha512-CVDtwCdhYIvnAzFoJ6NJ6dX3oga9/HyciQDnG1vQDjSLMeKLJ4A93ZqYKDrgYSr1FBY5/hMYC+2VCi24pgpkGA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} - - normalize-package-data@5.0.0: - resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.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'} - - npm-install-checks@6.3.0: - resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-normalize-package-bin@3.0.1: - resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-package-arg@10.1.0: - resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-pick-manifest@8.0.2: - resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - nwsapi@2.2.7: - resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} - - 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.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} - engines: {node: '>= 0.4'} - - object.entries@1.1.7: - resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} - engines: {node: '>= 0.4'} - - object.fromentries@2.0.7: - resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} - engines: {node: '>= 0.4'} - - object.groupby@1.0.1: - resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==} - - object.hasown@1.1.3: - resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} - - object.values@1.1.7: - resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} - engines: {node: '>= 0.4'} - - 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==} - - 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'} - - open@9.1.0: - resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==} - engines: {node: '>=14.16'} - - optionator@0.9.3: - resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} - engines: {node: '>= 0.8.0'} - - ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} - - outdent@0.8.0: - resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} - - 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-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-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - pako@0.2.9: - resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@2.0.0: - resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} - - parse-entities@4.0.1: - resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-json@7.1.1: - resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} - engines: {node: '>=16'} - - parse-ms@2.1.0: - resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} - engines: {node: '>=6'} - - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - 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-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - 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.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} - - peek-stream@1.1.3: - resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} - - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} - - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - 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-types@1.0.3: - resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} - - pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - - postcss-discard-duplicates@5.1.0: - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-load-config@4.0.2: - resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} - engines: {node: '>= 14'} - peerDependencies: - postcss: '>=8.0.9' - ts-node: '>=9.0.0' - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - - postcss-modules-extract-imports@3.0.0: - resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.0.3: - resolution: {integrity: sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.0.0: - resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} - 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-modules@6.0.0: - resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} - peerDependencies: - postcss: ^8.0.0 - - postcss-selector-parser@6.0.13: - resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} - engines: {node: '>=4'} - - 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.35: - resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} - engines: {node: ^10 || ^12 || >=14} - - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - - prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - - prettier-plugin-packagejson@2.4.6: - resolution: {integrity: sha512-5JGfzkJRL0DLNyhwmiAV9mV0hZLHDwddFCs2lc9CNxOChpoWUQVe8K4qTMktmevmDlMpok2uT10nvHUyU59sNw==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true - - prettier@2.8.8: - resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} - engines: {node: '>=10.13.0'} - hasBin: true - - prettier@3.2.5: - resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} - engines: {node: '>=14'} - - 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@7.0.1: - resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} - engines: {node: '>=10'} - - proc-log@3.0.0: - resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - promise-inflight@1.0.1: - resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} - peerDependencies: - bluebird: '*' - peerDependenciesMeta: - bluebird: - optional: true - - promise-retry@2.0.1: - resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} - engines: {node: '>=10'} - - 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-information@6.4.0: - resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - - pump@2.0.1: - resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} - - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} - - pumpify@1.5.1: - resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pure-rand@6.0.4: - resolution: {integrity: sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==} - - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} - engines: {node: '>=0.6'} - - qs@6.11.2: - resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} - engines: {node: '>=0.6'} - - querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - 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'} - - react-dom@18.2.0: - resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} - peerDependencies: - react: ^18.2.0 - - 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.2.0: - resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - - react-refresh@0.14.0: - resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} - engines: {node: '>=0.10.0'} - - react-router-dom@6.23.1: - resolution: {integrity: sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - - react-router@6.23.1: - resolution: {integrity: sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - - react@18.2.0: - resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} - engines: {node: '>=0.10.0'} - - read-package-json-fast@3.0.2: - resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} - - read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} - - 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'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - reflect.getprototypeof@1.0.4: - resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==} - engines: {node: '>= 0.4'} - - regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} - - regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - - regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} - engines: {node: '>= 0.4'} - - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - - regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - - remark-frontmatter@4.0.1: - resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} - - remark-mdx-frontmatter@1.1.1: - resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} - engines: {node: '>=12.2.0'} - - remark-mdx@2.3.0: - resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} - - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} - - remark-parse@10.0.2: - resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@10.1.0: - resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - 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-like@0.1.2: - resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} - - requireindex@1.2.0: - resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} - engines: {node: '>=0.10.5'} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - 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.2: - resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} - engines: {node: '>=10'} - - resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} - - resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - - resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - - restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} - - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rollup@3.29.4: - resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} - engines: {node: '>=14.18.0', npm: '>=8.0.0'} - hasBin: true - - rollup@4.5.2: - resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} - engines: {node: '>=18.0.0', npm: '>=8.0.0'} - - run-applescript@5.0.0: - resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==} - engines: {node: '>=12'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - sade@1.8.1: - resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} - engines: {node: '>=6'} - - safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} - 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-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - saxes@6.0.0: - resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} - engines: {node: '>=v12.22.7'} - - scheduler@0.23.0: - resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - - semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - - semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} - engines: {node: '>=10'} - - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} - engines: {node: '>= 0.8.0'} - - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} - engines: {node: '>= 0.8.0'} - - server-only@0.0.1: - resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} - - set-cookie-parser@2.6.0: - resolution: {integrity: sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==} - - set-function-length@1.1.1: - resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==} - engines: {node: '>= 0.4'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} - - 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'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - - sort-package-json@2.6.0: - resolution: {integrity: sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==} - - source-map-js@1.0.2: - resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} - engines: {node: '>=0.10.0'} - - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - - 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.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - - source-map@0.8.0-beta.0: - resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} - engines: {node: '>= 8'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} - - spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} - - spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - - spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - ssri@10.0.5: - resolution: {integrity: sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - stack-utils@2.0.6: - resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} - engines: {node: '>=10'} - - statuses@2.0.1: - resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} - engines: {node: '>= 0.8'} - - stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} - - stream-shift@1.0.1: - resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==} - - stream-slice@0.1.2: - resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} - - streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - - string-hash@1.1.3: - resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - - string-length@4.0.2: - resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} - engines: {node: '>=10'} - - 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@6.1.0: - resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} - engines: {node: '>=16'} - - string.prototype.matchall@4.0.10: - resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} - - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} - - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - - 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==} - - stringify-entities@4.0.3: - resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} - - 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-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-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-to-object@0.4.4: - resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - - styled-jsx@5.1.1: - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true - - sucrase@3.34.0: - resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} - engines: {node: '>=8'} - - superagent@8.1.2: - resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} - engines: {node: '>=6.4.0 <13 || >=14'} - - supertest@6.3.4: - resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} - engines: {node: '>=6.4.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-color@9.4.0: - resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} - engines: {node: '>=12'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - - synckit@0.8.5: - resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} - engines: {node: ^14.18.0 || >=16.0.0} - - synckit@0.9.0: - resolution: {integrity: sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==} - engines: {node: ^14.18.0 || >=16.0.0} - - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - tar-fs@2.1.1: - resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} - - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar@6.2.0: - resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} - engines: {node: '>=10'} - - test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - - 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==} - - through2@2.0.5: - resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} - - titleize@3.0.0: - resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==} - engines: {node: '>=12'} - - tmpl@1.0.5: - resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - - 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'} - - toml@3.0.0: - resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - - tough-cookie@4.1.3: - resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} - engines: {node: '>=6'} - - tr46@1.0.1: - resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} - - tr46@3.0.0: - resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} - engines: {node: '>=12'} - - tree-kill@1.2.2: - resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.1.0: - resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} - - ts-api-utils@1.0.3: - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} - peerDependencies: - typescript: '>=4.2.0' - - ts-dedent@2.2.0: - resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} - engines: {node: '>=6.10'} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - ts-jest@29.1.2: - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@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/types': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - - ts-morph@12.0.0: - resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} - - ts-toolbelt@6.15.5: - resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} - - tsconfck@3.1.0: - resolution: {integrity: sha512-CMjc5zMnyAjcS9sPLytrbFmj89st2g+JYtY/c02ug4Q+CZaAtCgbyviI0n1YvjZE/pzoc6FbNsINS13DOL1B9w==} - engines: {node: ^18 || >=20} - hasBin: true - peerDependencies: - typescript: ^5.0.0 - peerDependenciesMeta: - typescript: - optional: true - - tsconfig-paths@3.14.2: - resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==} - - tsconfig-paths@4.2.0: - resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} - engines: {node: '>=6'} - - tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - - tsup@8.0.2: - resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} - engines: {node: '>=18'} - hasBin: true - peerDependencies: - '@microsoft/api-extractor': ^7.36.0 - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.5.0' - peerDependenciesMeta: - '@microsoft/api-extractor': - optional: true - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - - tsutils@3.21.0: - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - - turbo-darwin-64@2.0.5: - resolution: {integrity: sha512-t/9XpWYIjOhIHUdwiR47SYBGYHkR1zWLxTkTNKZwCSn8BN0cfjPZ1BR6kcwYGxLGBhtl5GBf6A29nq2K7iwAjg==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.0.5: - resolution: {integrity: sha512-//5y4RJvnal8CttOLBwlaBqblcQb1qTlIxLN+I8O3E3rPuvHOupNKB9ZJxYIQ8oWf8ns8Ec8cxQ0GSBLTJIMtA==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.0.5: - resolution: {integrity: sha512-LDtEDU2Gm8p3lKu//aHXZFRKUCVu68BNF9LQ+HmiCKFpNyK7khpMTxIAAUhDqt+AzlrbxtrxcCpCJaWg1JDjHg==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.0.5: - resolution: {integrity: sha512-84wdrzntErBNxkHcwHxiTZdaginQAxGPnwLTyZj8lpUYI7okPoxy3jKpUeMHN3adm3iDedl/x0mYSIvVVkmOiA==} - cpu: [arm64] - os: [linux] - - turbo-stream@2.2.0: - resolution: {integrity: sha512-FKFg7A0To1VU4CH9YmSMON5QphK0BXjSoiC7D9yMh+mEEbXLUP9qJ4hEt1qcjKtzncs1OpcnjZO8NgrlVbZH+g==} - - turbo-windows-64@2.0.5: - resolution: {integrity: sha512-SgaFZ0VW6kHCJogLNuLEleAauAJx2Y48wazZGVRmBpgSUS2AylXesaBMhJaEScYqLz7mIRn6KOgwM8D4wTxI9g==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.0.5: - resolution: {integrity: sha512-foUxLOZoru0IRNIxm53fkfM4ubas9P0nTFjIcHtd+E8YHeogt8GqTweNre2e6ri1EHDo71emmuQgpuoFCOXZMg==} - cpu: [arm64] - os: [win32] - - turbo@2.0.5: - resolution: {integrity: sha512-+6+hcWr4nwuESlKqUc626HMOTd3QT8hUOc9QM45PP1d4nErGkNOgExm4Pcov3in7LTuadMnB0gcd/BuzkEDIPw==} - - 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-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - - type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - - type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} - engines: {node: '>= 0.4'} - - typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} - engines: {node: '>= 0.4'} - - typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} - engines: {node: '>= 0.4'} - - typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - - ufo@1.3.2: - resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} - - unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - - undici@6.19.2: - resolution: {integrity: sha512-JfjKqIauur3Q6biAtHJ564e3bWa8VvT+7cSiOJHFbX4Erv6CLGDpg8z+Fmg/1OI/47RA+GI2QZaF48SSaLvyBA==} - engines: {node: '>=18.17'} - - unified-engine@11.2.0: - resolution: {integrity: sha512-H9wEDpBSM0cpEUuuYAOIiPzLCVN0pjASZZ6FFNzgzYS/HHzl9tArk/ereOMGtcF8m8vgjzw+HrU3YN7oenT7Ww==} - - unified@10.1.2: - resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} - - unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} - - unique-filename@3.0.0: - resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unique-slug@4.0.0: - resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - unist-util-generated@2.0.1: - resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - - unist-util-inspect@8.0.0: - resolution: {integrity: sha512-/3Wn/wU6/H6UEo4FoYUeo8KUePN8ERiZpQYFWYoihOsr1DoDuv80PeB0hobVZyYSvALa2e556bG1A1/AbwU4yg==} - - unist-util-is@5.2.1: - resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position-from-estree@1.1.2: - resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@4.0.4: - resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} - - unist-util-remove-position@4.0.2: - resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - - unist-util-stringify-position@3.0.3: - resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@5.1.3: - resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@4.1.2: - resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - - 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'} - - untildify@4.0.0: - resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} - engines: {node: '>=8'} - - update-browserslist-db@1.0.13: - resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-browserslist-db@1.0.16: - resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - util@0.12.5: - resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uvu@0.5.6: - resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} - engines: {node: '>=8'} - - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} - engines: {node: '>=10.12.0'} - - validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} - - validate-npm-package-name@5.0.0: - resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vfile-message@3.1.4: - resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} - - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile-reporter@8.1.0: - resolution: {integrity: sha512-NfHyHdkCcy0BsXiLA3nId29TY7W7hgpc8nd8Soe3imATx5N4/+mkLYdMR+Y6Zvu6BXMMi0FZsD4FLCm1dN85Pg==} - - vfile-sort@4.0.0: - resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} - - vfile-statistics@3.0.0: - resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} - - vfile@5.3.7: - resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} - - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} - - vite-node@0.28.5: - resolution: {integrity: sha512-LmXb9saMGlrMZbXTvOveJKwMTBTNUH66c8rJnQ0ZPNX+myPEol64+szRzXtV5ORb0Hb/91yq+/D3oERoyAt6LA==} - engines: {node: '>=v14.16.0'} - hasBin: true - - vite-tsconfig-paths@4.3.2: - resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} - peerDependencies: - vite: '*' - peerDependenciesMeta: - vite: - optional: true - - vite@4.5.0: - resolution: {integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==} - engines: {node: ^14.18.0 || >=16.0.0} - hasBin: true - peerDependencies: - '@types/node': '>= 14' - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - vite@5.1.4: - resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} - engines: {node: ^18.0.0 || >=20.0.0} - hasBin: true - peerDependencies: - '@types/node': ^18.0.0 || >=20.0.0 - less: '*' - lightningcss: ^1.21.0 - sass: '*' - stylus: '*' - sugarss: '*' - terser: ^5.4.0 - peerDependenciesMeta: - '@types/node': - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - - w3c-xmlserializer@4.0.0: - resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} - engines: {node: '>=14'} - - walk-up-path@3.0.1: - resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} - - walker@1.0.8: - resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} - - wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} - - web-encoding@1.1.5: - resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} - - web-streams-polyfill@3.2.1: - resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} - engines: {node: '>= 8'} - - webidl-conversions@4.0.2: - resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} - - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} - - whatwg-encoding@2.0.0: - resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} - engines: {node: '>=12'} - - whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} - - whatwg-url@11.0.0: - resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} - engines: {node: '>=12'} - - whatwg-url@7.1.0: - resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} - - which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} - - which-builtin-type@1.1.3: - resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} - engines: {node: '>= 0.4'} - - which-collection@1.0.1: - resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} - - which-typed-array@1.1.13: - resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} - engines: {node: '>= 0.4'} - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - - which@3.0.1: - resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - hasBin: true - - 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'} - - 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} - - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.14.2: - resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} - 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 - - xml-name-validator@4.0.0: - resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} - engines: {node: '>=12'} - - xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - - 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==} - - yaml@2.3.4: - resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} - engines: {node: '>= 14'} - - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.2: - resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} - engines: {node: '>=12'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@ampproject/remapping@2.2.1': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - - '@babel/code-frame@7.23.5': - dependencies: - '@babel/highlight': 7.23.4 - chalk: 2.4.2 - - '@babel/code-frame@7.24.7': - dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 - - '@babel/compat-data@7.23.5': {} - - '@babel/core@7.23.7': - dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7) - '@babel/helpers': 7.23.7 - '@babel/parser': 7.23.6 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.7 - '@babel/types': 7.23.6 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/core@7.24.0': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helpers': 7.24.0 - '@babel/parser': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - convert-source-map: 2.0.0 - debug: 4.3.4 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/eslint-parser@7.23.3(@babel/core@7.24.0)(eslint@8.57.0)': - dependencies: - '@babel/core': 7.24.0 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 - semver: 6.3.1 - - '@babel/generator@7.23.6': - dependencies: - '@babel/types': 7.24.0 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/generator@7.24.7': - dependencies: - '@babel/types': 7.24.7 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-annotate-as-pure@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-compilation-targets@7.23.6': - dependencies: - '@babel/compat-data': 7.23.5 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.22.2 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.22.20(@babel/core@7.24.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.7 - semver: 6.3.1 - - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - - '@babel/helper-function-name@7.24.7': - dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-member-expression-to-functions@7.23.0': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-module-imports@7.22.15': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.22.15 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 - - '@babel/helper-optimise-call-expression@7.22.5': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-plugin-utils@7.22.5': {} - - '@babel/helper-plugin-utils@7.24.7': {} - - '@babel/helper-replace-supers@7.22.20(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - - '@babel/helper-simple-access@7.22.5': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-split-export-declaration@7.22.6': - dependencies: - '@babel/types': 7.24.0 - - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/helper-string-parser@7.23.4': {} - - '@babel/helper-string-parser@7.24.7': {} - - '@babel/helper-validator-identifier@7.22.20': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.23.5': {} - - '@babel/helper-validator-option@7.24.7': {} - - '@babel/helpers@7.23.7': - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.24.0': - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.0 - '@babel/types': 7.24.0 - transitivePeerDependencies: - - supports-color - - '@babel/highlight@7.23.4': - dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 - - '@babel/highlight@7.24.7': - dependencies: - '@babel/helper-validator-identifier': 7.24.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.1 - - '@babel/parser@7.23.6': - dependencies: - '@babel/types': 7.24.0 - - '@babel/parser@7.24.0': - dependencies: - '@babel/types': 7.24.0 - - '@babel/parser@7.24.7': - dependencies: - '@babel/types': 7.24.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-simple-access': 7.22.5 - - '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7)': - dependencies: - '@babel/core': 7.23.7 - '@babel/helper-plugin-utils': 7.22.5 - - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.0) - '@babel/types': 7.24.7 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.7 - - '@babel/plugin-transform-typescript@7.23.4(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.24.0) - '@babel/helper-plugin-utils': 7.24.7 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - - '@babel/preset-react@7.24.7(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.0) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.0) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.0) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.0) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.23.3(@babel/core@7.24.0)': - dependencies: - '@babel/core': 7.24.0 - '@babel/helper-plugin-utils': 7.24.7 - '@babel/helper-validator-option': 7.24.7 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.0) - '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-transform-typescript': 7.23.4(@babel/core@7.24.0) - - '@babel/runtime@7.23.4': - dependencies: - regenerator-runtime: 0.14.0 - - '@babel/template@7.22.15': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - - '@babel/template@7.24.0': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - - '@babel/template@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - - '@babel/traverse@7.23.7': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.24.0': - dependencies: - '@babel/code-frame': 7.23.5 - '@babel/generator': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/traverse@7.24.7': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/types': 7.24.7 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.23.6': - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.24.0': - dependencies: - '@babel/helper-string-parser': 7.23.4 - '@babel/helper-validator-identifier': 7.22.20 - to-fast-properties: 2.0.0 - - '@babel/types@7.24.7': - dependencies: - '@babel/helper-string-parser': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@bcoe/v8-coverage@0.2.3': {} - - '@emotion/hash@0.9.1': {} - - '@esbuild/android-arm64@0.17.6': - optional: true - - '@esbuild/android-arm64@0.18.20': - optional: true - - '@esbuild/android-arm64@0.19.7': - optional: true - - '@esbuild/android-arm@0.17.6': - optional: true - - '@esbuild/android-arm@0.18.20': - optional: true - - '@esbuild/android-arm@0.19.7': - optional: true - - '@esbuild/android-x64@0.17.6': - optional: true - - '@esbuild/android-x64@0.18.20': - optional: true - - '@esbuild/android-x64@0.19.7': - optional: true - - '@esbuild/darwin-arm64@0.17.6': - optional: true - - '@esbuild/darwin-arm64@0.18.20': - optional: true - - '@esbuild/darwin-arm64@0.19.7': - optional: true - - '@esbuild/darwin-x64@0.17.6': - optional: true - - '@esbuild/darwin-x64@0.18.20': - optional: true - - '@esbuild/darwin-x64@0.19.7': - optional: true - - '@esbuild/freebsd-arm64@0.17.6': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': - optional: true - - '@esbuild/freebsd-arm64@0.19.7': - optional: true - - '@esbuild/freebsd-x64@0.17.6': - optional: true - - '@esbuild/freebsd-x64@0.18.20': - optional: true - - '@esbuild/freebsd-x64@0.19.7': - optional: true - - '@esbuild/linux-arm64@0.17.6': - optional: true - - '@esbuild/linux-arm64@0.18.20': - optional: true - - '@esbuild/linux-arm64@0.19.7': - optional: true - - '@esbuild/linux-arm@0.17.6': - optional: true - - '@esbuild/linux-arm@0.18.20': - optional: true - - '@esbuild/linux-arm@0.19.7': - optional: true - - '@esbuild/linux-ia32@0.17.6': - optional: true - - '@esbuild/linux-ia32@0.18.20': - optional: true - - '@esbuild/linux-ia32@0.19.7': - optional: true - - '@esbuild/linux-loong64@0.17.6': - optional: true - - '@esbuild/linux-loong64@0.18.20': - optional: true - - '@esbuild/linux-loong64@0.19.7': - optional: true - - '@esbuild/linux-mips64el@0.17.6': - optional: true - - '@esbuild/linux-mips64el@0.18.20': - optional: true - - '@esbuild/linux-mips64el@0.19.7': - optional: true - - '@esbuild/linux-ppc64@0.17.6': - optional: true - - '@esbuild/linux-ppc64@0.18.20': - optional: true - - '@esbuild/linux-ppc64@0.19.7': - optional: true - - '@esbuild/linux-riscv64@0.17.6': - optional: true - - '@esbuild/linux-riscv64@0.18.20': - optional: true - - '@esbuild/linux-riscv64@0.19.7': - optional: true - - '@esbuild/linux-s390x@0.17.6': - optional: true - - '@esbuild/linux-s390x@0.18.20': - optional: true - - '@esbuild/linux-s390x@0.19.7': - optional: true - - '@esbuild/linux-x64@0.17.6': - optional: true - - '@esbuild/linux-x64@0.18.20': - optional: true - - '@esbuild/linux-x64@0.19.7': - optional: true - - '@esbuild/netbsd-x64@0.17.6': - optional: true - - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.19.7': - optional: true - - '@esbuild/openbsd-x64@0.17.6': - optional: true - - '@esbuild/openbsd-x64@0.18.20': - optional: true - - '@esbuild/openbsd-x64@0.19.7': - optional: true - - '@esbuild/sunos-x64@0.17.6': - optional: true - - '@esbuild/sunos-x64@0.18.20': - optional: true - - '@esbuild/sunos-x64@0.19.7': - optional: true - - '@esbuild/win32-arm64@0.17.6': - optional: true - - '@esbuild/win32-arm64@0.18.20': - optional: true - - '@esbuild/win32-arm64@0.19.7': - optional: true - - '@esbuild/win32-ia32@0.17.6': - optional: true - - '@esbuild/win32-ia32@0.18.20': - optional: true - - '@esbuild/win32-ia32@0.19.7': - optional: true - - '@esbuild/win32-x64@0.17.6': - optional: true - - '@esbuild/win32-x64@0.18.20': - optional: true - - '@esbuild/win32-x64@0.19.7': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.0': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.0': {} - - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.2': {} - - '@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 - - '@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': 20.11.24 - chalk: 4.1.2 - jest-message-util: 29.7.0 - jest-util: 29.7.0 - slash: 3.0.0 - - '@jest/core@29.7.0': - dependencies: - '@jest/console': 29.7.0 - '@jest/reporters': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@types/node': 20.11.24 - 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@20.11.24) - 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 - 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 - micromatch: 4.0.5 - 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': 20.11.24 - jest-mock: 29.7.0 - - '@jest/expect-utils@29.7.0': - dependencies: - jest-get-type: 29.6.3 - - '@jest/expect@29.7.0': - dependencies: - expect: 29.7.0 - jest-snapshot: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/fake-timers@29.7.0': - dependencies: - '@jest/types': 29.6.3 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.24 - jest-message-util: 29.7.0 - jest-mock: 29.7.0 - jest-util: 29.7.0 - - '@jest/globals@29.7.0': - dependencies: - '@jest/environment': 29.7.0 - '@jest/expect': 29.7.0 - '@jest/types': 29.6.3 - jest-mock: 29.7.0 - transitivePeerDependencies: - - supports-color - - '@jest/reporters@29.7.0': - dependencies: - '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 29.7.0 - '@jest/test-result': 29.7.0 - '@jest/transform': 29.7.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.11.24 - 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.1 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - 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.2.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': - dependencies: - '@babel/core': 7.24.0 - '@jest/types': 29.6.3 - '@jridgewell/trace-mapping': 0.3.25 - babel-plugin-istanbul: 6.1.1 - 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.5 - 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': 20.11.24 - '@types/yargs': 17.0.32 - chalk: 4.1.2 - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.4.15': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 - - '@jspm/core@2.0.1': {} - - '@mdx-js/mdx@2.3.0': - dependencies: - '@types/estree-jsx': 1.0.3 - '@types/mdx': 2.0.10 - estree-util-build-jsx: 2.2.2 - estree-util-is-identifier-name: 2.1.0 - estree-util-to-js: 1.2.0 - estree-walker: 3.0.3 - hast-util-to-estree: 2.3.3 - markdown-extensions: 1.1.1 - periscopic: 3.1.0 - remark-mdx: 2.3.0 - remark-parse: 10.0.2 - remark-rehype: 10.1.0 - unified: 10.1.2 - unist-util-position-from-estree: 1.1.2 - unist-util-stringify-position: 3.0.3 - unist-util-visit: 4.1.2 - vfile: 5.3.7 - transitivePeerDependencies: - - supports-color - - '@microsoft/tsdoc-config@0.16.2': - dependencies: - '@microsoft/tsdoc': 0.14.2 - ajv: 6.12.6 - jju: 1.4.0 - resolve: 1.19.0 - - '@microsoft/tsdoc@0.14.2': {} - - '@next/env@14.1.1': {} - - '@next/eslint-plugin-next@14.1.1': - dependencies: - glob: 10.3.10 - - '@next/swc-darwin-arm64@14.1.1': - optional: true - - '@next/swc-darwin-x64@14.1.1': - optional: true - - '@next/swc-linux-arm64-gnu@14.1.1': - optional: true - - '@next/swc-linux-arm64-musl@14.1.1': - optional: true - - '@next/swc-linux-x64-gnu@14.1.1': - optional: true - - '@next/swc-linux-x64-musl@14.1.1': - optional: true - - '@next/swc-win32-arm64-msvc@14.1.1': - optional: true - - '@next/swc-win32-ia32-msvc@14.1.1': - optional: true - - '@next/swc-win32-x64-msvc@14.1.1': - optional: true - - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': - dependencies: - eslint-scope: 5.1.1 - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 - - '@npmcli/config@8.2.0': - dependencies: - '@npmcli/map-workspaces': 3.0.4 - ci-info: 4.0.0 - ini: 4.1.1 - nopt: 7.2.0 - proc-log: 3.0.0 - read-package-json-fast: 3.0.2 - semver: 7.5.4 - walk-up-path: 3.0.1 - - '@npmcli/fs@3.1.0': - dependencies: - semver: 7.5.4 - - '@npmcli/git@4.1.0': - dependencies: - '@npmcli/promise-spawn': 6.0.2 - lru-cache: 7.18.3 - npm-pick-manifest: 8.0.2 - proc-log: 3.0.0 - promise-inflight: 1.0.1 - promise-retry: 2.0.1 - semver: 7.5.4 - which: 3.0.1 - transitivePeerDependencies: - - bluebird - - '@npmcli/map-workspaces@3.0.4': - dependencies: - '@npmcli/name-from-folder': 2.0.0 - glob: 10.3.10 - minimatch: 9.0.3 - read-package-json-fast: 3.0.2 - - '@npmcli/name-from-folder@2.0.0': {} - - '@npmcli/package-json@4.0.1': - dependencies: - '@npmcli/git': 4.1.0 - glob: 10.3.10 - hosted-git-info: 6.1.1 - json-parse-even-better-errors: 3.0.0 - normalize-package-data: 5.0.0 - proc-log: 3.0.0 - semver: 7.5.4 - transitivePeerDependencies: - - bluebird - - '@npmcli/promise-spawn@6.0.2': - dependencies: - which: 3.0.1 - - '@pkgjs/parseargs@0.11.0': - optional: true - - '@pkgr/core@0.1.0': {} - - '@pkgr/utils@2.4.2': - dependencies: - cross-spawn: 7.0.3 - fast-glob: 3.3.2 - is-glob: 4.0.3 - open: 9.1.0 - picocolors: 1.0.1 - tslib: 2.6.2 - - '@remix-run/dev@2.9.2(@remix-run/react@2.9.2)(typescript@5.3.3)(vite@5.1.4)': - dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.24.7 - '@babel/parser': 7.24.7 - '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.0) - '@babel/preset-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/traverse': 7.24.7 - '@babel/types': 7.24.7 - '@mdx-js/mdx': 2.3.0 - '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.9.2(typescript@5.3.3) - '@remix-run/react': 2.9.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3) - '@remix-run/router': 1.16.1 - '@remix-run/server-runtime': 2.9.2(typescript@5.3.3) - '@types/mdx': 2.0.10 - '@vanilla-extract/integration': 6.2.4 - arg: 5.0.2 - cacache: 17.1.4 - chalk: 4.1.2 - chokidar: 3.5.3 - cross-spawn: 7.0.3 - dotenv: 16.3.1 - es-module-lexer: 1.4.1 - esbuild: 0.17.6 - esbuild-plugins-node-modules-polyfill: 1.6.1(esbuild@0.17.6) - execa: 5.1.1 - exit-hook: 2.2.1 - express: 4.18.3 - fs-extra: 10.1.0 - get-port: 5.1.1 - gunzip-maybe: 1.4.2 - jsesc: 3.0.2 - json5: 2.2.3 - lodash: 4.17.21 - lodash.debounce: 4.0.8 - minimatch: 9.0.3 - ora: 5.4.1 - picocolors: 1.0.1 - picomatch: 2.3.1 - pidtree: 0.6.0 - postcss: 8.4.38 - postcss-discard-duplicates: 5.1.0(postcss@8.4.38) - postcss-load-config: 4.0.2(postcss@8.4.38) - postcss-modules: 6.0.0(postcss@8.4.38) - prettier: 2.8.8 - pretty-ms: 7.0.1 - react-refresh: 0.14.0 - remark-frontmatter: 4.0.1 - remark-mdx-frontmatter: 1.1.1 - semver: 7.5.4 - set-cookie-parser: 2.6.0 - tar-fs: 2.1.1 - tsconfig-paths: 4.2.0 - typescript: 5.3.3 - vite: 5.1.4 - ws: 7.5.9 - transitivePeerDependencies: - - '@types/node' - - bluebird - - bufferutil - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - - ts-node - - utf-8-validate - - '@remix-run/eslint-config@2.10.0(eslint@8.57.0)(react@18.2.0)(typescript@5.3.3)': - dependencies: - '@babel/core': 7.24.0 - '@babel/eslint-parser': 7.23.3(@babel/core@7.24.0)(eslint@8.57.0) - '@babel/preset-react': 7.24.7(@babel/core@7.24.0) - '@rushstack/eslint-patch': 1.6.0 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 - eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.0)(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-jest-dom: 4.0.3(eslint@8.57.0) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-node: 11.1.0(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.0)(typescript@5.3.3) - react: 18.2.0 - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - jest - - supports-color - - '@remix-run/node@2.9.2(typescript@5.3.3)': - dependencies: - '@remix-run/server-runtime': 2.9.2(typescript@5.3.3) - '@remix-run/web-fetch': 4.4.2 - '@web3-storage/multipart-parser': 1.0.0 - cookie-signature: 1.2.1 - source-map-support: 0.5.21 - stream-slice: 0.1.2 - typescript: 5.3.3 - undici: 6.19.2 - - '@remix-run/react@2.9.2(react-dom@18.2.0)(react@18.2.0)(typescript@5.3.3)': - dependencies: - '@remix-run/router': 1.16.1 - '@remix-run/server-runtime': 2.9.2(typescript@5.3.3) - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.23.1(react@18.2.0) - react-router-dom: 6.23.1(react-dom@18.2.0)(react@18.2.0) - turbo-stream: 2.2.0 - typescript: 5.3.3 - - '@remix-run/router@1.16.1': {} - - '@remix-run/server-runtime@2.9.2(typescript@5.3.3)': - dependencies: - '@remix-run/router': 1.16.1 - '@types/cookie': 0.6.0 - '@web3-storage/multipart-parser': 1.0.0 - cookie: 0.6.0 - set-cookie-parser: 2.6.0 - source-map: 0.7.4 - turbo-stream: 2.2.0 - typescript: 5.3.3 - - '@remix-run/web-blob@3.1.0': - dependencies: - '@remix-run/web-stream': 1.1.0 - web-encoding: 1.1.5 - - '@remix-run/web-fetch@4.4.2': - dependencies: - '@remix-run/web-blob': 3.1.0 - '@remix-run/web-file': 3.1.0 - '@remix-run/web-form-data': 3.1.0 - '@remix-run/web-stream': 1.1.0 - '@web3-storage/multipart-parser': 1.0.0 - abort-controller: 3.0.0 - data-uri-to-buffer: 3.0.1 - mrmime: 1.0.1 - - '@remix-run/web-file@3.1.0': - dependencies: - '@remix-run/web-blob': 3.1.0 - - '@remix-run/web-form-data@3.1.0': - dependencies: - web-encoding: 1.1.5 - - '@remix-run/web-stream@1.1.0': - dependencies: - web-streams-polyfill: 3.2.1 - - '@rollup/rollup-android-arm-eabi@4.5.2': - optional: true - - '@rollup/rollup-android-arm64@4.5.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.5.2': - optional: true - - '@rollup/rollup-darwin-x64@4.5.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.5.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.5.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.5.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.5.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.5.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.5.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.5.2': - optional: true - - '@rushstack/eslint-patch@1.6.0': {} - - '@sinclair/typebox@0.27.8': {} - - '@sinonjs/commons@3.0.0': - dependencies: - type-detect: 4.0.8 - - '@sinonjs/fake-timers@10.3.0': - dependencies: - '@sinonjs/commons': 3.0.0 - - '@storybook/csf@0.0.1': - dependencies: - lodash: 4.17.21 - - '@swc/helpers@0.5.2': - dependencies: - tslib: 2.6.2 - - '@testing-library/dom@8.20.1': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.23.4 - '@types/aria-query': 5.0.4 - aria-query: 5.1.3 - chalk: 4.1.2 - dom-accessibility-api: 0.5.16 - lz-string: 1.5.0 - pretty-format: 27.5.1 - - '@tootallnate/once@2.0.0': {} - - '@ts-morph/common@0.11.1': - dependencies: - fast-glob: 3.3.2 - minimatch: 3.1.2 - mkdirp: 1.0.4 - path-browserify: 1.0.1 - - '@types/acorn@4.0.6': - dependencies: - '@types/estree': 1.0.5 - - '@types/aria-query@5.0.4': {} - - '@types/babel__core@7.20.5': - dependencies: - '@babel/parser': 7.23.6 - '@babel/types': 7.23.6 - '@types/babel__generator': 7.6.7 - '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.5 - - '@types/babel__generator@7.6.7': - dependencies: - '@babel/types': 7.24.0 - - '@types/babel__template@7.4.4': - dependencies: - '@babel/parser': 7.24.0 - '@babel/types': 7.24.0 - - '@types/babel__traverse@7.20.5': - dependencies: - '@babel/types': 7.24.0 - - '@types/body-parser@1.19.5': - dependencies: - '@types/connect': 3.4.38 - '@types/node': 20.11.24 - - '@types/concat-stream@2.0.3': - dependencies: - '@types/node': 20.11.24 - - '@types/connect@3.4.38': - dependencies: - '@types/node': 20.11.24 - - '@types/cookie@0.6.0': {} - - '@types/cookiejar@2.1.5': {} - - '@types/cors@2.8.17': - dependencies: - '@types/node': 20.11.24 - - '@types/debug@4.1.12': - dependencies: - '@types/ms': 0.7.34 - - '@types/estree-jsx@1.0.3': - dependencies: - '@types/estree': 1.0.5 - - '@types/estree@1.0.5': {} - - '@types/express-serve-static-core@4.17.41': - dependencies: - '@types/node': 20.11.24 - '@types/qs': 6.9.10 - '@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.17.41 - '@types/qs': 6.9.10 - '@types/serve-static': 1.15.5 - - '@types/graceful-fs@4.1.9': - dependencies: - '@types/node': 20.11.24 - - '@types/hast@2.3.8': - dependencies: - '@types/unist': 2.0.10 - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 3.0.2 - - '@types/http-errors@2.0.4': {} - - '@types/is-empty@1.2.3': {} - - '@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/jest@29.5.12': - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - - '@types/jsdom@20.0.1': - dependencies: - '@types/node': 20.11.24 - '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 - - '@types/json-schema@7.0.15': {} - - '@types/json5@0.0.29': {} - - '@types/mdast@3.0.15': - dependencies: - '@types/unist': 2.0.10 - - '@types/mdast@4.0.3': - dependencies: - '@types/unist': 3.0.2 - - '@types/mdx@2.0.10': {} - - '@types/methods@1.1.4': {} - - '@types/mime@1.3.5': {} - - '@types/mime@3.0.4': {} - - '@types/morgan@1.9.9': - dependencies: - '@types/node': 20.11.24 - - '@types/ms@0.7.34': {} - - '@types/node@20.11.24': - dependencies: - undici-types: 5.26.5 - - '@types/normalize-package-data@2.4.4': {} - - '@types/prop-types@15.7.11': {} - - '@types/qs@6.9.10': {} - - '@types/range-parser@1.2.7': {} - - '@types/react-dom@18.2.19': - dependencies: - '@types/react': 18.2.62 - - '@types/react@18.2.62': - dependencies: - '@types/prop-types': 15.7.11 - '@types/scheduler': 0.16.8 - csstype: 3.1.2 - - '@types/scheduler@0.16.8': {} - - '@types/semver@7.5.6': {} - - '@types/send@0.17.4': - dependencies: - '@types/mime': 1.3.5 - '@types/node': 20.11.24 - - '@types/serve-static@1.15.5': - dependencies: - '@types/http-errors': 2.0.4 - '@types/mime': 3.0.4 - '@types/node': 20.11.24 - - '@types/stack-utils@2.0.3': {} - - '@types/superagent@8.1.1': - dependencies: - '@types/cookiejar': 2.1.5 - '@types/methods': 1.1.4 - '@types/node': 20.11.24 - - '@types/supertest@6.0.2': - dependencies: - '@types/methods': 1.1.4 - '@types/superagent': 8.1.1 - - '@types/supports-color@8.1.3': {} - - '@types/tough-cookie@4.0.5': {} - - '@types/unist@2.0.10': {} - - '@types/unist@3.0.2': {} - - '@types/yargs-parser@21.0.3': {} - - '@types/yargs@17.0.32': - dependencies: - '@types/yargs-parser': 21.0.3 - - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/type-utils': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@6.12.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 - eslint: 8.57.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - - '@typescript-eslint/scope-manager@6.12.0': - dependencies: - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/visitor-keys': 6.12.0 - - '@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/type-utils@6.12.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@5.62.0': {} - - '@typescript-eslint/types@6.12.0': {} - - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@6.12.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/visitor-keys': 6.12.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) - eslint: 8.57.0 - eslint-scope: 5.1.1 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@6.12.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.3.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@5.62.0': - dependencies: - '@typescript-eslint/types': 5.62.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@6.12.0': - dependencies: - '@typescript-eslint/types': 6.12.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - '@vanilla-extract/babel-plugin-debug-ids@1.0.3': - dependencies: - '@babel/core': 7.24.0 - transitivePeerDependencies: - - supports-color - - '@vanilla-extract/css@1.14.0': - dependencies: - '@emotion/hash': 0.9.1 - '@vanilla-extract/private': 1.0.3 - chalk: 4.1.2 - css-what: 6.1.0 - cssesc: 3.0.0 - csstype: 3.1.2 - deep-object-diff: 1.1.9 - deepmerge: 4.3.1 - media-query-parser: 2.0.2 - modern-ahocorasick: 1.0.1 - outdent: 0.8.0 - - '@vanilla-extract/integration@6.2.4': - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@vanilla-extract/babel-plugin-debug-ids': 1.0.3 - '@vanilla-extract/css': 1.14.0 - esbuild: 0.17.6 - eval: 0.1.8 - find-up: 5.0.0 - javascript-stringify: 2.1.0 - lodash: 4.17.21 - mlly: 1.4.2 - outdent: 0.8.0 - vite: 4.5.0 - vite-node: 0.28.5 - transitivePeerDependencies: - - '@types/node' - - less - - lightningcss - - sass - - stylus - - sugarss - - supports-color - - terser - - '@vanilla-extract/private@1.0.3': {} - - '@vercel/analytics@1.3.1(react@18.2.0)': - dependencies: - react: 18.2.0 - server-only: 0.0.1 - - '@vercel/remix@2.9.2-patch.2(@remix-run/dev@2.9.2)(@remix-run/node@2.9.2)(@remix-run/server-runtime@2.9.2)(react-dom@18.2.0)(react@18.2.0)': - dependencies: - '@remix-run/dev': 2.9.2(@remix-run/react@2.9.2)(typescript@5.3.3)(vite@5.1.4) - '@remix-run/node': 2.9.2(typescript@5.3.3) - '@remix-run/server-runtime': 2.9.2(typescript@5.3.3) - '@vercel/static-config': 3.0.0 - isbot: 3.8.0 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - ts-morph: 12.0.0 - - '@vercel/static-config@3.0.0': - dependencies: - ajv: 8.6.3 - json-schema-to-ts: 1.6.4 - ts-morph: 12.0.0 - - '@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3)': - dependencies: - '@babel/core': 7.24.0 - '@babel/eslint-parser': 7.23.3(@babel/core@7.24.0)(eslint@8.57.0) - '@rushstack/eslint-patch': 1.6.0 - '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 - eslint-config-prettier: 9.0.0(eslint@8.57.0) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) - eslint-plugin-react: 7.33.2(eslint@8.57.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.3.3) - eslint-plugin-tsdoc: 0.2.17 - eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) - prettier: 3.2.5 - prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.3.3 - transitivePeerDependencies: - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - jest - - supports-color - - '@vitejs/plugin-react@4.2.1(vite@5.1.4)': - dependencies: - '@babel/core': 7.23.7 - '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7) - '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7) - '@types/babel__core': 7.20.5 - react-refresh: 0.14.0 - vite: 5.1.4 - transitivePeerDependencies: - - supports-color - - '@web3-storage/multipart-parser@1.0.0': {} - - '@zxing/text-encoding@0.9.0': - optional: true - - abab@2.0.6: {} - - abbrev@2.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.11.3 - acorn-walk: 8.3.0 - - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - - acorn-walk@8.3.0: {} - - acorn@8.11.3: {} - - agent-base@6.0.2: - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - - aggregate-error@3.1.0: - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - - 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.6.3: - dependencies: - fast-deep-equal: 3.1.3 - json-schema-traverse: 1.0.0 - require-from-string: 2.0.2 - uri-js: 4.4.1 - - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-regex@5.0.1: {} - - ansi-regex@6.0.1: {} - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - 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 - - arg@5.0.2: {} - - argparse@1.0.10: - dependencies: - sprintf-js: 1.0.3 - - argparse@2.0.1: {} - - aria-query@5.1.3: - dependencies: - deep-equal: 2.2.3 - - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 - - array-buffer-byte-length@1.0.0: - dependencies: - call-bind: 1.0.5 - is-array-buffer: 3.0.2 - - array-flatten@1.1.1: {} - - array-includes@3.1.7: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-string: 1.0.7 - - array-union@2.1.0: {} - - array.prototype.findlastindex@1.2.3: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - - array.prototype.flat@1.3.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - array.prototype.flatmap@1.3.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - - array.prototype.tosorted@1.1.2: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-shim-unscopables: 1.0.2 - get-intrinsic: 1.2.2 - - arraybuffer.prototype.slice@1.0.2: - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 - - asap@2.0.6: {} - - ast-types-flow@0.0.8: {} - - astring@1.8.6: {} - - asynciterator.prototype@1.0.0: - dependencies: - has-symbols: 1.0.3 - - asynckit@0.4.0: {} - - autoprefixer@10.4.19(postcss@8.4.38): - dependencies: - browserslist: 4.23.1 - caniuse-lite: 1.0.30001636 - fraction.js: 4.3.7 - normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.38 - postcss-value-parser: 4.2.0 - - available-typed-arrays@1.0.5: {} - - axe-core@4.7.0: {} - - axobject-query@3.2.1: - dependencies: - dequal: 2.0.3 - - babel-jest@29.7.0(@babel/core@7.24.0): - dependencies: - '@babel/core': 7.24.0 - '@jest/transform': 29.7.0 - '@types/babel__core': 7.20.5 - babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.24.0) - chalk: 4.1.2 - graceful-fs: 4.2.11 - slash: 3.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-istanbul@6.1.1: - dependencies: - '@babel/helper-plugin-utils': 7.22.5 - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-instrument: 5.2.1 - test-exclude: 6.0.0 - transitivePeerDependencies: - - supports-color - - babel-plugin-jest-hoist@29.6.3: - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 - '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.5 - - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.0): - dependencies: - '@babel/core': 7.24.0 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.0) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.0) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.0) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.0) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.0) - - babel-preset-jest@29.6.3(@babel/core@7.24.0): - dependencies: - '@babel/core': 7.24.0 - babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) - - bail@2.0.2: {} - - balanced-match@1.0.2: {} - - base64-js@1.5.1: {} - - basic-auth@2.0.1: - dependencies: - safe-buffer: 5.1.2 - - big-integer@1.6.52: {} - - binary-extensions@2.2.0: {} - - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - - body-parser@1.20.2: - dependencies: - bytes: 3.1.2 - content-type: 1.0.5 - debug: 2.6.9 - 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.11.0 - raw-body: 2.5.2 - type-is: 1.6.18 - unpipe: 1.0.0 - transitivePeerDependencies: - - supports-color - - bplist-parser@0.2.0: - dependencies: - big-integer: 1.6.52 - - 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 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - browserify-zlib@0.1.4: - dependencies: - pako: 0.2.9 - - browserslist@4.22.2: - dependencies: - caniuse-lite: 1.0.30001593 - electron-to-chromium: 1.4.622 - node-releases: 2.0.14 - update-browserslist-db: 1.0.13(browserslist@4.22.2) - - browserslist@4.23.1: - dependencies: - caniuse-lite: 1.0.30001636 - electron-to-chromium: 1.4.811 - node-releases: 2.0.14 - update-browserslist-db: 1.0.16(browserslist@4.23.1) - - bs-logger@0.2.6: - dependencies: - fast-json-stable-stringify: 2.1.0 - - bser@2.1.1: - dependencies: - node-int64: 0.4.0 - - buffer-from@1.1.2: {} - - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - - builtin-modules@3.3.0: {} - - builtins@5.0.1: - dependencies: - semver: 7.5.4 - - bundle-name@3.0.0: - dependencies: - run-applescript: 5.0.0 - - bundle-require@4.0.2(esbuild@0.19.7): - dependencies: - esbuild: 0.19.7 - load-tsconfig: 0.2.5 - - busboy@1.6.0: - dependencies: - streamsearch: 1.1.0 - - bytes@3.1.2: {} - - cac@6.7.14: {} - - cacache@17.1.4: - dependencies: - '@npmcli/fs': 3.1.0 - fs-minipass: 3.0.3 - glob: 10.3.10 - lru-cache: 7.18.3 - minipass: 7.0.4 - minipass-collect: 1.0.2 - minipass-flush: 1.0.5 - minipass-pipeline: 1.2.4 - p-map: 4.0.0 - ssri: 10.0.5 - tar: 6.2.0 - unique-filename: 3.0.0 - - call-bind@1.0.5: - dependencies: - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - set-function-length: 1.1.1 - - call-bind@1.0.7: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - function-bind: 1.1.2 - get-intrinsic: 1.2.4 - set-function-length: 1.2.2 - - callsites@3.1.0: {} - - camelcase@5.3.1: {} - - camelcase@6.3.0: {} - - caniuse-lite@1.0.30001593: {} - - caniuse-lite@1.0.30001636: {} - - ccount@2.0.1: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - char-regex@1.0.2: {} - - character-entities-html4@2.1.0: {} - - character-entities-legacy@1.1.4: {} - - character-entities-legacy@3.0.0: {} - - character-entities@1.2.4: {} - - character-entities@2.0.2: {} - - character-reference-invalid@1.1.4: {} - - character-reference-invalid@2.0.1: {} - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - 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 - - chownr@1.1.4: {} - - chownr@2.0.0: {} - - ci-info@3.9.0: {} - - ci-info@4.0.0: {} - - cjs-module-lexer@1.2.3: {} - - clean-regexp@1.0.0: - dependencies: - escape-string-regexp: 1.0.5 - - clean-stack@2.2.0: {} - - cli-cursor@3.1.0: - dependencies: - restore-cursor: 3.1.0 - - cli-spinners@2.9.2: {} - - 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 - - clone@1.0.4: {} - - co@4.6.0: {} - - code-block-writer@10.1.1: {} - - 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-name@1.1.3: {} - - color-name@1.1.4: {} - - combined-stream@1.0.8: - dependencies: - delayed-stream: 1.0.0 - - comma-separated-tokens@2.0.3: {} - - commander@4.1.1: {} - - component-emitter@1.3.1: {} - - concat-map@0.0.1: {} - - concat-stream@2.0.0: - dependencies: - buffer-from: 1.1.2 - inherits: 2.0.4 - readable-stream: 3.6.2 - typedarray: 0.0.6 - - content-disposition@0.5.4: - dependencies: - safe-buffer: 5.2.1 - - content-type@1.0.5: {} - - convert-source-map@2.0.0: {} - - cookie-signature@1.0.6: {} - - cookie-signature@1.2.1: {} - - cookie@0.5.0: {} - - cookie@0.6.0: {} - - cookiejar@2.1.4: {} - - core-util-is@1.0.3: {} - - cors@2.8.5: - dependencies: - object-assign: 4.1.1 - vary: 1.1.2 - - create-jest@29.7.0(@types/node@20.11.24): - 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@20.11.24) - jest-util: 29.7.0 - prompts: 2.4.2 - transitivePeerDependencies: - - '@types/node' - - babel-plugin-macros - - supports-color - - ts-node - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - css-what@6.1.0: {} - - cssesc@3.0.0: {} - - cssom@0.3.8: {} - - cssom@0.5.0: {} - - cssstyle@2.3.0: - dependencies: - cssom: 0.3.8 - - csstype@3.1.2: {} - - damerau-levenshtein@1.0.8: {} - - data-uri-to-buffer@3.0.1: {} - - data-urls@3.0.2: - dependencies: - abab: 2.0.6 - whatwg-mimetype: 3.0.0 - whatwg-url: 11.0.0 - - debug@2.6.9: - dependencies: - ms: 2.0.0 - - debug@3.2.7: - dependencies: - ms: 2.1.3 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - decimal.js@10.4.3: {} - - decode-named-character-reference@1.0.2: - dependencies: - character-entities: 2.0.2 - - dedent@1.5.1: {} - - deep-equal@2.2.3: - dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.7 - es-get-iterator: 1.1.3 - get-intrinsic: 1.2.4 - is-arguments: 1.1.1 - is-array-buffer: 3.0.2 - is-date-object: 1.0.5 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - isarray: 2.0.5 - object-is: 1.1.6 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - side-channel: 1.0.4 - which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 - - deep-is@0.1.4: {} - - deep-object-diff@1.1.9: {} - - deepmerge@4.3.1: {} - - default-browser-id@3.0.0: - dependencies: - bplist-parser: 0.2.0 - untildify: 4.0.0 - - default-browser@4.0.0: - dependencies: - bundle-name: 3.0.0 - default-browser-id: 3.0.0 - execa: 7.2.0 - titleize: 3.0.0 - - defaults@1.0.4: - dependencies: - clone: 1.0.4 - - define-data-property@1.1.1: - dependencies: - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - - define-data-property@1.1.4: - dependencies: - es-define-property: 1.0.0 - es-errors: 1.3.0 - gopd: 1.0.1 - - define-lazy-prop@3.0.0: {} - - define-properties@1.2.1: - dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.1 - object-keys: 1.1.1 - - delayed-stream@1.0.0: {} - - depd@2.0.0: {} - - dequal@2.0.3: {} - - destroy@1.2.0: {} - - detect-indent@7.0.1: {} - - detect-newline@3.1.0: {} - - detect-newline@4.0.1: {} - - 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@5.1.0: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctrine@2.1.0: - dependencies: - esutils: 2.0.3 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - dom-accessibility-api@0.5.16: {} - - domexception@4.0.0: - dependencies: - webidl-conversions: 7.0.0 - - dotenv@16.0.3: {} - - dotenv@16.3.1: {} - - duplexify@3.7.1: - dependencies: - end-of-stream: 1.4.4 - inherits: 2.0.4 - readable-stream: 2.3.8 - stream-shift: 1.0.1 - - eastasianwidth@0.2.0: {} - - ee-first@1.1.1: {} - - electron-to-chromium@1.4.622: {} - - electron-to-chromium@1.4.811: {} - - emittery@0.13.1: {} - - emoji-regex@10.3.0: {} - - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - - encodeurl@1.0.2: {} - - end-of-stream@1.4.4: - dependencies: - once: 1.4.0 - - enhanced-resolve@5.15.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - - entities@4.5.0: {} - - err-code@2.0.3: {} - - error-ex@1.3.2: - dependencies: - is-arrayish: 0.2.1 - - es-abstract@1.22.3: - dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 - es-set-tostringtag: 2.0.2 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.2 - get-symbol-description: 1.0.0 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 - internal-slot: 1.0.6 - is-array-buffer: 3.0.2 - is-callable: 1.2.7 - is-negative-zero: 2.0.2 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 - is-string: 1.0.7 - is-typed-array: 1.1.12 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.13 - - es-define-property@1.0.0: - dependencies: - get-intrinsic: 1.2.4 - - es-errors@1.3.0: {} - - es-get-iterator@1.1.3: - dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - is-arguments: 1.1.1 - is-map: 2.0.2 - is-set: 2.0.2 - is-string: 1.0.7 - isarray: 2.0.5 - stop-iteration-iterator: 1.0.0 - - es-iterator-helpers@1.0.15: - dependencies: - asynciterator.prototype: 1.0.0 - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - es-set-tostringtag: 2.0.2 - function-bind: 1.1.2 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - has-property-descriptors: 1.0.1 - has-proto: 1.0.1 - has-symbols: 1.0.3 - internal-slot: 1.0.6 - iterator.prototype: 1.1.2 - safe-array-concat: 1.0.1 - - es-module-lexer@1.4.1: {} - - es-set-tostringtag@2.0.2: - dependencies: - get-intrinsic: 1.2.2 - has-tostringtag: 1.0.0 - hasown: 2.0.0 - - es-shim-unscopables@1.0.2: - dependencies: - hasown: 2.0.0 - - es-to-primitive@1.2.1: - dependencies: - is-callable: 1.2.7 - is-date-object: 1.0.5 - is-symbol: 1.0.4 - - esbuild-plugins-node-modules-polyfill@1.6.1(esbuild@0.17.6): - dependencies: - '@jspm/core': 2.0.1 - esbuild: 0.17.6 - local-pkg: 0.4.3 - resolve.exports: 2.0.2 - - esbuild@0.17.6: - optionalDependencies: - '@esbuild/android-arm': 0.17.6 - '@esbuild/android-arm64': 0.17.6 - '@esbuild/android-x64': 0.17.6 - '@esbuild/darwin-arm64': 0.17.6 - '@esbuild/darwin-x64': 0.17.6 - '@esbuild/freebsd-arm64': 0.17.6 - '@esbuild/freebsd-x64': 0.17.6 - '@esbuild/linux-arm': 0.17.6 - '@esbuild/linux-arm64': 0.17.6 - '@esbuild/linux-ia32': 0.17.6 - '@esbuild/linux-loong64': 0.17.6 - '@esbuild/linux-mips64el': 0.17.6 - '@esbuild/linux-ppc64': 0.17.6 - '@esbuild/linux-riscv64': 0.17.6 - '@esbuild/linux-s390x': 0.17.6 - '@esbuild/linux-x64': 0.17.6 - '@esbuild/netbsd-x64': 0.17.6 - '@esbuild/openbsd-x64': 0.17.6 - '@esbuild/sunos-x64': 0.17.6 - '@esbuild/win32-arm64': 0.17.6 - '@esbuild/win32-ia32': 0.17.6 - '@esbuild/win32-x64': 0.17.6 - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - esbuild@0.19.7: - optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 - - escalade@3.1.1: {} - - escalade@3.1.2: {} - - escape-html@1.0.3: {} - - escape-string-regexp@1.0.5: {} - - escape-string-regexp@2.0.0: {} - - escape-string-regexp@4.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@9.0.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-config-turbo@2.0.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - eslint-plugin-turbo: 2.0.0(eslint@8.57.0) - - eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.0): - dependencies: - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - - eslint-import-resolver-node@0.3.7: - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-node@0.3.9: - dependencies: - debug: 3.2.7 - is-core-module: 2.13.1 - resolve: 1.22.8 - transitivePeerDependencies: - - supports-color - - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.0)(eslint@8.57.0): + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: true - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0): + /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1): + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true dependencies: - debug: 4.3.4 - enhanced-resolve: 5.15.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + '@nolyfill/is-core-module': 1.0.39 + debug: 4.3.7 + enhanced-resolve: 5.17.1 + eslint: 8.57.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) fast-glob: 3.3.2 - get-tsconfig: 4.7.2 - is-core-module: 2.13.1 + get-tsconfig: 4.8.1 + is-bun-module: 1.2.1 is-glob: 4.0.3 transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color + dev: true - eslint-mdx@3.1.5(eslint@8.57.0): + /eslint-mdx@3.1.5(eslint@8.57.1): + resolution: {integrity: sha512-ynztX0k7CQ3iDL7fDEIeg3g0O/d6QPv7IBI9fdYLhXp5fAp0fi8X22xF/D3+Pk0f90R27uwqa1clHpay6t0l8Q==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint: 8.57.0 + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) + eslint: 8.57.1 espree: 9.6.1 estree-util-visit: 2.0.0 remark-mdx: 3.0.1 remark-parse: 11.0.0 remark-stringify: 11.0.0 - synckit: 0.9.0 - tslib: 2.6.2 - unified: 11.0.4 - unified-engine: 11.2.0 + synckit: 0.9.1 + tslib: 2.7.0 + unified: 11.0.5 + unified-engine: 11.2.1 unist-util-visit: 5.0.0 uvu: 0.5.6 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: + - bluebird - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.11.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.29.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.11.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 + dependencies: + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + debug: 3.2.7 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color + dev: true - eslint-module-utils@2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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 dependencies: - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) debug: 3.2.7 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color + dev: true - eslint-plugin-es@3.0.1(eslint@8.57.0): + /eslint-plugin-es@3.0.1(eslint@8.57.1): + resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=4.19.1' dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-utils: 2.1.0 regexpp: 3.2.0 + dev: true - eslint-plugin-eslint-comments@3.2.0(eslint@8.57.0): + /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' dependencies: escape-string-regexp: 1.0.5 - eslint: 8.57.0 - ignore: 5.3.1 + eslint: 8.57.1 + ignore: 5.3.2 + dev: true + + /eslint-plugin-import@2.30.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true - eslint-plugin-import@2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + /eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true dependencies: - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.3.3) - array-includes: 3.1.7 - array.prototype.findlastindex: 1.2.3 + '@rtsao/scc': 1.1.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - hasown: 2.0.0 - is-core-module: 2.13.1 + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 - object.fromentries: 2.0.7 - object.groupby: 1.0.1 - object.values: 1.1.7 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.0 semver: 6.3.1 - tsconfig-paths: 3.14.2 + tsconfig-paths: 3.15.0 transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color + dev: true - eslint-plugin-jest-dom@4.0.3(eslint@8.57.0): + /eslint-plugin-jest-dom@4.0.3(eslint@8.57.1): + resolution: {integrity: sha512-9j+n8uj0+V0tmsoS7bYC7fLhQmIvjRqRYEcbDSi+TKPsTThLLXCyj5swMSSf/hTleeMktACnn+HFqXBr5gbcbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6', yarn: '>=1'} + peerDependencies: + eslint: ^6.8.0 || ^7.0.0 || ^8.0.0 dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.25.6 '@testing-library/dom': 8.20.1 - eslint: 8.57.0 + eslint: 8.57.1 requireindex: 1.2.0 + dev: true - eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + /eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 dependencies: - '@babel/runtime': 7.23.4 - aria-query: 5.3.0 - array-includes: 3.1.7 + aria-query: 5.1.3 + array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 + axe-core: 4.10.0 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 - hasown: 2.0.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 + object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.0 + dev: true - eslint-plugin-markdown@3.0.1(eslint@8.57.0): + /eslint-plugin-markdown@3.0.1(eslint@8.57.1): + resolution: {integrity: sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.57.0 + eslint: 8.57.1 mdast-util-from-markdown: 0.8.5 transitivePeerDependencies: - supports-color + dev: true - eslint-plugin-mdx@3.1.5(eslint@8.57.0): + /eslint-plugin-mdx@3.1.5(eslint@8.57.1): + resolution: {integrity: sha512-lUE7tP7IrIRHU3gTtASDe5u4YM2SvQveYVJfuo82yn3MLh/B/v05FNySURCK4aIxIYF1QYo3IRemQG/lyQzpAg==} + engines: {node: '>=18.0.0'} + peerDependencies: + eslint: '>=8.0.0' dependencies: - eslint: 8.57.0 - eslint-mdx: 3.1.5(eslint@8.57.0) - eslint-plugin-markdown: 3.0.1(eslint@8.57.0) + eslint: 8.57.1 + eslint-mdx: 3.1.5(eslint@8.57.1) + eslint-plugin-markdown: 3.0.1(eslint@8.57.1) remark-mdx: 3.0.1 remark-parse: 11.0.0 remark-stringify: 11.0.0 - tslib: 2.6.2 - unified: 11.0.4 - vfile: 6.0.1 + tslib: 2.7.0 + unified: 11.0.5 + vfile: 6.0.3 transitivePeerDependencies: + - bluebird - supports-color + dev: true - eslint-plugin-node@11.1.0(eslint@8.57.0): + /eslint-plugin-node@11.1.0(eslint@8.57.1): + resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} + engines: {node: '>=8.10.0'} + peerDependencies: + eslint: '>=5.16.0' dependencies: - eslint: 8.57.0 - eslint-plugin-es: 3.0.1(eslint@8.57.0) + eslint: 8.57.1 + eslint-plugin-es: 3.0.1(eslint@8.57.1) eslint-utils: 2.1.0 - ignore: 5.3.1 + ignore: 5.3.2 minimatch: 3.1.2 resolve: 1.22.8 semver: 6.3.1 + dev: true - eslint-plugin-only-warn@1.1.0: {} + /eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + dev: true - eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0): + /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1): + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true dependencies: - eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.3.3) + eslint: 8.57.1 + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + dev: true - eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.57.0 + eslint: 8.57.1 + dev: true - eslint-plugin-react@7.33.2(eslint@8.57.0): + /eslint-plugin-react@7.36.1(eslint@8.57.1): + resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 + array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.tosorted: 1.1.2 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.15 - eslint: 8.57.0 + es-iterator-helpers: 1.0.19 + eslint: 8.57.1 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 - object.entries: 1.1.7 - object.fromentries: 2.0.7 - object.hasown: 1.1.3 - object.values: 1.1.7 + object.entries: 1.1.8 + object.fromentries: 2.0.8 + object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 - string.prototype.matchall: 4.0.10 + string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + dev: true - eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} + engines: {node: '>= 18'} + peerDependencies: + eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 requireindex: 1.2.0 ts-dedent: 2.2.0 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-testing-library@5.11.1(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@5.11.1(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): + resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript + dev: true - eslint-plugin-tsdoc@0.2.17: + /eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 + dev: true - eslint-plugin-turbo@2.0.0(eslint@8.57.0): + /eslint-plugin-turbo@2.1.2(eslint@8.57.1): + resolution: {integrity: sha512-q2ikGubfVLZDPEKliiuubZc3sI5oqbKIZJ6fRi6Bldv8E3cMNH3Qt7g6hXZV4+GxwQbzEEteCYSBNbOn1DBqRg==} + peerDependencies: + eslint: '>6.6.0' dependencies: dotenv: 16.0.3 - eslint: 8.57.0 + eslint: 8.57.1 + dev: true - eslint-plugin-unicorn@48.0.1(eslint@8.57.0): + /eslint-plugin-unicorn@48.0.1(eslint@8.57.1): + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' dependencies: - '@babel/helper-validator-identifier': 7.22.20 - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@babel/helper-validator-identifier': 7.24.7 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) ci-info: 3.9.0 clean-regexp: 1.0.0 - eslint: 8.57.0 - esquery: 1.5.0 + eslint: 8.57.1 + esquery: 1.6.0 indent-string: 4.0.0 is-builtin-module: 3.2.1 jsesc: 3.0.2 @@ -8880,49 +5091,71 @@ snapshots: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.3 strip-indent: 3.0.0 + dev: true - eslint-scope@5.1.1: + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 + dev: true - eslint-scope@7.2.2: + /eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 + dev: true - eslint-utils@2.1.0: + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} dependencies: eslint-visitor-keys: 1.3.0 + dev: true - eslint-visitor-keys@1.3.0: {} + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true - eslint-visitor-keys@2.1.0: {} + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true - eslint-visitor-keys@3.4.3: {} + /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} + dev: true - eslint@8.57.0: + /eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -8930,7 +5163,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -8940,84 +5173,127 @@ snapshots: lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 - optionator: 0.9.3 + optionator: 0.9.4 strip-ansi: 6.0.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color + dev: true - espree@9.6.1: + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 + dev: true - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true - esquery@1.5.0: + /esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} dependencies: estraverse: 5.3.0 + dev: true - esrecurse@4.3.0: + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 + dev: true - estraverse@4.3.0: {} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true - estraverse@5.3.0: {} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true - estree-util-attach-comments@2.1.1: + /estree-util-attach-comments@2.1.1: + resolution: {integrity: sha512-+5Ba/xGGS6mnwFbXIuQiDPTbuTxuMCooq3arVv7gPZtYpjp+VXH/NkHAP35OOefPhNG/UGqU3vt/LTABwcHX0w==} dependencies: '@types/estree': 1.0.5 - estree-util-build-jsx@2.2.2: + /estree-util-build-jsx@2.2.2: + resolution: {integrity: sha512-m56vOXcOBuaF+Igpb9OPAy7f9w9OIkb5yhjsZuaPm7HoGi4oTOQi0h2+yZ+AtKklYFZ+rPC4n0wYCJCEU1ONqg==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 estree-util-is-identifier-name: 2.1.0 estree-walker: 3.0.3 - estree-util-is-identifier-name@1.1.0: {} + /estree-util-is-identifier-name@1.1.0: + resolution: {integrity: sha512-OVJZ3fGGt9By77Ix9NhaRbzfbDV/2rx9EP7YIDJTmsZSEc5kYn2vWcNccYyahJL2uAQZK2a5Or2i0wtIKTPoRQ==} - estree-util-is-identifier-name@2.1.0: {} + /estree-util-is-identifier-name@2.1.0: + resolution: {integrity: sha512-bEN9VHRyXAUOjkKVQVvArFym08BTWB0aJPppZZr0UNyAqWsLaVfAqP7hbaTJjzHifmB5ebnR8Wm7r7yGN/HonQ==} - estree-util-is-identifier-name@3.0.0: {} + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + dev: true - estree-util-to-js@1.2.0: + /estree-util-to-js@1.2.0: + resolution: {integrity: sha512-IzU74r1PK5IMMGZXUVZbmiu4A1uhiPgW5hm1GjcOfr4ZzHaMPpLNJjR7HjXiIOzi25nZDrgFTobHTkV5Q6ITjA==} dependencies: - '@types/estree-jsx': 1.0.3 - astring: 1.8.6 + '@types/estree-jsx': 1.0.5 + astring: 1.9.0 source-map: 0.7.4 - estree-util-value-to-estree@1.3.0: + /estree-util-value-to-estree@1.3.0: + resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} + engines: {node: '>=12.0.0'} dependencies: is-plain-obj: 3.0.0 - estree-util-visit@1.2.1: + /estree-util-visit@1.2.1: + resolution: {integrity: sha512-xbgqcrkIVbIG+lI/gzbvd9SGTJL4zqJKBFttUl5pP27KhAjtMKbX/mQXJ7qgyXpMgVy/zvpm0xoQQaGL8OloOw==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/unist': 2.0.10 + '@types/estree-jsx': 1.0.5 + '@types/unist': 2.0.11 - estree-util-visit@2.0.0: + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/unist': 3.0.2 + '@types/estree-jsx': 1.0.5 + '@types/unist': 3.0.3 + dev: true - estree-walker@3.0.3: + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: '@types/estree': 1.0.5 - esutils@2.0.3: {} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true - etag@1.8.1: {} + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} - eval@0.1.8: + /eval@0.1.8: + resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} + engines: {node: '>= 0.8'} dependencies: - '@types/node': 20.11.24 + '@types/node': 20.16.5 require-like: 0.1.2 - event-target-shim@5.0.1: {} + /event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -9029,23 +5305,17 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@7.2.0: - dependencies: - cross-spawn: 7.0.3 - get-stream: 6.0.1 - human-signals: 4.3.1 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.1.0 - onetime: 6.0.0 - signal-exit: 3.0.7 - strip-final-newline: 3.0.0 - - exit-hook@2.2.1: {} + /exit-hook@2.2.1: + resolution: {integrity: sha512-eNTPlAD67BmP31LDINZ3U7HSF8l57TxOY2PmBJ1shpCvpnxBF93mWCE8YHBnXs8qiUZJc9WDcWIeC3a2HIAMfw==} + engines: {node: '>=6'} - exit@0.1.2: {} + /exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} - expect@29.7.0: + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/expect-utils': 29.7.0 jest-get-type: 29.6.3 @@ -9053,34 +5323,36 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - express@4.18.3: + /express@4.21.0: + resolution: {integrity: sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==} + engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.5.0 + cookie: 0.6.0 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -9089,48 +5361,73 @@ snapshots: transitivePeerDependencies: - supports-color - extend@3.0.2: {} + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-deep-equal@3.1.3: {} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} 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.5 + micromatch: 4.0.8 - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: {} + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + dev: true - fast-safe-stringify@2.1.1: {} + /fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + dev: true - fastq@1.15.0: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 - fault@2.0.1: + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} dependencies: format: 0.2.2 - fb-watchman@2.0.2: + /fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} dependencies: bser: 2.1.1 - file-entry-cache@6.0.1: + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flat-cache: 3.2.0 + dev: true - fill-range@7.0.1: + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: false + + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: + /finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -9139,154 +5436,227 @@ snapshots: transitivePeerDependencies: - supports-color - find-up@4.1.0: + /find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - find-up@5.0.0: + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - flat-cache@3.2.0: + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 + dev: true - flatted@3.3.1: {} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + dev: true - for-each@0.3.3: + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - form-data@4.0.0: + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 mime-types: 2.1.35 + dev: true - format@0.2.2: {} + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} - formidable@2.1.2: + /formidable@2.1.2: + resolution: {integrity: sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==} dependencies: dezalgo: 1.0.4 hexoid: 1.0.0 once: 1.4.0 - qs: 6.11.2 + qs: 6.13.0 + dev: true - forwarded@0.2.0: {} + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} - fraction.js@4.3.7: {} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true - fresh@0.5.2: {} + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} - fs-constants@1.0.0: {} + /fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@10.1.0: + /fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - fs-minipass@2.1.0: + /fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - fs-minipass@3.0.3: + /fs-minipass@3.0.3: + resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 7.0.4 + minipass: 7.1.2 - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true optional: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - function.prototype.name@1.1.6: + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 functions-have-names: 1.2.3 + dev: true - functions-have-names@1.2.3: {} + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true - generic-names@4.0.0: + /generic-names@4.0.0: + resolution: {integrity: sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==} dependencies: - loader-utils: 3.2.1 - - gensync@1.0.0-beta.2: {} + loader-utils: 3.3.1 - get-caller-file@2.0.5: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} - get-intrinsic@1.2.2: - dependencies: - function-bind: 1.1.2 - has-proto: 1.0.1 - has-symbols: 1.0.3 - hasown: 2.0.0 + /get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.4: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: es-errors: 1.3.0 function-bind: 1.1.2 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 - hasown: 2.0.0 + hasown: 2.0.2 - get-package-type@0.1.0: {} + /get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} - get-port@5.1.1: {} + /get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} - get-stdin@9.0.0: {} + /get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + dev: true - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} - get-symbol-description@1.0.0: + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true - get-tsconfig@4.7.2: + /get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} dependencies: resolve-pkg-maps: 1.0.0 + dev: true - git-hooks-list@3.1.0: {} + /git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + dev: true - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 - glob-parent@6.0.2: + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: true - glob@10.3.10: + /glob@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - foreground-child: 3.1.1 + foreground-child: 3.3.0 jackspeak: 2.3.6 - minimatch: 9.0.3 - minipass: 7.0.4 - path-scurry: 1.10.1 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + dev: true - glob@7.1.6: + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true 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 + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -9295,44 +5665,67 @@ snapshots: once: 1.4.0 path-is-absolute: 1.0.1 - globals@11.12.0: {} + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} - globals@13.24.0: + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} dependencies: type-fest: 0.20.2 + dev: true - globalthis@1.0.3: + /globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} dependencies: define-properties: 1.2.1 + gopd: 1.0.1 + dev: true - globby@11.1.0: + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: true - globby@13.2.2: + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 + dev: true - globrex@0.1.2: {} + /globrex@0.1.2: + resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} + dev: true - gopd@1.0.1: + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - graphemer@1.4.0: {} + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true - gunzip-maybe@1.4.2: + /gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true dependencies: browserify-zlib: 0.1.4 is-deflate: 1.0.0 @@ -9341,45 +5734,57 @@ snapshots: pumpify: 1.5.1 through2: 2.0.5 - has-bigints@1.0.2: {} - - has-flag@3.0.0: {} + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true - has-flag@4.0.0: {} + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} - has-property-descriptors@1.0.1: - dependencies: - get-intrinsic: 1.2.2 + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - has-property-descriptors@1.0.2: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: es-define-property: 1.0.0 - has-proto@1.0.1: {} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} - has-symbols@1.0.3: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} - has-tostringtag@1.0.0: + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 - hasown@2.0.0: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 - hast-util-to-estree@2.3.3: + /hast-util-to-estree@2.3.3: + resolution: {integrity: sha512-ihhPIUPxN0v0w6M5+IiAZZrn0LH2uZomeWwhn7uP7avZC6TE7lIiEh2yBMPr5+zi1aUCXq6VoYRgs2Bw9xmycQ==} dependencies: '@types/estree': 1.0.5 - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 - '@types/unist': 2.0.10 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 + '@types/unist': 2.0.11 comma-separated-tokens: 2.0.3 estree-util-attach-comments: 2.1.1 estree-util-is-identifier-name: 2.1.0 hast-util-whitespace: 2.0.1 mdast-util-mdx-expression: 1.3.2 mdast-util-mdxjs-esm: 1.3.1 - property-information: 6.4.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 style-to-object: 0.4.4 unist-util-position: 4.0.4 @@ -9387,23 +5792,44 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-whitespace@2.0.1: {} + /hast-util-whitespace@2.0.1: + resolution: {integrity: sha512-nAxA0v8+vXSBDt3AnRUNjyRIQ0rD+ntpbAp4LnPkumc5M9yUbSMa4XDU9Q6etY4f1Wp4bNgvc1yjiZtsTTrSng==} - hexoid@1.0.0: {} + /hexoid@1.0.0: + resolution: {integrity: sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==} + engines: {node: '>=8'} + dev: true - hosted-git-info@2.8.9: {} + /hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + dev: true - hosted-git-info@6.1.1: + /hosted-git-info@6.1.1: + resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: lru-cache: 7.18.3 - html-encoding-sniffer@3.0.0: + /hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + lru-cache: 10.4.3 + dev: true + + /html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} dependencies: whatwg-encoding: 2.0.0 + dev: true - html-escaper@2.0.2: {} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - http-errors@2.0.0: + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 @@ -9411,327 +5837,532 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 - http-proxy-agent@5.0.0: + /http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - https-proxy-agent@5.0.1: + /https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: true - human-signals@2.1.0: {} - - human-signals@4.3.1: {} + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} - iconv-lite@0.4.24: + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 - iconv-lite@0.6.3: + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: true - icss-utils@5.1.0(postcss@8.4.38): + /icss-utils@5.1.0(postcss@8.4.47): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - ieee754@1.2.1: {} + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: {} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: true - import-fresh@3.3.0: + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: true - import-local@3.1.0: + /import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} + engines: {node: '>=8'} + hasBin: true dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 - import-meta-resolve@4.0.0: {} + /import-meta-resolve@4.1.0: + resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + dev: true - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} - indent-string@4.0.0: {} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} - inflight@1.0.6: + /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. dependencies: once: 1.4.0 wrappy: 1.0.2 - inherits@2.0.4: {} + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - ini@4.1.1: {} + /ini@4.1.3: + resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - inline-style-parser@0.1.1: {} + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - internal-slot@1.0.6: + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.2 - hasown: 2.0.0 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.0.6 + dev: true - ipaddr.js@1.9.1: {} + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} - is-alphabetical@1.0.4: {} + /is-alphabetical@1.0.4: + resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} + dev: true - is-alphabetical@2.0.1: {} + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-alphanumerical@1.0.4: + /is-alphanumerical@1.0.4: + resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} dependencies: is-alphabetical: 1.0.4 is-decimal: 1.0.4 + dev: true - is-alphanumerical@2.0.1: + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-arguments@1.1.1: + /is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 - is-array-buffer@3.0.2: + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-async-function@2.0.0: + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-bigint@1.0.4: + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} dependencies: has-bigints: 1.0.2 + dev: true - is-binary-path@2.1.0: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: - binary-extensions: 2.2.0 + binary-extensions: 2.3.0 - is-boolean-object@1.1.2: + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-buffer@2.0.5: {} + /is-buffer@2.0.5: + resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} + engines: {node: '>=4'} - is-builtin-module@3.2.1: + /is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} dependencies: builtin-modules: 3.3.0 + dev: true - is-callable@1.2.7: {} - - is-core-module@2.13.1: + /is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} dependencies: - hasown: 2.0.0 + semver: 7.6.3 + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} - is-date-object@1.0.5: + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + hasown: 2.0.2 - is-decimal@1.0.4: {} + /is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + dependencies: + is-typed-array: 1.1.13 + dev: true - is-decimal@2.0.1: {} + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true - is-deflate@1.0.0: {} + /is-decimal@1.0.4: + resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} + dev: true - is-docker@2.2.1: {} + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@3.0.0: {} + /is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} - is-empty@1.2.0: {} + /is-empty@1.2.0: + resolution: {integrity: sha512-F2FnH/otLNJv0J6wc73A5Xo7oHLNnqplYqZhUu01tD54DIPvxIRSTSLkrUB/M0nHO4vo1O9PDfN4KoTxCzLh/w==} + dev: true - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} - is-finalizationregistry@1.0.2: + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + dev: true - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} - is-generator-fn@2.1.0: {} + /is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} - is-generator-function@1.0.10: + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 - is-gzip@1.0.0: {} - - is-hexadecimal@1.0.4: {} + /is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} - is-hexadecimal@2.0.1: {} + /is-hexadecimal@1.0.4: + resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} + dev: true - is-inside-container@1.0.0: - dependencies: - is-docker: 3.0.0 + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-interactive@1.0.0: {} + /is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} - is-map@2.0.2: {} + /is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + dev: true - is-negative-zero@2.0.2: {} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true - is-number-object@1.0.7: + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: {} + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true - is-plain-obj@3.0.0: {} + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} - is-plain-obj@4.1.0: {} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} - is-potential-custom-element-name@1.0.1: {} + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true - is-reference@3.0.2: + /is-reference@3.0.2: + resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} dependencies: '@types/estree': 1.0.5 - is-regex@1.1.4: + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true - is-set@2.0.2: {} + /is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + dev: true - is-shared-array-buffer@1.0.2: + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - - is-stream@2.0.1: {} + call-bind: 1.0.7 + dev: true - is-stream@3.0.0: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} - is-string@1.0.7: + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 + dev: true - is-symbol@1.0.4: + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 + dev: true - is-typed-array@1.1.12: + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.13 + which-typed-array: 1.1.15 - is-unicode-supported@0.1.0: {} + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} - is-weakmap@2.0.1: {} + /is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + dev: true - is-weakref@1.0.2: + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 + dev: true - is-weakset@2.0.2: + /is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true - is-wsl@2.2.0: - dependencies: - is-docker: 2.2.1 + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@1.0.0: {} + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true - isarray@2.0.5: {} + /isbot@3.8.0: + resolution: {integrity: sha512-vne1mzQUTR+qsMLeCBL9+/tgnDXRyc2pygLGl/WsgA+EZKIiB5Ehu0CiVTHIIk30zhJ24uGz4M5Ppse37aR0Hg==} + engines: {node: '>=12'} + dev: false - isbot@3.8.0: {} + /isbot@4.4.0: + resolution: {integrity: sha512-8ZvOWUA68kyJO4hHJdWjyreq7TYNWTS9y15IzeqVdKxR9pPr3P/3r9AHcoIv9M0Rllkao5qWz2v1lmcyKIVCzQ==} + engines: {node: '>=18'} + dev: false - isbot@4.4.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@2.0.0: {} + /isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + dev: true - istanbul-lib-coverage@3.2.2: {} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} - istanbul-lib-instrument@5.2.1: + /istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color - istanbul-lib-instrument@6.0.1: + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} dependencies: - '@babel/core': 7.24.0 - '@babel/parser': 7.24.0 + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color - istanbul-lib-report@3.0.1: + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} dependencies: istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 - istanbul-lib-source-maps@4.0.1: + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color - istanbul-reports@3.1.6: + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.2: + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} dependencies: define-properties: 1.2.1 - get-intrinsic: 1.2.2 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 - reflect.getprototypeof: 1.0.4 - set-function-name: 2.0.1 + reflect.getprototypeof: 1.0.6 + set-function-name: 2.0.2 + dev: true + + /jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: true - jackspeak@2.3.6: + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - javascript-stringify@2.1.0: {} + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: false + + /javascript-stringify@2.1.0: + resolution: {integrity: sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==} - jest-changed-files@29.7.0: + /jest-changed-files@29.7.0: + resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: execa: 5.1.1 jest-util: 29.7.0 p-limit: 3.1.0 - jest-circus@29.7.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} dependencies: '@jest/environment': 29.7.0 '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -9741,23 +6372,31 @@ snapshots: jest-util: 29.7.0 p-limit: 3.1.0 pretty-format: 29.7.0 - pure-rand: 6.0.4 + 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@20.11.24): + /jest-cli@29.7.0(@types/node@20.16.5): + 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 dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.24) + create-jest: 29.7.0(@types/node@20.16.5) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.24) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -9767,13 +6406,23 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.11.24): + /jest-config@29.7.0(@types/node@20.16.5): + 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 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.25.2 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 - babel-jest: 29.7.0(@babel/core@7.24.0) + '@types/node': 20.16.5 + babel-jest: 29.7.0(@babel/core@7.25.2) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -9787,7 +6436,7 @@ snapshots: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.5 + micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 @@ -9796,18 +6445,24 @@ snapshots: - babel-plugin-macros - supports-color - jest-diff@29.7.0: + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.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: + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: detect-newline: 3.1.0 - jest-each@29.7.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} dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 @@ -9815,13 +6470,20 @@ snapshots: jest-util: 29.7.0 pretty-format: 29.7.0 - jest-environment-jsdom@29.7.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 dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.11.24 + '@types/node': 20.16.5 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -9829,78 +6491,106 @@ snapshots: - bufferutil - supports-color - utf-8-validate + dev: true - jest-environment-node@29.7.0: + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-get-type@29.6.3: {} + /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: + /jest-haste-map@29.7.0: + resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.24 + '@types/node': 20.16.5 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.5 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 - jest-leak-detector@29.7.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} dependencies: jest-get-type: 29.6.3 pretty-format: 29.7.0 - jest-matcher-utils@29.7.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} 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: + /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} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.5 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 - jest-mock@29.7.0: + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 jest-util: 29.7.0 - jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): + resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true dependencies: jest-resolve: 29.7.0 - jest-regex-util@29.6.3: {} + /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: + /jest-resolve-dependencies@29.7.0: + resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: jest-regex-util: 29.6.3 jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color - jest-resolve@29.7.0: + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: chalk: 4.1.2 graceful-fs: 4.2.11 @@ -9912,14 +6602,16 @@ snapshots: resolve.exports: 2.0.2 slash: 3.0.0 - jest-runner@29.7.0: + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/console': 29.7.0 '@jest/environment': 29.7.0 '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -9938,7 +6630,9 @@ snapshots: transitivePeerDependencies: - supports-color - jest-runtime@29.7.0: + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -9947,9 +6641,9 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 chalk: 4.1.2 - cjs-module-lexer: 1.2.3 + cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -9965,17 +6659,19 @@ snapshots: transitivePeerDependencies: - supports-color - jest-snapshot@29.7.0: + /jest-snapshot@29.7.0: + resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@babel/core': 7.24.0 - '@babel/generator': 7.23.6 - '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.24.0) - '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.24.0) - '@babel/types': 7.24.0 + '@babel/core': 7.25.2 + '@babel/generator': 7.25.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-syntax-typescript': 7.25.4(@babel/core@7.25.2) + '@babel/types': 7.25.6 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.0) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.2) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -9986,20 +6682,24 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.3 transitivePeerDependencies: - supports-color - jest-util@29.7.0: + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 picomatch: 2.3.1 - jest-validate@29.7.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} dependencies: '@jest/types': 29.6.3 camelcase: 6.3.0 @@ -10008,55 +6708,84 @@ snapshots: leven: 3.1.0 pretty-format: 29.7.0 - jest-watcher@29.7.0: + /jest-watcher@29.7.0: + resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.24 + '@types/node': 20.16.5 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@29.7.0: + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.24 + '@types/node': 20.16.5 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.11.24): + /jest@29.7.0(@types/node@20.16.5): + 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 dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.24) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@20.16.5) transitivePeerDependencies: - '@types/node' - babel-plugin-macros - supports-color - ts-node - jju@1.4.0: {} + /jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + dev: true - joycon@3.1.1: {} + /joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + dev: true - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.1: + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 - js-yaml@4.1.0: + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 - jsdom@20.0.3: + /jsdom@20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true dependencies: abab: 2.0.6 - acorn: 8.11.3 + acorn: 8.12.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -10069,169 +6798,266 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.7 + nwsapi: 2.2.12 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 4.1.3 + 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.14.2 + ws: 8.18.0 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate + dev: true - jsesc@0.5.0: {} + /jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + dev: true - jsesc@2.5.2: {} + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true - jsesc@3.0.2: {} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true - json-buffer@3.0.1: {} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true - json-parse-even-better-errors@2.3.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-parse-even-better-errors@3.0.0: {} + /json-parse-even-better-errors@3.0.2: + resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - json-schema-to-ts@1.6.4: + /json-schema-to-ts@1.6.4: + resolution: {integrity: sha512-pR4yQ9DHz6itqswtHCm26mw45FSNfQ9rEQjosaZErhn5J3J2sIViQiz8rDaezjKAhFGpmsoczYVBgGHzFw/stA==} dependencies: '@types/json-schema': 7.0.15 ts-toolbelt: 6.15.5 + dev: false - json-schema-traverse@0.4.1: {} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true - json-schema-traverse@1.0.0: {} + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: false - json-stable-stringify-without-jsonify@1.0.1: {} + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + dev: true - json5@1.0.2: + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true dependencies: minimist: 1.2.8 + dev: true - json5@2.2.3: {} - - jsonc-parser@3.2.0: {} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true - jsonfile@6.1.0: + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - jsx-ast-utils@3.3.5: + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} dependencies: - array-includes: 3.1.7 + array-includes: 3.1.8 array.prototype.flat: 1.3.2 - object.assign: 4.1.4 - object.values: 1.1.7 + object.assign: 4.1.5 + object.values: 1.2.0 + dev: true - keyv@4.5.4: + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + dev: true - kleur@3.0.3: {} + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} - kleur@4.1.5: {} + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} - language-subtag-registry@0.3.22: {} + /language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + dev: true - language-tags@1.0.9: + /language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} dependencies: - language-subtag-registry: 0.3.22 + language-subtag-registry: 0.3.23 + dev: true - leven@3.1.0: {} + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} - levn@0.4.1: + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + dev: true - lilconfig@3.0.0: {} + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - lines-and-columns@2.0.4: {} + /lines-and-columns@2.0.4: + resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - load-plugin@6.0.2: + /load-plugin@6.0.3: + resolution: {integrity: sha512-kc0X2FEUZr145odl68frm+lMJuQ23+rTXYmR6TImqPtbpmXC4vVXbWKDQ9IzndA0HfyQamWfKLhzsqGSTxE63w==} dependencies: - '@npmcli/config': 8.2.0 - import-meta-resolve: 4.0.0 + '@npmcli/config': 8.3.4 + import-meta-resolve: 4.1.0 + transitivePeerDependencies: + - bluebird + dev: true - load-tsconfig@0.2.5: {} + /load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true - loader-utils@3.2.1: {} + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} - local-pkg@0.4.3: {} + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.7.1 + pkg-types: 1.2.0 - locate-path@5.0.0: + /locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} dependencies: p-locate: 4.1.0 - locate-path@6.0.0: + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 - lodash.camelcase@4.3.0: {} + /lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: {} + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - lodash.memoize@4.1.2: {} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false - lodash.merge@4.6.2: {} + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true - lodash.sortby@4.7.0: {} + /lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + dev: true - lodash@4.17.21: {} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - log-symbols@4.1.0: + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - longest-streak@3.1.0: {} + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 - lru-cache@10.1.0: {} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - lru-cache@7.18.3: {} + /lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} - lz-string@1.5.0: {} + /lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + dev: true - make-dir@4.0.0: + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.3 - make-error@1.3.6: {} + /make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + dev: false - makeerror@1.0.12: + /makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} dependencies: tmpl: 1.0.5 - markdown-extensions@1.1.1: {} + /markdown-extensions@1.1.1: + resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} + engines: {node: '>=0.10.0'} - mdast-util-definitions@5.1.2: + /mdast-util-definitions@5.1.2: + resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - mdast-util-from-markdown@0.8.5: + /mdast-util-from-markdown@0.8.5: + resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-string: 2.0.0 @@ -10240,11 +7066,13 @@ snapshots: unist-util-stringify-position: 2.0.3 transitivePeerDependencies: - supports-color + dev: true - mdast-util-from-markdown@1.3.1: + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 decode-named-character-reference: 1.0.2 mdast-util-to-string: 3.2.0 micromark: 3.2.0 @@ -10258,10 +7086,11 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-from-markdown@2.0.0: + /mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -10274,70 +7103,78 @@ snapshots: unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-frontmatter@1.0.1: + /mdast-util-frontmatter@1.0.1: + resolution: {integrity: sha512-JjA2OjxRqAa8wEG8hloD0uTU0kdn8kbtOWpPP94NBkfAlbxn4S8gCGf/9DwFtEeGPXrDcNXdiDjVaRdUFqYokw==} dependencies: '@types/mdast': 3.0.15 mdast-util-to-markdown: 1.5.0 micromark-extension-frontmatter: 1.1.1 - mdast-util-mdx-expression@1.3.2: + /mdast-util-mdx-expression@1.3.2: + resolution: {integrity: sha512-xIPmR5ReJDu/DHH1OoIT1HkuybIfRGYRywC+gJtI7qHjCJp/M9jrmBEJW22O8lskDWm562BX2W8TiAwRTb0rKA==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.0: + /mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdx-jsx@2.1.4: + /mdast-util-mdx-jsx@2.1.4: + resolution: {integrity: sha512-DtMn9CmVhVzZx3f+optVDF8yFgQVt7FghCRNdlIaS3X5Bnym3hZwPbg/XW86vdpKjlc1PVj26SpnLGeJBXD3JA==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 ccount: 2.0.1 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 parse-entities: 4.0.1 - stringify-entities: 4.0.3 + stringify-entities: 4.0.4 unist-util-remove-position: 4.0.2 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.0: + /mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 parse-entities: 4.0.1 - stringify-entities: 4.0.3 - unist-util-remove-position: 5.0.0 + stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdx@2.0.1: + /mdast-util-mdx@2.0.1: + resolution: {integrity: sha512-38w5y+r8nyKlGvNjSEqWrhG0w5PmnRA+wnBvm+ulYCct7nsGYhFVb0lljS9bQav4psDAS1eGkP2LMVcZBi/aqw==} dependencies: mdast-util-from-markdown: 1.3.1 mdast-util-mdx-expression: 1.3.2 @@ -10347,50 +7184,59 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.0 + mdast-util-from-markdown: 2.0.1 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-mdxjs-esm@1.3.1: + /mdast-util-mdxjs-esm@1.3.1: + resolution: {integrity: sha512-SXqglS0HrEvSdUEfoXFtcg7DRl7S2cwOXc7jkuusG472Mmjag34DUDeOJUZtl+BVnyeO1frIgVpHlNRWc2gk/w==} dependencies: - '@types/estree-jsx': 1.0.3 - '@types/hast': 2.3.8 + '@types/estree-jsx': 1.0.5 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 mdast-util-to-markdown: 1.5.0 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} dependencies: - '@types/estree-jsx': 1.0.3 + '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 + mdast-util-from-markdown: 2.0.1 mdast-util-to-markdown: 2.1.0 transitivePeerDependencies: - supports-color + dev: true - mdast-util-phrasing@3.0.1: + /mdast-util-phrasing@3.0.1: + resolution: {integrity: sha512-WmI1gTXUBJo4/ZmSk79Wcb2HcjPJBzM1nlI/OUWA8yk2X9ik3ffNbBGsU+09BFmXaL1IBb9fiuvq6/KMiNycSg==} dependencies: '@types/mdast': 3.0.15 unist-util-is: 5.2.1 - mdast-util-phrasing@4.1.0: + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 unist-util-is: 6.0.0 + dev: true - mdast-util-to-hast@12.3.0: + /mdast-util-to-hast@12.3.0: + resolution: {integrity: sha512-pits93r8PhnIoU4Vy9bjW39M2jJ6/tdHyja9rrot9uujkN7UTU9SDnE6WNJz/IGyQk3XHX6yNNtrBH6cQzm8Hw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-definitions: 5.1.2 micromark-util-sanitize-uri: 1.2.0 @@ -10399,10 +7245,11 @@ snapshots: unist-util-position: 4.0.4 unist-util-visit: 4.1.2 - mdast-util-to-markdown@1.5.0: + /mdast-util-to-markdown@1.5.0: + resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==} dependencies: '@types/mdast': 3.0.15 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 longest-streak: 3.1.0 mdast-util-phrasing: 3.0.1 mdast-util-to-string: 3.2.0 @@ -10410,42 +7257,59 @@ snapshots: unist-util-visit: 4.1.2 zwitch: 2.0.4 - mdast-util-to-markdown@2.1.0: + /mdast-util-to-markdown@2.1.0: + resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 + dev: true - mdast-util-to-string@2.0.0: {} + /mdast-util-to-string@2.0.0: + resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} + dev: true - mdast-util-to-string@3.2.0: + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} dependencies: '@types/mdast': 3.0.15 - mdast-util-to-string@4.0.0: + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 + dev: true - media-query-parser@2.0.2: + /media-query-parser@2.0.2: + resolution: {integrity: sha512-1N4qp+jE0pL5Xv4uEcwVUhIkwdUO3S/9gML90nqKA7v7FcOS5vUtatfzok9S9U1EJU8dHWlcv95WLnKmmxZI9w==} dependencies: - '@babel/runtime': 7.23.4 + '@babel/runtime': 7.25.6 - media-typer@0.3.0: {} + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} - merge-descriptors@1.0.1: {} + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - merge-stream@2.0.0: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge2@1.4.1: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} - methods@1.1.2: {} + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} - micromark-core-commonmark@1.1.0: + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} dependencies: decode-named-character-reference: 1.0.2 micromark-factory-destination: 1.1.0 @@ -10464,7 +7328,8 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-core-commonmark@2.0.0: + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} dependencies: decode-named-character-reference: 1.0.2 devlop: 1.1.0 @@ -10479,18 +7344,21 @@ snapshots: micromark-util-html-tag-name: 2.0.0 micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-extension-frontmatter@1.1.1: + /micromark-extension-frontmatter@1.1.1: + resolution: {integrity: sha512-m2UH9a7n3W8VAH9JO9y01APpPKmNNNs71P0RbknEmYSaZU5Ghogv38BYO94AI5Xw6OYfxZRdHZZ2nYjs/Z+SZQ==} dependencies: fault: 2.0.1 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-extension-mdx-expression@1.0.8: + /micromark-extension-mdx-expression@1.0.8: + resolution: {integrity: sha512-zZpeQtc5wfWKdzDsHRBY003H2Smg+PUi2REhqgIhdzAa5xonhP03FcXxqFSerFiNUr5AWmHpaNPQTBVOS4lrXw==} dependencies: '@types/estree': 1.0.5 micromark-factory-mdx-expression: 1.0.9 @@ -10501,18 +7369,21 @@ snapshots: micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-extension-mdx-expression@3.0.0: + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} dependencies: '@types/estree': 1.0.5 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.1 + micromark-factory-mdx-expression: 2.0.2 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-extension-mdx-jsx@1.0.5: + /micromark-extension-mdx-jsx@1.0.5: + resolution: {integrity: sha512-gPH+9ZdmDflbu19Xkb8+gheqEDqkSpdCEubQyxuz/Hn8DOXiXvrXeikOoBA71+e8Pfi0/UYmU3wW3H58kr7akA==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 @@ -10525,28 +7396,35 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 - micromark-extension-mdx-jsx@3.0.0: + /micromark-extension-mdx-jsx@3.0.1: + resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.1 + micromark-factory-mdx-expression: 2.0.2 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 vfile-message: 4.0.2 + dev: true - micromark-extension-mdx-md@1.0.1: + /micromark-extension-mdx-md@1.0.1: + resolution: {integrity: sha512-7MSuj2S7xjOQXAjjkbjBsHkMtb+mDGVW6uI2dBL9snOBCbZmoNgDAeZ0nSn9j3T42UE/g2xVNMn18PJxZvkBEA==} dependencies: micromark-util-types: 1.1.0 - micromark-extension-mdx-md@2.0.0: + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} dependencies: micromark-util-types: 2.0.0 + dev: true - micromark-extension-mdxjs-esm@1.0.5: + /micromark-extension-mdxjs-esm@1.0.5: + resolution: {integrity: sha512-xNRBw4aoURcyz/S69B19WnZAkWJMxHMT5hE36GtDAyhoyn/8TuAeqjFJQlwk+MKQsUD7b3l7kFX+vlfVWgcX1w==} dependencies: '@types/estree': 1.0.5 micromark-core-commonmark: 1.1.0 @@ -10558,22 +7436,25 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 - micromark-extension-mdxjs-esm@3.0.0: + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} dependencies: '@types/estree': 1.0.5 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 + dev: true - micromark-extension-mdxjs@1.0.1: + /micromark-extension-mdxjs@1.0.1: + resolution: {integrity: sha512-7YA7hF6i5eKOfFUzZ+0z6avRG52GpWR8DL+kN47y3f2KhxbBZMhmxe7auOeaTBrW2DenbbZTf1ea9tA2hDpC2Q==} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) micromark-extension-mdx-expression: 1.0.8 micromark-extension-mdx-jsx: 1.0.5 micromark-extension-mdx-md: 1.0.1 @@ -10581,44 +7462,53 @@ snapshots: micromark-util-combine-extensions: 1.1.0 micromark-util-types: 1.1.0 - micromark-extension-mdxjs@3.0.0: + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.12.1 + acorn-jsx: 5.3.2(acorn@8.12.1) micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-factory-destination@1.1.0: + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-destination@2.0.0: + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-factory-label@1.1.0: + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-factory-label@2.0.0: + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} dependencies: devlop: 1.1.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-factory-mdx-expression@1.0.9: + /micromark-factory-mdx-expression@1.0.9: + resolution: {integrity: sha512-jGIWzSmNfdnkJq05c7b0+Wv0Kfz3NJ3N4cBjnbO4zjXIlxJr+f8lk+5ZmwFvqdAbUy2q6B5rCY//g0QAAaXDWA==} dependencies: '@types/estree': 1.0.5 micromark-util-character: 1.2.0 @@ -10629,208 +7519,268 @@ snapshots: uvu: 0.5.6 vfile-message: 3.1.4 - micromark-factory-mdx-expression@2.0.1: + /micromark-factory-mdx-expression@2.0.2: + resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} dependencies: '@types/estree': 1.0.5 devlop: 1.1.0 + micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 vfile-message: 4.0.2 + dev: true - micromark-factory-space@1.1.0: + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} dependencies: micromark-util-character: 1.2.0 micromark-util-types: 1.1.0 - micromark-factory-space@2.0.0: + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} dependencies: micromark-util-character: 2.1.0 micromark-util-types: 2.0.0 + dev: true - micromark-factory-title@1.1.0: + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-title@2.0.0: + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-factory-whitespace@1.1.0: + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-factory-whitespace@2.0.0: + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} dependencies: micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-util-character@1.2.0: + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-character@2.1.0: + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} dependencies: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-util-chunked@1.1.0: + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-chunked@2.0.0: + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} dependencies: micromark-util-symbol: 2.0.0 + dev: true - micromark-util-classify-character@1.1.0: + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-classify-character@2.0.0: + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} dependencies: micromark-util-character: 2.1.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-util-combine-extensions@1.1.0: + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-types: 1.1.0 - micromark-util-combine-extensions@2.0.0: + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} dependencies: micromark-util-chunked: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-util-decode-numeric-character-reference@1.1.0: + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-decode-numeric-character-reference@2.0.1: + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} dependencies: micromark-util-symbol: 2.0.0 + dev: true - micromark-util-decode-string@1.1.0: + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 1.2.0 micromark-util-decode-numeric-character-reference: 1.1.0 micromark-util-symbol: 1.1.0 - micromark-util-decode-string@2.0.0: + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} dependencies: decode-named-character-reference: 1.0.2 micromark-util-character: 2.1.0 micromark-util-decode-numeric-character-reference: 2.0.1 micromark-util-symbol: 2.0.0 + dev: true - micromark-util-encode@1.1.0: {} + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} - micromark-util-encode@2.0.0: {} + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: true - micromark-util-events-to-acorn@1.2.3: + /micromark-util-events-to-acorn@1.2.3: + resolution: {integrity: sha512-ij4X7Wuc4fED6UoLWkmo0xJQhsktfNh1J0m8g4PbIMPlx+ek/4YdW5mvbye8z/aZvAPUoxgXHrwVlXAPKMRp1w==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 estree-util-visit: 1.2.1 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 vfile-message: 3.1.4 - micromark-util-events-to-acorn@2.0.2: + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} dependencies: '@types/acorn': 4.0.6 '@types/estree': 1.0.5 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 vfile-message: 4.0.2 + dev: true - micromark-util-html-tag-name@1.2.0: {} + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} - micromark-util-html-tag-name@2.0.0: {} + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: true - micromark-util-normalize-identifier@1.1.0: + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} dependencies: micromark-util-symbol: 1.1.0 - micromark-util-normalize-identifier@2.0.0: + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} dependencies: micromark-util-symbol: 2.0.0 + dev: true - micromark-util-resolve-all@1.1.0: + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} dependencies: micromark-util-types: 1.1.0 - micromark-util-resolve-all@2.0.0: + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} dependencies: micromark-util-types: 2.0.0 + dev: true - micromark-util-sanitize-uri@1.2.0: + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: micromark-util-character: 1.2.0 micromark-util-encode: 1.1.0 micromark-util-symbol: 1.1.0 - micromark-util-sanitize-uri@2.0.0: + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} dependencies: micromark-util-character: 2.1.0 micromark-util-encode: 2.0.0 micromark-util-symbol: 2.0.0 + dev: true - micromark-util-subtokenize@1.1.0: + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: micromark-util-chunked: 1.1.0 micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 uvu: 0.5.6 - micromark-util-subtokenize@2.0.0: + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 + dev: true - micromark-util-symbol@1.1.0: {} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - micromark-util-symbol@2.0.0: {} + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: true - micromark-util-types@1.1.0: {} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - micromark-util-types@2.0.0: {} + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: true - micromark@2.11.4: + /micromark@2.11.4: + resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.3.4 + debug: 4.3.7 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color + dev: true - micromark@3.2.0: + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.7 decode-named-character-reference: 1.0.2 micromark-core-commonmark: 1.1.0 micromark-factory-space: 1.1.0 @@ -10849,13 +7799,14 @@ snapshots: transitivePeerDependencies: - supports-color - micromark@4.0.0: + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: '@types/debug': 4.1.12 - debug: 4.3.4 + debug: 4.3.7 decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.0 + micromark-core-commonmark: 2.0.1 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-chunked: 2.0.0 @@ -10865,82 +7816,139 @@ snapshots: micromark-util-normalize-identifier: 2.0.0 micromark-util-resolve-all: 2.0.0 micromark-util-sanitize-uri: 2.0.0 - micromark-util-subtokenize: 2.0.0 + micromark-util-subtokenize: 2.0.1 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color + dev: true - micromatch@4.0.5: + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} dependencies: - braces: 3.0.2 + braces: 3.0.3 picomatch: 2.3.1 - mime-db@1.52.0: {} + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - mime-types@2.1.35: + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - mime@1.6.0: {} - - mime@2.6.0: {} + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true - mimic-fn@2.1.0: {} + /mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + dev: true - mimic-fn@4.0.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} - min-indent@1.0.1: {} + /min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + dev: true - minimatch@3.1.2: + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 - minimatch@9.0.3: + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: false + + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: brace-expansion: 2.0.1 - minimist@1.2.8: {} + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass-collect@1.0.2: + /minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - minipass-flush@1.0.5: + /minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 - minipass-pipeline@1.2.4: + /minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} dependencies: minipass: 3.3.6 - minipass@3.3.6: + /minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} dependencies: yallist: 4.0.0 - minipass@5.0.0: {} + /minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} - minipass@7.0.4: {} + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} - minizlib@2.1.2: + /minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} dependencies: minipass: 3.3.6 yallist: 4.0.0 - mkdirp-classic@0.5.3: {} + /mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - mkdirp@1.0.4: {} + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true - mlly@1.4.2: + /mlly@1.7.1: + resolution: {integrity: sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==} dependencies: - acorn: 8.11.3 - pathe: 1.1.1 - pkg-types: 1.0.3 - ufo: 1.3.2 + acorn: 8.12.1 + pathe: 1.1.2 + pkg-types: 1.2.0 + ufo: 1.5.4 - modern-ahocorasick@1.0.1: {} + /modern-ahocorasick@1.0.1: + resolution: {integrity: sha512-yoe+JbhTClckZ67b2itRtistFKf8yPYelHLc7e5xAwtNAXxM6wJTUx2C7QeVSJFDzKT7bCIFyBVybPMKvmB9AA==} - morgan@1.10.0: + /morgan@1.10.0: + resolution: {integrity: sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==} + engines: {node: '>= 0.8.0'} dependencies: basic-auth: 2.0.1 debug: 2.6.9 @@ -10949,199 +7957,308 @@ snapshots: on-headers: 1.0.2 transitivePeerDependencies: - supports-color + dev: false - mri@1.2.0: {} - - mrmime@1.0.1: {} + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} - ms@2.0.0: {} + /mrmime@1.0.1: + resolution: {integrity: sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==} + engines: {node: '>=10'} - ms@2.1.2: {} + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.3: {} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - mz@2.7.0: + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: true - nanoid@3.3.7: {} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true - natural-compare-lite@1.4.0: {} + /natural-compare-lite@1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true - natural-compare@1.4.0: {} + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - negotiator@0.6.3: {} + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} - next@14.1.1(react-dom@18.2.0)(react@18.2.0): + /next@14.2.11(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-8MDFqHBhdmR2wdfaWc8+lW3A/hppFe1ggQ9vgIu/g2/2QEMYJrPoQP6b+VNk56gIug/bStysAmrpUKtj3XN8Bw==} + engines: {node: '>=18.17.0'} + hasBin: true + peerDependencies: + '@opentelemetry/api': ^1.1.0 + '@playwright/test': ^1.41.2 + react: ^18.2.0 + react-dom: ^18.2.0 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + sass: + optional: true dependencies: - '@next/env': 14.1.1 - '@swc/helpers': 0.5.2 + '@next/env': 14.2.11 + '@swc/helpers': 0.5.5 busboy: 1.6.0 - caniuse-lite: 1.0.30001593 + caniuse-lite: 1.0.30001660 graceful-fs: 4.2.11 postcss: 8.4.31 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(react@18.2.0) + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + styled-jsx: 5.1.1(react@18.3.1) optionalDependencies: - '@next/swc-darwin-arm64': 14.1.1 - '@next/swc-darwin-x64': 14.1.1 - '@next/swc-linux-arm64-gnu': 14.1.1 - '@next/swc-linux-arm64-musl': 14.1.1 - '@next/swc-linux-x64-gnu': 14.1.1 - '@next/swc-linux-x64-musl': 14.1.1 - '@next/swc-win32-arm64-msvc': 14.1.1 - '@next/swc-win32-ia32-msvc': 14.1.1 - '@next/swc-win32-x64-msvc': 14.1.1 + '@next/swc-darwin-arm64': 14.2.11 + '@next/swc-darwin-x64': 14.2.11 + '@next/swc-linux-arm64-gnu': 14.2.11 + '@next/swc-linux-arm64-musl': 14.2.11 + '@next/swc-linux-x64-gnu': 14.2.11 + '@next/swc-linux-x64-musl': 14.2.11 + '@next/swc-win32-arm64-msvc': 14.2.11 + '@next/swc-win32-ia32-msvc': 14.2.11 + '@next/swc-win32-x64-msvc': 14.2.11 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros + dev: false - node-int64@0.4.0: {} + /node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.14: {} + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - nopt@7.2.0: + /nopt@7.2.1: + resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true dependencies: abbrev: 2.0.0 + dev: true - normalize-package-data@2.5.0: + /normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 + dev: true - normalize-package-data@5.0.0: + /normalize-package-data@5.0.0: + resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 - is-core-module: 2.13.1 - semver: 7.5.4 + is-core-module: 2.15.1 + semver: 7.6.3 + validate-npm-package-license: 3.0.4 + + /normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + hosted-git-info: 7.0.2 + semver: 7.6.3 validate-npm-package-license: 3.0.4 + dev: true - normalize-path@3.0.0: {} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} - normalize-range@0.1.2: {} + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true - npm-install-checks@6.3.0: + /npm-install-checks@6.3.0: + resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - semver: 7.5.4 + semver: 7.6.3 - npm-normalize-package-bin@3.0.1: {} + /npm-normalize-package-bin@3.0.1: + resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - npm-package-arg@10.1.0: + /npm-package-arg@10.1.0: + resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: hosted-git-info: 6.1.1 proc-log: 3.0.0 - semver: 7.5.4 - validate-npm-package-name: 5.0.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + + /npm-package-arg@11.0.3: + resolution: {integrity: sha512-sHGJy8sOC1YraBywpzQlIKBE4pBbGbiF95U6Auspzyem956E0+FtDtsx1ZxlOJkQCZ1AFXAY/yuvtFYrOxF+Bw==} + engines: {node: ^16.14.0 || >=18.0.0} + dependencies: + hosted-git-info: 7.0.2 + proc-log: 4.2.0 + semver: 7.6.3 + validate-npm-package-name: 5.0.1 + dev: true - npm-pick-manifest@8.0.2: + /npm-pick-manifest@8.0.2: + resolution: {integrity: sha512-1dKY+86/AIiq1tkKVD3l0WI+Gd3vkknVGAggsFeBkTvbhMQ1OND/LKkYv4JtXPKUJ8bOTCyLiqEg2P6QNdK+Gg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: npm-install-checks: 6.3.0 npm-normalize-package-bin: 3.0.1 npm-package-arg: 10.1.0 - semver: 7.5.4 + semver: 7.6.3 - npm-run-path@4.0.1: + /npm-pick-manifest@9.1.0: + resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==} + engines: {node: ^16.14.0 || >=18.0.0} dependencies: - path-key: 3.1.1 + npm-install-checks: 6.3.0 + npm-normalize-package-bin: 3.0.1 + npm-package-arg: 11.0.3 + semver: 7.6.3 + dev: true - npm-run-path@5.1.0: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: - path-key: 4.0.0 + path-key: 3.1.1 - nwsapi@2.2.7: {} + /nwsapi@2.2.12: + resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + dev: true - object-assign@4.1.1: {} + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} - object-inspect@1.13.1: {} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} - object-is@1.1.6: + /object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.7 define-properties: 1.2.1 + dev: true - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true - object.assign@4.1.4: + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 + dev: true - object.entries@1.1.7: - dependencies: - call-bind: 1.0.5 - define-properties: 1.2.1 - es-abstract: 1.22.3 - - object.fromentries@2.0.7: + /object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - object.groupby@1.0.1: + /object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - object.hasown@1.1.3: + /object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + dev: true - object.values@1.1.7: + /object.values@1.2.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - on-finished@2.3.0: + /on-finished@2.3.0: + resolution: {integrity: sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 + dev: false - on-finished@2.4.1: + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 - on-headers@1.0.2: {} + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - - open@9.1.0: - dependencies: - default-browser: 4.0.0 - define-lazy-prop: 3.0.0 - is-inside-container: 1.0.0 - is-wsl: 2.2.0 - - optionator@0.9.3: + /optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 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 + dev: true - ora@5.4.1: + /ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -11153,37 +8270,58 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 - outdent@0.8.0: {} + /outdent@0.8.0: + resolution: {integrity: sha512-KiOAIsdpUTcAXuykya5fnVVT+/5uS0Q1mrkRHcF89tpieSmY33O/tmc54CqwA+bfhbtEfZUNLHaPUiB9X3jt1A==} - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 - p-locate@4.1.0: + /p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} dependencies: p-limit: 2.3.0 - p-locate@5.0.0: + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 - p-map@4.0.0: + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + /package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} - pako@0.2.9: {} + /pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} - parent-module@1.0.1: + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: true - parse-entities@2.0.0: + /parse-entities@2.0.0: + resolution: {integrity: sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==} dependencies: character-entities: 1.2.4 character-entities-legacy: 1.1.4 @@ -11191,10 +8329,12 @@ snapshots: is-alphanumerical: 1.0.4 is-decimal: 1.0.4 is-hexadecimal: 1.0.4 + dev: true - parse-entities@4.0.1: + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -11203,303 +8343,493 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse-json@7.1.1: + /parse-json@7.1.1: + resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==} + engines: {node: '>=16'} dependencies: - '@babel/code-frame': 7.23.5 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 - json-parse-even-better-errors: 3.0.0 + json-parse-even-better-errors: 3.0.2 lines-and-columns: 2.0.4 type-fest: 3.13.1 + dev: true - parse-ms@2.1.0: {} + /parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} - parse5@7.1.2: + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} dependencies: entities: 4.5.0 + dev: true - parseurl@1.3.3: {} - - path-browserify@1.0.1: {} + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} - path-exists@4.0.0: {} + /path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + dev: false - path-is-absolute@1.0.1: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} - path-key@3.1.1: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} - path-key@4.0.0: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} - path-parse@1.0.7: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.1: + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} dependencies: - lru-cache: 10.1.0 - minipass: 7.0.4 + lru-cache: 10.4.3 + minipass: 7.1.2 - path-to-regexp@0.1.7: {} + /path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-type@4.0.0: {} + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true - pathe@1.1.1: {} + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} - peek-stream@1.1.3: + /peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} dependencies: buffer-from: 1.1.2 duplexify: 3.7.1 through2: 2.0.5 - periscopic@3.1.0: + /periscopic@3.1.0: + resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} dependencies: '@types/estree': 1.0.5 estree-walker: 3.0.3 is-reference: 3.0.2 - picocolors@1.0.0: {} - - picocolors@1.0.1: {} + /picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} - picomatch@2.3.1: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} - pidtree@0.6.0: {} + /pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true - pirates@4.0.6: {} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} - pkg-dir@4.2.0: + /pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 - pkg-types@1.0.3: + /pkg-types@1.2.0: + resolution: {integrity: sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==} dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + confbox: 0.1.7 + mlly: 1.7.1 + pathe: 1.1.2 + + /pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} - pluralize@8.0.0: {} + /postcss-discard-duplicates@5.1.0(postcss@8.4.47): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.4.47 - postcss-discard-duplicates@5.1.0(postcss@8.4.38): + /postcss-load-config@4.0.2(postcss@8.4.47): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true dependencies: - postcss: 8.4.38 + lilconfig: 3.1.2 + postcss: 8.4.47 + yaml: 2.5.1 - postcss-load-config@4.0.2(postcss@8.4.38): + /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 dependencies: - lilconfig: 3.0.0 - postcss: 8.4.38 - yaml: 2.3.4 + lilconfig: 3.1.2 + dev: true - postcss-modules-extract-imports@3.0.0(postcss@8.4.38): + /postcss-modules-extract-imports@3.1.0(postcss@8.4.47): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-modules-local-by-default@4.0.3(postcss@8.4.38): + /postcss-modules-local-by-default@4.0.5(postcss@8.4.47): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.13 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.0.0(postcss@8.4.38): + /postcss-modules-scope@3.2.0(postcss@8.4.47): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.13 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-modules-values@4.0.0(postcss@8.4.38): + /postcss-modules-values@4.0.0(postcss@8.4.47): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 - postcss-modules@6.0.0(postcss@8.4.38): + /postcss-modules@6.0.0(postcss@8.4.47): + resolution: {integrity: sha512-7DGfnlyi/ju82BRzTIjWS5C4Tafmzl3R79YP/PASiocj+aa6yYphHhhKUOEoXQToId5rgyFgJ88+ccOUydjBXQ==} + peerDependencies: + postcss: ^8.0.0 dependencies: generic-names: 4.0.0 - icss-utils: 5.1.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.47) lodash.camelcase: 4.3.0 - postcss: 8.4.38 - postcss-modules-extract-imports: 3.0.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.3(postcss@8.4.38) - postcss-modules-scope: 3.0.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) + postcss-modules-scope: 3.2.0(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) string-hash: 1.1.3 - postcss-selector-parser@6.0.13: + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-value-parser@4.2.0: {} - - postcss@8.4.31: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.35: + /postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.0.2 + picocolors: 1.1.0 + source-map-js: 1.2.1 + dev: false - postcss@8.4.38: + /postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.0 + source-map-js: 1.2.1 - prelude-ls@1.2.1: {} + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true - prettier-plugin-packagejson@2.4.6(prettier@3.2.5): + /prettier-plugin-packagejson@2.5.2(prettier@3.3.3): + resolution: {integrity: sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true dependencies: - prettier: 3.2.5 - sort-package-json: 2.6.0 - synckit: 0.8.5 + prettier: 3.3.3 + sort-package-json: 2.10.1 + synckit: 0.9.1 + dev: true - prettier@2.8.8: {} + /prettier@2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true - prettier@3.2.5: {} + /prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + dev: true - pretty-format@27.5.1: + /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} dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 react-is: 17.0.2 + dev: true - pretty-format@29.7.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} dependencies: '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 18.2.0 + react-is: 18.3.1 - pretty-ms@7.0.1: + /pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} dependencies: parse-ms: 2.1.0 - proc-log@3.0.0: {} + /proc-log@3.0.0: + resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + /proc-log@4.2.0: + resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + dev: true - process-nextick-args@2.0.1: {} + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - promise-inflight@1.0.1: {} + /promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true - promise-retry@2.0.1: + /promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} dependencies: err-code: 2.0.3 retry: 0.12.0 - prompts@2.4.2: + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 - prop-types@15.8.1: + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 + dev: true - property-information@6.4.0: {} + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - proxy-addr@2.0.7: + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 - psl@1.9.0: {} + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true - pump@2.0.1: + /pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 - pump@3.0.0: + /pump@3.0.2: + resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} dependencies: end-of-stream: 1.4.4 once: 1.4.0 - pumpify@1.5.1: + /pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} dependencies: duplexify: 3.7.1 inherits: 2.0.4 pump: 2.0.1 - punycode@2.3.1: {} - - pure-rand@6.0.4: {} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} - qs@6.11.0: - dependencies: - side-channel: 1.0.4 + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} - qs@6.11.2: + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 - querystringify@2.2.0: {} + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - range-parser@1.2.1: {} + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} - raw-body@2.5.2: + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 - react-dom@18.2.0(react@18.2.0): + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 dependencies: loose-envify: 1.4.0 - react: 18.2.0 - scheduler: 0.23.0 + react: 18.3.1 + scheduler: 0.23.2 - react-is@16.13.1: {} + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true - react-is@17.0.2: {} + /react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + dev: true - react-is@18.2.0: {} + /react-is@18.3.1: + resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} - react-refresh@0.14.0: {} + /react-refresh@0.14.2: + resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} + engines: {node: '>=0.10.0'} - react-router-dom@6.23.1(react-dom@18.2.0)(react@18.2.0): + /react-router-dom@6.26.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' dependencies: - '@remix-run/router': 1.16.1 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - react-router: 6.23.1(react@18.2.0) + '@remix-run/router': 1.19.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.2(react@18.3.1) - react-router@6.23.1(react@18.2.0): + /react-router@6.26.2(react@18.3.1): + resolution: {integrity: sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' dependencies: - '@remix-run/router': 1.16.1 - react: 18.2.0 + '@remix-run/router': 1.19.2 + react: 18.3.1 - react@18.2.0: + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 - read-package-json-fast@3.0.2: + /read-package-json-fast@3.0.2: + resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - json-parse-even-better-errors: 3.0.0 + json-parse-even-better-errors: 3.0.2 npm-normalize-package-bin: 3.0.1 + dev: true - read-pkg-up@7.0.1: + /read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 + dev: true - read-pkg@5.2.0: + /read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 + dev: true - readable-stream@2.3.8: + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -11509,70 +8839,99 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - readdirp@3.6.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: picomatch: 2.3.1 - reflect.getprototypeof@1.0.4: + /reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 - globalthis: 1.0.3 - which-builtin-type: 1.1.3 + es-abstract: 1.23.3 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.4 + which-builtin-type: 1.1.4 + dev: true - regenerator-runtime@0.14.0: {} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regexp-tree@0.1.27: {} + /regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + dev: true - regexp.prototype.flags@1.5.1: + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true - regexpp@3.2.0: {} + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true - regjsparser@0.10.0: + /regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true dependencies: jsesc: 0.5.0 + dev: true - remark-frontmatter@4.0.1: + /remark-frontmatter@4.0.1: + resolution: {integrity: sha512-38fJrB0KnmD3E33a5jZC/5+gGAC2WKNiPw1/fdXJvijBlhA7RCsvJklrYJakS0HedninvaCYW8lQGf9C918GfA==} dependencies: '@types/mdast': 3.0.15 mdast-util-frontmatter: 1.0.1 micromark-extension-frontmatter: 1.1.1 unified: 10.1.2 - remark-mdx-frontmatter@1.1.1: + /remark-mdx-frontmatter@1.1.1: + resolution: {integrity: sha512-7teX9DW4tI2WZkXS4DBxneYSY7NHiXl4AKdWDO9LXVweULlCT8OPWsOjLEnMIXViN1j+QcY8mfbq3k0EK6x3uA==} + engines: {node: '>=12.2.0'} dependencies: estree-util-is-identifier-name: 1.1.0 estree-util-value-to-estree: 1.3.0 js-yaml: 4.1.0 toml: 3.0.0 - remark-mdx@2.3.0: + /remark-mdx@2.3.0: + resolution: {integrity: sha512-g53hMkpM0I98MU266IzDFMrTD980gNF3BJnkyFcmN+dD873mQeD5rdMO3Y2X+x8umQfbSE0PcoEDl7ledSA+2g==} dependencies: mdast-util-mdx: 2.0.1 micromark-extension-mdxjs: 1.0.1 transitivePeerDependencies: - supports-color - remark-mdx@3.0.1: + /remark-mdx@3.0.1: + resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color + dev: true - remark-parse@10.0.2: + /remark-parse@10.0.2: + resolution: {integrity: sha512-3ydxgHa/ZQzG8LvC7jTXccARYDcRld3VfcgIIFs7bI6vbRSxJJmzgLEIIoYKyrfhaY+ujuWaf/PJiMZXoiCXgw==} dependencies: '@types/mdast': 3.0.15 mdast-util-from-markdown: 1.3.1 @@ -11580,148 +8939,217 @@ snapshots: transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: true - remark-rehype@10.1.0: + /remark-rehype@10.1.0: + resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} dependencies: - '@types/hast': 2.3.8 + '@types/hast': 2.3.10 '@types/mdast': 3.0.15 mdast-util-to-hast: 12.3.0 unified: 10.1.2 - remark-stringify@11.0.0: + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 + unified: 11.0.5 + dev: true - require-directory@2.1.1: {} + /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: {} + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: false - require-like@0.1.2: {} + /require-like@0.1.2: + resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} - requireindex@1.2.0: {} + /requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + dev: true - requires-port@1.0.0: {} + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true - resolve-cwd@3.0.0: + /resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} dependencies: resolve-from: 5.0.0 - resolve-from@4.0.0: {} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true - resolve-from@5.0.0: {} + /resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: {} + /resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + dev: true - resolve.exports@2.0.2: {} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} + engines: {node: '>=10'} - resolve@1.19.0: + /resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 + dev: true - resolve@1.22.8: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - resolve@2.0.0-next.5: + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: true - restore-cursor@3.1.0: + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - retry@0.12.0: {} + /retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} - reusify@1.0.4: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: true - rollup@3.29.4: - optionalDependencies: - fsevents: 2.3.3 - - rollup@4.5.2: + /rollup@4.21.3: + resolution: {integrity: sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.2 - '@rollup/rollup-android-arm64': 4.5.2 - '@rollup/rollup-darwin-arm64': 4.5.2 - '@rollup/rollup-darwin-x64': 4.5.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 - '@rollup/rollup-linux-arm64-gnu': 4.5.2 - '@rollup/rollup-linux-arm64-musl': 4.5.2 - '@rollup/rollup-linux-x64-gnu': 4.5.2 - '@rollup/rollup-linux-x64-musl': 4.5.2 - '@rollup/rollup-win32-arm64-msvc': 4.5.2 - '@rollup/rollup-win32-ia32-msvc': 4.5.2 - '@rollup/rollup-win32-x64-msvc': 4.5.2 + '@rollup/rollup-android-arm-eabi': 4.21.3 + '@rollup/rollup-android-arm64': 4.21.3 + '@rollup/rollup-darwin-arm64': 4.21.3 + '@rollup/rollup-darwin-x64': 4.21.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.21.3 + '@rollup/rollup-linux-arm-musleabihf': 4.21.3 + '@rollup/rollup-linux-arm64-gnu': 4.21.3 + '@rollup/rollup-linux-arm64-musl': 4.21.3 + '@rollup/rollup-linux-powerpc64le-gnu': 4.21.3 + '@rollup/rollup-linux-riscv64-gnu': 4.21.3 + '@rollup/rollup-linux-s390x-gnu': 4.21.3 + '@rollup/rollup-linux-x64-gnu': 4.21.3 + '@rollup/rollup-linux-x64-musl': 4.21.3 + '@rollup/rollup-win32-arm64-msvc': 4.21.3 + '@rollup/rollup-win32-ia32-msvc': 4.21.3 + '@rollup/rollup-win32-x64-msvc': 4.21.3 fsevents: 2.3.3 - run-applescript@5.0.0: - dependencies: - execa: 5.1.1 - - run-parallel@1.2.0: + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 - sade@1.8.1: + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} dependencies: mri: 1.2.0 - safe-array-concat@1.0.1: + /safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 + dev: true - safe-buffer@5.1.2: {} + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-buffer@5.2.1: {} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-regex-test@1.0.0: + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 + dev: true - safer-buffer@2.1.2: {} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - saxes@6.0.0: + /saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} dependencies: xmlchars: 2.2.0 + dev: true - scheduler@0.23.0: + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 - semver@5.7.2: {} + /semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + dev: true - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true - send@0.18.0: + /send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 @@ -11739,27 +9167,27 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.15.0: + /serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color - server-only@0.0.1: {} - - set-cookie-parser@2.6.0: {} + /server-only@0.0.1: + resolution: {integrity: sha512-qepMx2JxAa5jjfzxG79yPPq+8BuFToHd1hm7kI+Z4zAq1ftQiP7HcxMhDDItrbtwVeLg/cY2JnKnrcFkmiswNA==} + dev: false - set-function-length@1.1.1: - dependencies: - define-data-property: 1.1.1 - get-intrinsic: 1.2.2 - gopd: 1.0.1 - has-property-descriptors: 1.0.1 + /set-cookie-parser@2.7.0: + resolution: {integrity: sha512-lXLOiqpkUumhRdFF3k1osNXCy9akgx/dyPZ5p8qAg9seJzXr5ZrlqZuWIMuY6ejOsVLE6flJ5/h3lsn57fQ/PQ==} - set-function-length@1.2.2: + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -11768,39 +9196,64 @@ snapshots: gopd: 1.0.1 has-property-descriptors: 1.0.2 - set-function-name@2.0.1: + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.1 + has-property-descriptors: 1.0.2 + dev: true - setprototypeof@1.2.0: {} + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} - side-channel@1.0.4: + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - object-inspect: 1.13.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 - signal-exit@3.0.7: {} + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: {} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} - sisteransi@1.0.5: {} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} - slash@4.0.0: {} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true - sort-object-keys@1.1.3: {} + /sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + dev: true - sort-package-json@2.6.0: + /sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -11808,237 +9261,364 @@ snapshots: git-hooks-list: 3.1.0 globby: 13.2.2 is-plain-obj: 4.1.0 + semver: 7.6.3 sort-object-keys: 1.1.3 + dev: true - source-map-js@1.0.2: {} - - source-map-js@1.2.0: {} + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} - source-map-support@0.5.13: + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map-support@0.5.21: + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} - source-map@0.7.4: {} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} - source-map@0.8.0-beta.0: + /source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} dependencies: whatwg-url: 7.1.0 + dev: true - space-separated-tokens@2.0.2: {} + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spdx-correct@3.2.0: + /spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.20 - spdx-exceptions@2.3.0: {} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - spdx-expression-parse@3.0.1: + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.16: {} + /spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} - sprintf-js@1.0.3: {} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - ssri@10.0.5: + /ssri@10.0.6: + resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: - minipass: 7.0.4 + minipass: 7.1.2 - stack-utils@2.0.6: + /stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} dependencies: escape-string-regexp: 2.0.0 - statuses@2.0.1: {} + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} - stop-iteration-iterator@1.0.0: + /stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} dependencies: - internal-slot: 1.0.6 + internal-slot: 1.0.7 + dev: true - stream-shift@1.0.1: {} + /stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} - stream-slice@0.1.2: {} + /stream-slice@0.1.2: + resolution: {integrity: sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==} - streamsearch@1.1.0: {} + /streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + dev: false - string-hash@1.1.3: {} + /string-hash@1.1.3: + resolution: {integrity: sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==} - string-length@4.0.2: + /string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} dependencies: char-regex: 1.0.2 strip-ansi: 6.0.1 - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - string-width@6.1.0: + /string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} dependencies: eastasianwidth: 0.2.0 - emoji-regex: 10.3.0 + emoji-regex: 10.4.0 strip-ansi: 7.1.0 + dev: true + + /string.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true - string.prototype.matchall@4.0.10: + /string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 - get-intrinsic: 1.2.2 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.6 - regexp.prototype.flags: 1.5.1 - set-function-name: 2.0.1 - side-channel: 1.0.4 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + + /string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.23.3 + dev: true - string.prototype.trim@1.2.8: + /string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-abstract: 1.23.3 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimend@1.0.7: + /string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - string.prototype.trimstart@1.0.7: + /string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.3 + es-object-atoms: 1.0.0 + dev: true - string_decoder@1.1.1: + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - string_decoder@1.3.0: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 - stringify-entities@4.0.3: + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 - strip-bom@3.0.0: {} - - strip-bom@4.0.0: {} + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} - strip-final-newline@2.0.0: {} + /strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} - strip-final-newline@3.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} - strip-indent@3.0.0: + /strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} dependencies: min-indent: 1.0.1 + dev: true - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} - style-to-object@0.4.4: + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: inline-style-parser: 0.1.1 - styled-jsx@5.1.1(react@18.2.0): + /styled-jsx@5.1.1(react@18.3.1): + resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} + engines: {node: '>= 12.0.0'} + peerDependencies: + '@babel/core': '*' + babel-plugin-macros: '*' + react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' + peerDependenciesMeta: + '@babel/core': + optional: true + babel-plugin-macros: + optional: true dependencies: client-only: 0.0.1 - react: 18.2.0 + react: 18.3.1 + dev: false - sucrase@3.34.0: + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 7.1.6 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: true - superagent@8.1.2: + /superagent@8.1.2: + resolution: {integrity: sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==} + engines: {node: '>=6.4.0 <13 || >=14'} + deprecated: Please upgrade to v9.0.0+ as we have fixed a public vulnerability with formidable dependency. Note that v9.0.0+ requires Node.js v14.18.0+. See https://github.com/ladjs/superagent/pull/1800 for insight. This project is supported and maintained by the team at Forward Email @ https://forwardemail.net dependencies: component-emitter: 1.3.1 cookiejar: 2.1.4 - debug: 4.3.4 + debug: 4.3.7 fast-safe-stringify: 2.1.1 form-data: 4.0.0 formidable: 2.1.2 methods: 1.1.2 mime: 2.6.0 - qs: 6.11.2 - semver: 7.5.4 + qs: 6.13.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color + dev: true - supertest@6.3.4: + /supertest@6.3.4: + resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} + engines: {node: '>=6.4.0'} dependencies: methods: 1.1.2 superagent: 8.1.2 transitivePeerDependencies: - supports-color + dev: true - supports-color@5.5.0: + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} dependencies: has-flag: 3.0.0 - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 - supports-color@8.1.1: + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - supports-color@9.4.0: {} - - supports-preserve-symlinks-flag@1.0.0: {} + /supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + dev: true - symbol-tree@3.2.4: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} - synckit@0.8.5: - dependencies: - '@pkgr/utils': 2.4.2 - tslib: 2.6.2 + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true - synckit@0.9.0: + /synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} dependencies: - '@pkgr/core': 0.1.0 - tslib: 2.6.2 + '@pkgr/core': 0.1.1 + tslib: 2.7.0 + dev: true - tapable@2.2.1: {} + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true - tar-fs@2.1.1: + /tar-fs@2.1.1: + resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.0 + pump: 3.0.2 tar-stream: 2.2.0 - tar-stream@2.2.0: + /tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} dependencies: bl: 4.1.0 end-of-stream: 1.4.4 @@ -12046,7 +9626,9 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - tar@6.2.0: + /tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} dependencies: chownr: 2.0.0 fs-minipass: 2.1.0 @@ -12055,566 +9637,874 @@ snapshots: mkdirp: 1.0.4 yallist: 4.0.0 - test-exclude@6.0.0: + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true - thenify-all@1.6.0: + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: true - thenify@3.3.1: + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: true - through2@2.0.5: + /through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: readable-stream: 2.3.8 xtend: 4.0.2 - titleize@3.0.0: {} - - tmpl@1.0.5: {} + /tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-fast-properties@2.0.0: {} + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 - toidentifier@1.0.1: {} + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} - toml@3.0.0: {} + /toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} - tough-cookie@4.1.3: + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} dependencies: psl: 1.9.0 punycode: 2.3.1 universalify: 0.2.0 url-parse: 1.5.10 + dev: true - tr46@1.0.1: + /tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: punycode: 2.3.1 + dev: true - tr46@3.0.0: + /tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} dependencies: punycode: 2.3.1 + dev: true - tree-kill@1.2.2: {} + /tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + dev: true - trim-lines@3.0.1: {} + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trough@2.1.0: {} + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.3.0(typescript@5.6.2): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.6.2 + dev: true - ts-dedent@2.2.0: {} + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: true - ts-interface-checker@0.1.13: {} + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: true - ts-jest@29.1.2(@babel/core@7.24.0)(jest@29.7.0)(typescript@5.3.3): + /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.6.2): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + 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 dependencies: - '@babel/core': 7.24.0 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.24) + jest: 29.7.0(@types/node@20.16.5) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.3.3 + semver: 7.6.3 + typescript: 5.6.2 yargs-parser: 21.1.1 + dev: false - ts-morph@12.0.0: + /ts-morph@12.0.0: + resolution: {integrity: sha512-VHC8XgU2fFW7yO1f/b3mxKDje1vmyzFXHWzOYmKEkCEwcLjDtbdLgBQviqj4ZwP4MJkQtRo6Ha2I29lq/B+VxA==} dependencies: '@ts-morph/common': 0.11.1 code-block-writer: 10.1.1 + dev: false - ts-toolbelt@6.15.5: {} + /ts-toolbelt@6.15.5: + resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} + dev: false - tsconfck@3.1.0(typescript@5.3.3): + /tsconfck@3.1.3(typescript@5.6.2): + resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} + engines: {node: ^18 || >=20} + hasBin: true + peerDependencies: + typescript: ^5.0.0 + peerDependenciesMeta: + typescript: + optional: true dependencies: - typescript: 5.3.3 + typescript: 5.6.2 + dev: true - tsconfig-paths@3.14.2: + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 + dev: true - tsconfig-paths@4.2.0: + /tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} dependencies: json5: 2.2.3 minimist: 1.2.8 strip-bom: 3.0.0 - tslib@1.14.1: {} + /tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true - tslib@2.6.2: {} + /tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - tsup@8.0.2(typescript@5.3.3): + /tsup@8.2.4(typescript@5.6.2): + resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: '>=4.5.0' + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true dependencies: - bundle-require: 4.0.2(esbuild@0.19.7) + bundle-require: 5.0.0(esbuild@0.23.1) cac: 6.7.14 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.19.7 + chokidar: 3.6.0 + consola: 3.2.3 + debug: 4.3.7 + esbuild: 0.23.1 execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.38) + picocolors: 1.1.0 + postcss-load-config: 6.0.1 resolve-from: 5.0.0 - rollup: 4.5.2 + rollup: 4.21.3 source-map: 0.8.0-beta.0 - sucrase: 3.34.0 + sucrase: 3.35.0 tree-kill: 1.2.2 - typescript: 5.3.3 + typescript: 5.6.2 transitivePeerDependencies: + - jiti - supports-color - - ts-node + - tsx + - yaml + dev: true - tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.6.2): + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.6.2 + dev: true - turbo-darwin-64@2.0.5: + /turbo-darwin-64@2.1.2: + resolution: {integrity: sha512-3TEBxHWh99h2yIzkuIigMEOXt/ItYQp0aPiJjPd1xN4oDcsKK5AxiFKPH9pdtfIBzYsY59kQhZiFj0ELnSP7Bw==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true optional: true - turbo-darwin-arm64@2.0.5: + /turbo-darwin-arm64@2.1.2: + resolution: {integrity: sha512-he0miWNq2WxJzsH82jS2Z4MXpnkzn9SH8a79iPXiJkq25QREImucscM4RPasXm8wARp91pyysJMq6aasD45CeA==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true optional: true - turbo-linux-64@2.0.5: + /turbo-linux-64@2.1.2: + resolution: {integrity: sha512-fKUBcc0rK8Vdqv5a/E3CSpMBLG1bzwv+Q0Q83F8fG2ZfNCNKGbcEYABdonNZkkx141Rj03cZQFCgxu3MVEGU+A==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true optional: true - turbo-linux-arm64@2.0.5: + /turbo-linux-arm64@2.1.2: + resolution: {integrity: sha512-sV8Bpmm0WiuxgbhxymcC7wSsuxfBBieI98GegSwbr/bs1ANAgzCg93urIrdKdQ3/b31zZxQwcaP4FBF1wx1Qdg==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true optional: true - turbo-stream@2.2.0: {} + /turbo-stream@2.4.0: + resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} - turbo-windows-64@2.0.5: + /turbo-windows-64@2.1.2: + resolution: {integrity: sha512-wcmIJZI9ORT9ykHGliFE6kWRQrlH930QGSjSgWC8uFChFFuOyUlvC7ttcxuSvU9VqC7NF4C+GVAcFJQ8lTjN7g==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true optional: true - turbo-windows-arm64@2.0.5: + /turbo-windows-arm64@2.1.2: + resolution: {integrity: sha512-zdnXjrhk7YO6CP+Q5wPueEvOCLH4lDa6C4rrwiakcWcPgcQGbVozJlo4uaQ6awo8HLWQEvOwu84RkWTdLAc/Hw==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true optional: true - turbo@2.0.5: + /turbo@2.1.2: + resolution: {integrity: sha512-Jb0rbU4iHEVQ18An/YfakdIv9rKnd3zUfSE117EngrfWXFHo3RndVH96US3GsT8VHpwTncPePDBT2t06PaFLrw==} + hasBin: true optionalDependencies: - turbo-darwin-64: 2.0.5 - turbo-darwin-arm64: 2.0.5 - turbo-linux-64: 2.0.5 - turbo-linux-arm64: 2.0.5 - turbo-windows-64: 2.0.5 - turbo-windows-arm64: 2.0.5 - - type-check@0.4.0: + turbo-darwin-64: 2.1.2 + turbo-darwin-arm64: 2.1.2 + turbo-linux-64: 2.1.2 + turbo-linux-arm64: 2.1.2 + turbo-windows-64: 2.1.2 + turbo-windows-arm64: 2.1.2 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.2.1 + dev: true - type-detect@4.0.8: {} + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} - type-fest@0.20.2: {} + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true - type-fest@0.21.3: {} + /type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} - type-fest@0.6.0: {} + /type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + dev: true - type-fest@0.8.1: {} + /type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + dev: true - type-fest@3.13.1: {} + /type-fest@3.13.1: + resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} + engines: {node: '>=14.16'} + dev: true - type-is@1.6.18: + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 - typed-array-buffer@1.0.0: + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 - get-intrinsic: 1.2.2 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-length@1.0.0: + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-byte-offset@1.0.0: + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true - typed-array-length@1.0.4: + /typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true - typedarray@0.0.6: {} + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true - typescript@5.3.3: {} + /typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + engines: {node: '>=14.17'} + hasBin: true - ufo@1.3.2: {} + /ufo@1.5.4: + resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==} - unbox-primitive@1.0.2: + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.5 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + dev: true - undici-types@5.26.5: {} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@6.19.2: {} + /undici@6.19.8: + resolution: {integrity: sha512-U8uCCl2x9TK3WANvmBavymRzxbfFYG+tAu+fgx3zxQy3qdagQqBLwJVrdyO1TBfUXvfKveMKJZhpvUYoOjM+4g==} + engines: {node: '>=18.17'} - unified-engine@11.2.0: + /unified-engine@11.2.1: + resolution: {integrity: sha512-xBAdZ8UY2X4R9Hm6X6kMne4Nz0PlpOc1oE6DPeqJnewr5Imkb8uT5Eyvy1h7xNekPL3PSWh3ZJyNrMW6jnNQBg==} dependencies: '@types/concat-stream': 2.0.3 '@types/debug': 4.1.12 '@types/is-empty': 1.2.3 - '@types/node': 20.11.24 - '@types/unist': 3.0.2 - '@ungap/structured-clone': 1.2.0 + '@types/node': 20.16.5 + '@types/unist': 3.0.3 concat-stream: 2.0.0 - debug: 4.3.4 - glob: 10.3.10 - ignore: 5.3.1 + debug: 4.3.7 + extend: 3.0.2 + glob: 10.4.5 + ignore: 5.3.2 is-empty: 1.2.0 is-plain-obj: 4.1.0 - load-plugin: 6.0.2 + load-plugin: 6.0.3 parse-json: 7.1.1 - trough: 2.1.0 - unist-util-inspect: 8.0.0 - vfile: 6.0.1 + trough: 2.2.0 + unist-util-inspect: 8.1.0 + vfile: 6.0.3 vfile-message: 4.0.2 - vfile-reporter: 8.1.0 + vfile-reporter: 8.1.1 vfile-statistics: 3.0.0 - yaml: 2.3.4 + yaml: 2.5.1 transitivePeerDependencies: + - bluebird - supports-color + dev: true - unified@10.1.2: + /unified@10.1.2: + resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 bail: 2.0.2 extend: 3.0.2 is-buffer: 2.0.5 is-plain-obj: 4.1.0 - trough: 2.1.0 + trough: 2.2.0 vfile: 5.3.7 - unified@11.0.4: + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: - '@types/unist': 3.0.2 + '@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.1.0 - vfile: 6.0.1 + trough: 2.2.0 + vfile: 6.0.3 + dev: true - unique-filename@3.0.0: + /unique-filename@3.0.0: + resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: unique-slug: 4.0.0 - unique-slug@4.0.0: + /unique-slug@4.0.0: + resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: imurmurhash: 0.1.4 - unist-util-generated@2.0.1: {} + /unist-util-generated@2.0.1: + resolution: {integrity: sha512-qF72kLmPxAw0oN2fwpWIqbXAVyEqUzDHMsbtPvOudIlUzXYFIeQIuxXQCRCFh22B7cixvU0MG7m3MW8FTq/S+A==} - unist-util-inspect@8.0.0: + /unist-util-inspect@8.1.0: + resolution: {integrity: sha512-mOlg8Mp33pR0eeFpo5d2902ojqFFOKMMG2hF8bmH7ZlhnmjFgh0NI3/ZDwdaBJNbvrS7LZFVrBVtIE9KZ9s7vQ==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 + dev: true - unist-util-is@5.2.1: + /unist-util-is@5.2.1: + resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - unist-util-is@6.0.0: + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 + dev: true - unist-util-position-from-estree@1.1.2: + /unist-util-position-from-estree@1.1.2: + resolution: {integrity: sha512-poZa0eXpS+/XpoQwGwl79UUdea4ol2ZuCYguVaJS4qzIOMDzbqz8a3erUCOmubSZkaOuGamb3tX790iwOIROww==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - unist-util-position-from-estree@2.0.0: + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 + dev: true - unist-util-position@4.0.4: + /unist-util-position@4.0.4: + resolution: {integrity: sha512-kUBE91efOWfIVBo8xzh/uZQ7p9ffYRtUbMRZBNFYwf0RK8koUMx6dGUfwylLOKmaT2cs4wSW96QoYUSXAyEtpg==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - unist-util-remove-position@4.0.2: + /unist-util-remove-position@4.0.2: + resolution: {integrity: sha512-TkBb0HABNmxzAcfLf4qsIbFbaPDvMO6wa3b3j4VcEzFVaw1LBKwnW4/sRJ/atSLSzoIg41JWEdnE7N6DIhGDGQ==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-visit: 4.1.2 - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-visit: 5.0.0 - - unist-util-stringify-position@2.0.3: + /unist-util-stringify-position@2.0.3: + resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 + dev: true - unist-util-stringify-position@3.0.3: + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 - unist-util-stringify-position@4.0.0: + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 + dev: true - unist-util-visit-parents@5.1.3: + /unist-util-visit-parents@5.1.3: + resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 - unist-util-visit-parents@6.0.1: + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 + dev: true - unist-util-visit@4.1.2: + /unist-util-visit@4.1.2: + resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-is: 5.2.1 unist-util-visit-parents: 5.1.3 - unist-util-visit@5.0.0: + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 + dev: true - universalify@0.2.0: {} - - universalify@2.0.1: {} - - unpipe@1.0.0: {} + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true - untildify@4.0.0: {} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} - update-browserslist-db@1.0.13(browserslist@4.22.2): - dependencies: - browserslist: 4.22.2 - escalade: 3.1.1 - picocolors: 1.0.0 + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} - update-browserslist-db@1.0.16(browserslist@4.23.1): + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: - browserslist: 4.23.1 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.1.0 - uri-js@4.4.1: + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 - url-parse@1.5.10: + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: querystringify: 2.2.0 requires-port: 1.0.0 + dev: true - util-deprecate@1.0.2: {} + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - util@0.12.5: + /util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} dependencies: inherits: 2.0.4 is-arguments: 1.1.1 is-generator-function: 1.0.10 - is-typed-array: 1.1.12 - which-typed-array: 1.1.13 + is-typed-array: 1.1.13 + which-typed-array: 1.1.15 - utils-merge@1.0.1: {} + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} - uvu@0.5.6: + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true dependencies: dequal: 2.0.3 - diff: 5.1.0 + diff: 5.2.0 kleur: 4.1.5 sade: 1.8.1 - v8-to-istanbul@9.2.0: + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.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: + /validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - validate-npm-package-name@5.0.0: - dependencies: - builtins: 5.0.1 + /validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - vary@1.1.2: {} + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} - vfile-message@3.1.4: + /vfile-message@3.1.4: + resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 unist-util-stringify-position: 3.0.3 - vfile-message@4.0.2: + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 + dev: true - vfile-reporter@8.1.0: + /vfile-reporter@8.1.1: + resolution: {integrity: sha512-qxRZcnFSQt6pWKn3PAk81yLK2rO2i7CDXpy8v8ZquiEOMLSnPw6BMSi9Y1sUCwGGl7a9b3CJT1CKpnRF7pp66g==} dependencies: '@types/supports-color': 8.1.3 string-width: 6.1.0 supports-color: 9.4.0 unist-util-stringify-position: 4.0.0 - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 vfile-sort: 4.0.0 vfile-statistics: 3.0.0 + dev: true - vfile-sort@4.0.0: + /vfile-sort@4.0.0: + resolution: {integrity: sha512-lffPI1JrbHDTToJwcq0rl6rBmkjQmMuXkAxsZPRS9DXbaJQvc642eCg6EGxcX2i1L+esbuhq+2l9tBll5v8AeQ==} dependencies: - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 + dev: true - vfile-statistics@3.0.0: + /vfile-statistics@3.0.0: + resolution: {integrity: sha512-/qlwqwWBWFOmpXujL/20P+Iuydil0rZZNglR+VNm6J0gpLHwuVM5s7g2TfVoswbXjZ4HuIhLMySEyIw5i7/D8w==} dependencies: - vfile: 6.0.1 + vfile: 6.0.3 vfile-message: 4.0.2 + dev: true - vfile@5.3.7: + /vfile@5.3.7: + resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 is-buffer: 2.0.5 unist-util-stringify-position: 3.0.3 vfile-message: 3.1.4 - vfile@6.0.1: + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 + '@types/unist': 3.0.3 vfile-message: 4.0.2 + dev: true - vite-node@0.28.5: + /vite-node@1.6.0: + resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4 - mlly: 1.4.2 - pathe: 1.1.1 - picocolors: 1.0.1 - source-map: 0.6.1 - source-map-support: 0.5.21 - vite: 4.5.0 + debug: 4.3.7 + pathe: 1.1.2 + picocolors: 1.1.0 + vite: 5.4.6 transitivePeerDependencies: - '@types/node' - less - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color - terser - vite-tsconfig-paths@4.3.2(typescript@5.3.3)(vite@5.1.4): + /vite-tsconfig-paths@4.3.2(typescript@5.6.2)(vite@5.4.6): + resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} + peerDependencies: + vite: '*' + peerDependenciesMeta: + vite: + optional: true dependencies: - debug: 4.3.4 + debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.0(typescript@5.3.3) - vite: 5.1.4 + tsconfck: 3.1.3(typescript@5.6.2) + vite: 5.4.6 transitivePeerDependencies: - supports-color - typescript + dev: true - vite@4.5.0: - dependencies: - esbuild: 0.18.20 - postcss: 8.4.38 - rollup: 3.29.4 - optionalDependencies: - fsevents: 2.3.3 - - vite@5.1.4: + /vite@5.4.6: + resolution: {integrity: sha512-IeL5f8OO5nylsgzd9tq4qD2QqI0k2CQLGrWD0rCN0EQJZpBK5vJAx0I+GDkMOXxQX/OfFHMuLIx6ddAxGX/k+Q==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true dependencies: - esbuild: 0.19.7 - postcss: 8.4.35 - rollup: 4.5.2 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.21.3 optionalDependencies: fsevents: 2.3.3 - w3c-xmlserializer@4.0.0: + /w3c-xmlserializer@4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==} + engines: {node: '>=14'} dependencies: xml-name-validator: 4.0.0 + dev: true - walk-up-path@3.0.1: {} + /walk-up-path@3.0.1: + resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==} + dev: true - walker@1.0.8: + /walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: makeerror: 1.0.12 - wcwidth@1.0.1: + /wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} dependencies: defaults: 1.0.4 - web-encoding@1.1.5: + /web-encoding@1.1.5: + resolution: {integrity: sha512-HYLeVCdJ0+lBYV2FvNZmv3HJ2Nt0QYXqZojk3d9FJOLkwnuhzM9tmamh8d7HPM8QqjKH8DeHkFTx+CFlWpZZDA==} dependencies: util: 0.12.5 optionalDependencies: '@zxing/text-encoding': 0.9.0 - web-streams-polyfill@3.2.1: {} + /web-streams-polyfill@3.3.3: + resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==} + engines: {node: '>= 8'} - webidl-conversions@4.0.2: {} + /webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + dev: true - webidl-conversions@7.0.0: {} + /webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + dev: true - whatwg-encoding@2.0.0: + /whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} dependencies: iconv-lite: 0.6.3 + dev: true - whatwg-mimetype@3.0.0: {} + /whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + dev: true - whatwg-url@11.0.0: + /whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} dependencies: tr46: 3.0.0 webidl-conversions: 7.0.0 + dev: true - whatwg-url@7.1.0: + /whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} dependencies: lodash.sortby: 4.7.0 tr46: 1.0.1 webidl-conversions: 4.0.2 + dev: true - which-boxed-primitive@1.0.2: + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 + dev: true - which-builtin-type@1.1.3: + /which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} dependencies: function.prototype.name: 1.1.6 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 is-async-function: 2.0.0 is-date-object: 1.0.5 is-finalizationregistry: 1.0.2 @@ -12623,81 +10513,155 @@ snapshots: is-weakref: 1.0.2 isarray: 2.0.5 which-boxed-primitive: 1.0.2 - which-collection: 1.0.1 - which-typed-array: 1.1.13 + which-collection: 1.0.2 + which-typed-array: 1.1.15 + dev: true - which-collection@1.0.1: + /which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} dependencies: - is-map: 2.0.2 - is-set: 2.0.2 - is-weakmap: 2.0.1 - is-weakset: 2.0.2 + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.3 + dev: true - which-typed-array@1.1.13: + /which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.5 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 - which@3.0.1: + /which@3.0.1: + resolution: {integrity: sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + hasBin: true dependencies: isexe: 2.0.0 - wrap-ansi@7.0.0: + /which@4.0.0: + resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + dependencies: + isexe: 3.1.1 + dev: true + + /word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - wrappy@1.0.2: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - write-file-atomic@4.0.2: + /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} dependencies: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@7.5.9: {} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true - ws@8.14.2: {} + /ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + 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 + dev: true - xml-name-validator@4.0.0: {} + /xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + dev: true - xmlchars@2.2.0: {} + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true - xtend@4.0.2: {} + /xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} - y18n@5.0.8: {} + /y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} - yallist@3.1.1: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: {} + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.3.4: {} + /yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + engines: {node: '>= 14'} + hasBin: true - yargs-parser@21.1.1: {} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} - yargs@17.7.2: + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.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 - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} - zwitch@2.0.4: {} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} diff --git a/examples/with-vite/pnpm-lock.yaml b/examples/with-vite/pnpm-lock.yaml index 9cf5fcf1fff31..eb62f529fc453 100644 --- a/examples/with-vite/pnpm-lock.yaml +++ b/examples/with-vite/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -66,7 +66,7 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^7.1.0 version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) @@ -93,250 +93,381 @@ importers: packages: - '@aashutoshrathi/word-wrap@1.2.6': + /@aashutoshrathi/word-wrap@1.2.6: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - '@esbuild/android-arm64@0.19.7': + /@esbuild/android-arm64@0.19.7: resolution: {integrity: sha512-YEDcw5IT7hW3sFKZBkCAQaOCJQLONVcD4bOyTXMZz5fr66pTHnAet46XAtbXAkJRfIn2YVhdC6R9g4xa27jQ1w==} engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm@0.19.7': + /@esbuild/android-arm@0.19.7: resolution: {integrity: sha512-YGSPnndkcLo4PmVl2tKatEn+0mlVMr3yEpOOT0BeMria87PhvoJb5dg5f5Ft9fbCVgtAz4pWMzZVgSEGpDAlww==} engines: {node: '>=12'} cpu: [arm] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-x64@0.19.7': + /@esbuild/android-x64@0.19.7: resolution: {integrity: sha512-jhINx8DEjz68cChFvM72YzrqfwJuFbfvSxZAk4bebpngGfNNRm+zRl4rtT9oAX6N9b6gBcFaJHFew5Blf6CvUw==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-arm64@0.19.7': + /@esbuild/darwin-arm64@0.19.7: resolution: {integrity: sha512-dr81gbmWN//3ZnBIm6YNCl4p3pjnabg1/ZVOgz2fJoUO1a3mq9WQ/1iuEluMs7mCL+Zwv7AY5e3g1hjXqQZ9Iw==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-x64@0.19.7': + /@esbuild/darwin-x64@0.19.7: resolution: {integrity: sha512-Lc0q5HouGlzQEwLkgEKnWcSazqr9l9OdV2HhVasWJzLKeOt0PLhHaUHuzb8s/UIya38DJDoUm74GToZ6Wc7NGQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-arm64@0.19.7': + /@esbuild/freebsd-arm64@0.19.7: resolution: {integrity: sha512-+y2YsUr0CxDFF7GWiegWjGtTUF6gac2zFasfFkRJPkMAuMy9O7+2EH550VlqVdpEEchWMynkdhC9ZjtnMiHImQ==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-x64@0.19.7': + /@esbuild/freebsd-x64@0.19.7: resolution: {integrity: sha512-CdXOxIbIzPJmJhrpmJTLx+o35NoiKBIgOvmvT+jeSadYiWJn0vFKsl+0bSG/5lwjNHoIDEyMYc/GAPR9jxusTA==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm64@0.19.7': + /@esbuild/linux-arm64@0.19.7: resolution: {integrity: sha512-inHqdOVCkUhHNvuQPT1oCB7cWz9qQ/Cz46xmVe0b7UXcuIJU3166aqSunsqkgSGMtUCWOZw3+KMwI6otINuC9g==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm@0.19.7': + /@esbuild/linux-arm@0.19.7: resolution: {integrity: sha512-Y+SCmWxsJOdQtjcBxoacn/pGW9HDZpwsoof0ttL+2vGcHokFlfqV666JpfLCSP2xLxFpF1lj7T3Ox3sr95YXww==} engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ia32@0.19.7': + /@esbuild/linux-ia32@0.19.7: resolution: {integrity: sha512-2BbiL7nLS5ZO96bxTQkdO0euGZIUQEUXMTrqLxKUmk/Y5pmrWU84f+CMJpM8+EHaBPfFSPnomEaQiG/+Gmh61g==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-loong64@0.19.7': + /@esbuild/linux-loong64@0.19.7: resolution: {integrity: sha512-BVFQla72KXv3yyTFCQXF7MORvpTo4uTA8FVFgmwVrqbB/4DsBFWilUm1i2Oq6zN36DOZKSVUTb16jbjedhfSHw==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-mips64el@0.19.7': + /@esbuild/linux-mips64el@0.19.7: resolution: {integrity: sha512-DzAYckIaK+pS31Q/rGpvUKu7M+5/t+jI+cdleDgUwbU7KdG2eC3SUbZHlo6Q4P1CfVKZ1lUERRFP8+q0ob9i2w==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ppc64@0.19.7': + /@esbuild/linux-ppc64@0.19.7: resolution: {integrity: sha512-JQ1p0SmUteNdUaaiRtyS59GkkfTW0Edo+e0O2sihnY4FoZLz5glpWUQEKMSzMhA430ctkylkS7+vn8ziuhUugQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-riscv64@0.19.7': + /@esbuild/linux-riscv64@0.19.7: resolution: {integrity: sha512-xGwVJ7eGhkprY/nB7L7MXysHduqjpzUl40+XoYDGC4UPLbnG+gsyS1wQPJ9lFPcxYAaDXbdRXd1ACs9AE9lxuw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-s390x@0.19.7': + /@esbuild/linux-s390x@0.19.7: resolution: {integrity: sha512-U8Rhki5PVU0L0nvk+E8FjkV8r4Lh4hVEb9duR6Zl21eIEYEwXz8RScj4LZWA2i3V70V4UHVgiqMpszXvG0Yqhg==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-x64@0.19.7': + /@esbuild/linux-x64@0.19.7: resolution: {integrity: sha512-ZYZopyLhm4mcoZXjFt25itRlocKlcazDVkB4AhioiL9hOWhDldU9n38g62fhOI4Pth6vp+Mrd5rFKxD0/S+7aQ==} engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/netbsd-x64@0.19.7': + /@esbuild/netbsd-x64@0.19.7: resolution: {integrity: sha512-/yfjlsYmT1O3cum3J6cmGG16Fd5tqKMcg5D+sBYLaOQExheAJhqr8xOAEIuLo8JYkevmjM5zFD9rVs3VBcsjtQ==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/openbsd-x64@0.19.7': + /@esbuild/openbsd-x64@0.19.7: resolution: {integrity: sha512-MYDFyV0EW1cTP46IgUJ38OnEY5TaXxjoDmwiTXPjezahQgZd+j3T55Ht8/Q9YXBM0+T9HJygrSRGV5QNF/YVDQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/sunos-x64@0.19.7': + /@esbuild/sunos-x64@0.19.7: resolution: {integrity: sha512-JcPvgzf2NN/y6X3UUSqP6jSS06V0DZAV/8q0PjsZyGSXsIGcG110XsdmuWiHM+pno7/mJF6fjH5/vhUz/vA9fw==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-arm64@0.19.7': + /@esbuild/win32-arm64@0.19.7: resolution: {integrity: sha512-ZA0KSYti5w5toax5FpmfcAgu3ZNJxYSRm0AW/Dao5up0YV1hDVof1NvwLomjEN+3/GMtaWDI+CIyJOMTRSTdMw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-ia32@0.19.7': + /@esbuild/win32-ia32@0.19.7: resolution: {integrity: sha512-CTOnijBKc5Jpk6/W9hQMMvJnsSYRYgveN6O75DTACCY18RA2nqka8dTZR+x/JqXCRiKk84+5+bRKXUSbbwsS0A==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-x64@0.19.7': + /@esbuild/win32-x64@0.19.7: resolution: {integrity: sha512-gRaP2sk6hc98N734luX4VpF318l3w+ofrtTu9j5L8EQXF+FzQKV6alCOHMVoJJHvVK/mGbwBXfOL1HETQu9IGQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@eslint-community/eslint-utils@4.4.0': + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.57.0 + eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': + /@eslint-community/regexpp@4.10.0: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': + /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color - '@eslint/js@8.57.0': + /@eslint/js@8.57.0: resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@humanwhocodes/config-array@0.11.14': + /@humanwhocodes/config-array@0.11.14: resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color - '@humanwhocodes/module-importer@1.0.1': + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.2': + /@humanwhocodes/object-schema@2.0.2: resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 - '@nodelib/fs.stat@2.0.5': + /@nodelib/fs.stat@2.0.5: resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} engines: {node: '>= 8'} - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 - '@rollup/rollup-android-arm-eabi@4.5.2': + /@rollup/rollup-android-arm-eabi@4.5.2: resolution: {integrity: sha512-ee7BudTwwrglFYSc3UnqInDDjCLWHKrFmGNi4aK7jlEyg4CyPa1DCMrZfsN1O13YT76UFEqXz2CoN7BCGpUlJw==} cpu: [arm] os: [android] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-android-arm64@4.5.2': + /@rollup/rollup-android-arm64@4.5.2: resolution: {integrity: sha512-xOuhj9HHtn8128ir8veoQsBbAUBasDbHIBniYTEx02pAmu9EXL+ZjJqngnNEy6ZgZ4h1JwL33GMNu3yJL5Mzow==} cpu: [arm64] os: [android] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-darwin-arm64@4.5.2': + /@rollup/rollup-darwin-arm64@4.5.2: resolution: {integrity: sha512-NTGJWoL8bKyqyWFn9/RzSv4hQ4wTbaAv0lHHRwf4OnpiiP4P8W0jiXbm8Nc5BCXKmWAwuvJY82mcIU2TayC20g==} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-darwin-x64@4.5.2': + /@rollup/rollup-darwin-x64@4.5.2: resolution: {integrity: sha512-hlKqj7bpPvU15sZo4za14u185lpMzdwWLMc9raMqPK4wywt0wR23y1CaVQ4oAFXat3b5/gmRntyfpwWTKl+vvA==} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': + /@rollup/rollup-linux-arm-gnueabihf@4.5.2: resolution: {integrity: sha512-7ZIZx8c3u+pfI0ohQsft/GywrXez0uR6dUP0JhBuCK3sFO5TfdLn/YApnVkvPxuTv3+YKPIZend9Mt7Cz6sS3Q==} cpu: [arm] os: [linux] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-linux-arm64-gnu@4.5.2': + /@rollup/rollup-linux-arm64-gnu@4.5.2: resolution: {integrity: sha512-7Pk/5mO11JW/cH+a8lL/i0ZxmRGrbpYqN0VwO2DHhU+SJWWOH2zE1RAcPaj8KqiwC8DCDIJOSxjV9+9lLb6aeA==} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-linux-arm64-musl@4.5.2': + /@rollup/rollup-linux-arm64-musl@4.5.2: resolution: {integrity: sha512-KrRnuG5phJx756e62wxvWH2e+TK84MP2IVuPwfge+GBvWqIUfVzFRn09TKruuQBXzZp52Vyma7FjMDkwlA9xpg==} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-linux-x64-gnu@4.5.2': + /@rollup/rollup-linux-x64-gnu@4.5.2: resolution: {integrity: sha512-My+53GasPa2D2tU5dXiyHYwrELAUouSfkNlZ3bUKpI7btaztO5vpALEs3mvFjM7aKTvEbc7GQckuXeXIDKQ0fg==} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-linux-x64-musl@4.5.2': + /@rollup/rollup-linux-x64-musl@4.5.2: resolution: {integrity: sha512-/f0Q6Sc+Vw54Ws6N8fxaEe4R7at3b8pFyv+O/F2VaQ4hODUJcRUcCBJh6zuqtgQQt7w845VTkGLFgWZkP3tUoQ==} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-win32-arm64-msvc@4.5.2': + /@rollup/rollup-win32-arm64-msvc@4.5.2: resolution: {integrity: sha512-NCKuuZWLht6zj7s6EIFef4BxCRX1GMr83S2W4HPCA0RnJ4iHE4FS1695q6Ewoa6A9nFjJe1//yUu0kgBU07Edw==} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-win32-ia32-msvc@4.5.2': + /@rollup/rollup-win32-ia32-msvc@4.5.2: resolution: {integrity: sha512-J5zL3riR4AOyU/J3M/i4k/zZ8eP1yT+nTmAKztCXJtnI36jYH0eepvob22mAQ/kLwfsK2TB6dbyVY1F8c/0H5A==} cpu: [ia32] os: [win32] + requiresBuild: true + dev: true + optional: true - '@rollup/rollup-win32-x64-msvc@4.5.2': + /@rollup/rollup-win32-x64-msvc@4.5.2: resolution: {integrity: sha512-pL0RXRHuuGLhvs7ayX/SAHph1hrDPXOM5anyYUQXWJEENxw3nfHkzv8FfVlEVcLyKPAEgDRkd6RKZq2SMqS/yg==} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@types/json-schema@7.0.15': + /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: false - '@types/semver@7.5.6': + /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} + dev: false - '@typescript-eslint/eslint-plugin@7.1.0': + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -346,8 +477,26 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + eslint: 8.57.0 + graphemer: 1.4.0 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false - '@typescript-eslint/parser@7.1.0': + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -356,12 +505,27 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + eslint: 8.57.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false - '@typescript-eslint/scope-manager@7.1.0': + /@typescript-eslint/scope-manager@7.1.0: resolution: {integrity: sha512-6TmN4OJiohHfoOdGZ3huuLhpiUgOGTpgXNUPJgeZOZR3DnIpdSgtt83RS35OYNNXxM4TScVlpVKC9jyQSETR1A==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + dev: false - '@typescript-eslint/type-utils@7.1.0': + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -370,12 +534,23 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + debug: 4.3.4 + eslint: 8.57.0 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false - '@typescript-eslint/types@7.1.0': + /@typescript-eslint/types@7.1.0: resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} engines: {node: ^16.0.0 || >=18.0.0} + dev: false - '@typescript-eslint/typescript-estree@7.1.0': + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -383,84 +558,142 @@ packages: peerDependenciesMeta: typescript: optional: true + dependencies: + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/visitor-keys': 7.1.0 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.5.4 + ts-api-utils: 1.0.3(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: false - '@typescript-eslint/utils@7.1.0': + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.6 + '@typescript-eslint/scope-manager': 7.1.0 + '@typescript-eslint/types': 7.1.0 + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + eslint: 8.57.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + - typescript + dev: false - '@typescript-eslint/visitor-keys@7.1.0': + /@typescript-eslint/visitor-keys@7.1.0: resolution: {integrity: sha512-FhUqNWluiGNzlvnDZiXad4mZRhtghdoKW6e98GoEOYSu5cND+E39rG5KwJMUzeENwm1ztYBRqof8wMLP+wNPIA==} engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.1.0 + eslint-visitor-keys: 3.4.3 + dev: false - '@ungap/structured-clone@1.2.0': + /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - acorn-jsx@5.3.2: + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.11.3 - acorn@8.11.3: + /acorn@8.11.3: resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true - ajv@6.12.6: + /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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 - ansi-regex@5.0.1: + /ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@4.3.0: + /ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 - argparse@2.0.1: + /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - array-union@2.1.0: + /array-union@2.1.0: resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} engines: {node: '>=8'} + dev: false - balanced-match@1.0.2: + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - brace-expansion@1.1.11: + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 - brace-expansion@2.0.1: + /brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false - braces@3.0.2: + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: false - callsites@3.1.0: + /callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - chalk@4.1.2: + /chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 - color-convert@2.0.1: + /color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 - color-name@1.1.4: + /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - concat-map@0.0.1: + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - cross-spawn@7.0.3: + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 - debug@4.3.4: + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -468,408 +701,663 @@ packages: peerDependenciesMeta: supports-color: optional: true + dependencies: + ms: 2.1.2 - deep-is@0.1.4: + /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dir-glob@3.0.1: + /dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: false - doctrine@3.0.0: + /doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 - esbuild@0.19.7: + /esbuild@0.19.7: resolution: {integrity: sha512-6brbTZVqxhqgbpqBR5MzErImcpA0SQdoKOkcWK/U30HtQxnokIpG3TX2r0IJqbFUzqLjhU/zC1S5ndgakObVCQ==} engines: {node: '>=12'} hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.19.7 + '@esbuild/android-arm64': 0.19.7 + '@esbuild/android-x64': 0.19.7 + '@esbuild/darwin-arm64': 0.19.7 + '@esbuild/darwin-x64': 0.19.7 + '@esbuild/freebsd-arm64': 0.19.7 + '@esbuild/freebsd-x64': 0.19.7 + '@esbuild/linux-arm': 0.19.7 + '@esbuild/linux-arm64': 0.19.7 + '@esbuild/linux-ia32': 0.19.7 + '@esbuild/linux-loong64': 0.19.7 + '@esbuild/linux-mips64el': 0.19.7 + '@esbuild/linux-ppc64': 0.19.7 + '@esbuild/linux-riscv64': 0.19.7 + '@esbuild/linux-s390x': 0.19.7 + '@esbuild/linux-x64': 0.19.7 + '@esbuild/netbsd-x64': 0.19.7 + '@esbuild/openbsd-x64': 0.19.7 + '@esbuild/sunos-x64': 0.19.7 + '@esbuild/win32-arm64': 0.19.7 + '@esbuild/win32-ia32': 0.19.7 + '@esbuild/win32-x64': 0.19.7 + dev: true - escape-string-regexp@4.0.0: + /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-config-prettier@9.1.0: + /eslint-config-prettier@9.1.0(eslint@8.57.0): resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true peerDependencies: eslint: '>=7.0.0' + dependencies: + eslint: 8.57.0 + dev: false - eslint-scope@7.2.2: + /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 - eslint-visitor-keys@3.4.3: + /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@8.57.0: + /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color - espree@9.6.1: + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 - esquery@1.5.0: + /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 - esrecurse@4.3.0: + /esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 - estraverse@5.3.0: + /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} - esutils@2.0.3: + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - fast-deep-equal@3.1.3: + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.2: + /fast-glob@3.3.2: resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} + 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.5 + dev: false - fast-json-stable-stringify@2.1.0: + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - fast-levenshtein@2.0.6: + /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.17.1: + /fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 - file-entry-cache@6.0.1: + /file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 - fill-range@7.0.1: + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: false - find-up@5.0.0: + /find-up@5.0.0: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 - flat-cache@3.2.0: + /flat-cache@3.2.0: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 - flatted@3.3.1: + /flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - fs.realpath@1.0.0: + /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - fsevents@2.3.3: + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + requiresBuild: true + dev: true + optional: true - glob-parent@5.1.2: + /glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - - glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + dev: false + + /glob-parent@6.0.2: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 - glob@7.2.3: + /glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + 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 - globals@13.24.0: + /globals@13.24.0: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 - globby@11.1.0: + /globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: false - graphemer@1.4.0: + /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - has-flag@4.0.0: + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - ignore@5.3.1: + /ignore@5.3.1: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - import-fresh@3.3.0: + /import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 - imurmurhash@0.1.4: + /imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} - inflight@1.0.6: + /inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 - inherits@2.0.4: + /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - is-extglob@2.1.1: + /is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} engines: {node: '>=0.10.0'} - is-glob@4.0.3: + /is-glob@4.0.3: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 - is-number@7.0.0: + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + dev: false - is-path-inside@3.0.3: + /is-path-inside@3.0.3: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - isexe@2.0.0: + /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - js-yaml@4.1.0: + /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + dependencies: + argparse: 2.0.1 - json-buffer@3.0.1: + /json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - json-schema-traverse@0.4.1: + /json-schema-traverse@0.4.1: resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - json-stable-stringify-without-jsonify@1.0.1: + /json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - keyv@4.5.4: + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 - levn@0.4.1: + /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 - locate-path@6.0.0: + /locate-path@6.0.0: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 - lodash.merge@4.6.2: + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lru-cache@6.0.0: + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: false - merge2@1.4.1: + /merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + dev: false - micromatch@4.0.5: + /micromatch@4.0.5: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: false - minimatch@3.1.2: + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 - minimatch@9.0.3: + /minimatch@9.0.3: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false - ms@2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - nanoid@3.3.7: + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true - natural-compare@1.4.0: + /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - once@1.4.0: + /once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 - optionator@0.9.3: + /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 - p-limit@3.1.0: + /p-limit@3.1.0: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 - p-locate@5.0.0: + /p-locate@5.0.0: resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 - parent-module@1.0.1: + /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 - path-exists@4.0.0: + /path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - path-is-absolute@1.0.1: + /path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} - path-key@3.1.1: + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-type@4.0.0: + /path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + dev: false - picocolors@1.0.0: + /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true - picomatch@2.3.1: + /picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + dev: false - postcss@8.4.35: + /postcss@8.4.35: resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true - prelude-ls@1.2.1: + /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.2.5: + /prettier@3.2.5: resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true + dev: true - punycode@2.3.1: + /punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} - queue-microtask@1.2.3: + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - resolve-from@4.0.0: + /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} - reusify@1.0.4: + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@3.0.2: + /rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true + dependencies: + glob: 7.2.3 - rollup@4.5.2: + /rollup@4.5.2: resolution: {integrity: sha512-CRK1uoROBfkcqrZKyaFcqCcZWNsvJ6yVYZkqTlRocZhO2s5yER6Z3f/QaYtO8RGyloPnmhwgzuPQpNGeK210xQ==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.5.2 + '@rollup/rollup-android-arm64': 4.5.2 + '@rollup/rollup-darwin-arm64': 4.5.2 + '@rollup/rollup-darwin-x64': 4.5.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 + '@rollup/rollup-linux-arm64-gnu': 4.5.2 + '@rollup/rollup-linux-arm64-musl': 4.5.2 + '@rollup/rollup-linux-x64-gnu': 4.5.2 + '@rollup/rollup-linux-x64-musl': 4.5.2 + '@rollup/rollup-win32-arm64-msvc': 4.5.2 + '@rollup/rollup-win32-ia32-msvc': 4.5.2 + '@rollup/rollup-win32-x64-msvc': 4.5.2 + fsevents: 2.3.3 + dev: true - run-parallel@1.2.0: + /run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 - semver@7.5.4: + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: false - shebang-command@2.0.0: + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 - shebang-regex@3.0.0: + /shebang-regex@3.0.0: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - slash@3.0.0: + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + dev: false - source-map-js@1.0.2: + /source-map-js@1.0.2: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} + dev: true - strip-ansi@6.0.1: + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 - strip-json-comments@3.1.1: + /strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@7.2.0: + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 - text-table@0.2.0: + /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - to-regex-range@5.0.1: + /to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: false - ts-api-utils@1.0.3: + /ts-api-utils@1.0.3(typescript@5.3.3): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: false - turbo-darwin-64@2.0.3: + /turbo-darwin-64@2.0.3: resolution: {integrity: sha512-v7ztJ8sxdHw3SLfO2MhGFeeU4LQhFii1hIGs9uBiXns/0YTGOvxLeifnfGqhfSrAIIhrCoByXO7nR9wlm10n3Q==} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - turbo-darwin-arm64@2.0.3: + /turbo-darwin-arm64@2.0.3: resolution: {integrity: sha512-LUcqvkV9Bxtng6QHbevp8IK8zzwbIxM6HMjCE7FEW6yJBN1KwvTtRtsGBwwmTxaaLO0wD1Jgl3vgkXAmQ4fqUw==} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - turbo-linux-64@2.0.3: + /turbo-linux-64@2.0.3: resolution: {integrity: sha512-xpdY1suXoEbsQsu0kPep2zrB8ijv/S5aKKrntGuQ62hCiwDFoDcA/Z7FZ8IHQ2u+dpJARa7yfiByHmizFE0r5Q==} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - turbo-linux-arm64@2.0.3: + /turbo-linux-arm64@2.0.3: resolution: {integrity: sha512-MBACTcSR874L1FtLL7gkgbI4yYJWBUCqeBN/iE29D+8EFe0d3fAyviFlbQP4K/HaDYet1i26xkkOiWr0z7/V9A==} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - turbo-windows-64@2.0.3: + /turbo-windows-64@2.0.3: resolution: {integrity: sha512-zi3YuKPkM9JxMTshZo3excPk37hUrj5WfnCqh4FjI26ux6j/LJK+Dh3SebMHd9mR7wP9CMam4GhmLCT+gDfM+w==} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - turbo-windows-arm64@2.0.3: + /turbo-windows-arm64@2.0.3: resolution: {integrity: sha512-wmed4kkenLvRbidi7gISB4PU77ujBuZfgVGDZ4DXTFslE/kYpINulwzkVwJIvNXsJtHqyOq0n6jL8Zwl3BrwDg==} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - turbo@2.0.3: + /turbo@2.0.3: resolution: {integrity: sha512-jF1K0tTUyryEWmgqk1V0ALbSz3VdeZ8FXUo6B64WsPksCMCE48N5jUezGOH2MN0+epdaRMH8/WcPU0QQaVfeLA==} hasBin: true + optionalDependencies: + turbo-darwin-64: 2.0.3 + turbo-darwin-arm64: 2.0.3 + turbo-linux-64: 2.0.3 + turbo-linux-arm64: 2.0.3 + turbo-windows-64: 2.0.3 + turbo-windows-arm64: 2.0.3 + dev: true - type-check@0.4.0: + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 - type-fest@0.20.2: + /type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.3.3: + /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true - uri-js@4.4.1: + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 - vite@5.1.4: + /vite@5.1.4: resolution: {integrity: sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -896,761 +1384,28 @@ packages: optional: true terser: optional: true + dependencies: + esbuild: 0.19.7 + postcss: 8.4.35 + rollup: 4.5.2 + optionalDependencies: + fsevents: 2.3.3 + dev: true - which@2.0.2: + /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + dependencies: + isexe: 2.0.0 - wrappy@1.0.2: + /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - yallist@4.0.0: + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: false - yocto-queue@0.1.0: + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - -snapshots: - - '@aashutoshrathi/word-wrap@1.2.6': {} - - '@esbuild/android-arm64@0.19.7': - optional: true - - '@esbuild/android-arm@0.19.7': - optional: true - - '@esbuild/android-x64@0.19.7': - optional: true - - '@esbuild/darwin-arm64@0.19.7': - optional: true - - '@esbuild/darwin-x64@0.19.7': - optional: true - - '@esbuild/freebsd-arm64@0.19.7': - optional: true - - '@esbuild/freebsd-x64@0.19.7': - optional: true - - '@esbuild/linux-arm64@0.19.7': - optional: true - - '@esbuild/linux-arm@0.19.7': - optional: true - - '@esbuild/linux-ia32@0.19.7': - optional: true - - '@esbuild/linux-loong64@0.19.7': - optional: true - - '@esbuild/linux-mips64el@0.19.7': - optional: true - - '@esbuild/linux-ppc64@0.19.7': - optional: true - - '@esbuild/linux-riscv64@0.19.7': - optional: true - - '@esbuild/linux-s390x@0.19.7': - optional: true - - '@esbuild/linux-x64@0.19.7': - optional: true - - '@esbuild/netbsd-x64@0.19.7': - optional: true - - '@esbuild/openbsd-x64@0.19.7': - optional: true - - '@esbuild/sunos-x64@0.19.7': - optional: true - - '@esbuild/win32-arm64@0.19.7': - optional: true - - '@esbuild/win32-ia32@0.19.7': - optional: true - - '@esbuild/win32-x64@0.19.7': - optional: true - - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': - dependencies: - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - - '@eslint-community/regexpp@4.10.0': {} - - '@eslint/eslintrc@2.1.4': - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - - '@eslint/js@8.57.0': {} - - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.2 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - - '@humanwhocodes/module-importer@1.0.1': {} - - '@humanwhocodes/object-schema@2.0.2': {} - - '@nodelib/fs.scandir@2.1.5': - dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 - - '@nodelib/fs.stat@2.0.5': {} - - '@nodelib/fs.walk@1.2.8': - dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.17.1 - - '@rollup/rollup-android-arm-eabi@4.5.2': - optional: true - - '@rollup/rollup-android-arm64@4.5.2': - optional: true - - '@rollup/rollup-darwin-arm64@4.5.2': - optional: true - - '@rollup/rollup-darwin-x64@4.5.2': - optional: true - - '@rollup/rollup-linux-arm-gnueabihf@4.5.2': - optional: true - - '@rollup/rollup-linux-arm64-gnu@4.5.2': - optional: true - - '@rollup/rollup-linux-arm64-musl@4.5.2': - optional: true - - '@rollup/rollup-linux-x64-gnu@4.5.2': - optional: true - - '@rollup/rollup-linux-x64-musl@4.5.2': - optional: true - - '@rollup/rollup-win32-arm64-msvc@4.5.2': - optional: true - - '@rollup/rollup-win32-ia32-msvc@4.5.2': - optional: true - - '@rollup/rollup-win32-x64-msvc@4.5.2': - optional: true - - '@types/json-schema@7.0.15': {} - - '@types/semver@7.5.6': {} - - '@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - graphemer: 1.4.0 - ignore: 5.3.1 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - eslint: 8.57.0 - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/scope-manager@7.1.0': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - - '@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/types@7.1.0': {} - - '@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3)': - dependencies: - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/visitor-keys': 7.1.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - optionalDependencies: - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.6 - '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - eslint: 8.57.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/visitor-keys@7.1.0': - dependencies: - '@typescript-eslint/types': 7.1.0 - eslint-visitor-keys: 3.4.3 - - '@ungap/structured-clone@1.2.0': {} - - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 - - acorn@8.11.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 - - ansi-regex@5.0.1: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - - argparse@2.0.1: {} - - array-union@2.1.0: {} - - balanced-match@1.0.2: {} - - 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 - - braces@3.0.2: - dependencies: - fill-range: 7.0.1 - - callsites@3.1.0: {} - - chalk@4.1.2: - dependencies: - ansi-styles: 4.3.0 - supports-color: 7.2.0 - - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - - concat-map@0.0.1: {} - - cross-spawn@7.0.3: - dependencies: - path-key: 3.1.1 - shebang-command: 2.0.0 - which: 2.0.2 - - debug@4.3.4: - dependencies: - ms: 2.1.2 - - deep-is@0.1.4: {} - - dir-glob@3.0.1: - dependencies: - path-type: 4.0.0 - - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - - esbuild@0.19.7: - optionalDependencies: - '@esbuild/android-arm': 0.19.7 - '@esbuild/android-arm64': 0.19.7 - '@esbuild/android-x64': 0.19.7 - '@esbuild/darwin-arm64': 0.19.7 - '@esbuild/darwin-x64': 0.19.7 - '@esbuild/freebsd-arm64': 0.19.7 - '@esbuild/freebsd-x64': 0.19.7 - '@esbuild/linux-arm': 0.19.7 - '@esbuild/linux-arm64': 0.19.7 - '@esbuild/linux-ia32': 0.19.7 - '@esbuild/linux-loong64': 0.19.7 - '@esbuild/linux-mips64el': 0.19.7 - '@esbuild/linux-ppc64': 0.19.7 - '@esbuild/linux-riscv64': 0.19.7 - '@esbuild/linux-s390x': 0.19.7 - '@esbuild/linux-x64': 0.19.7 - '@esbuild/netbsd-x64': 0.19.7 - '@esbuild/openbsd-x64': 0.19.7 - '@esbuild/sunos-x64': 0.19.7 - '@esbuild/win32-arm64': 0.19.7 - '@esbuild/win32-ia32': 0.19.7 - '@esbuild/win32-x64': 0.19.7 - - escape-string-regexp@4.0.0: {} - - eslint-config-prettier@9.1.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - - eslint-scope@7.2.2: - dependencies: - esrecurse: 4.3.0 - estraverse: 5.3.0 - - eslint-visitor-keys@3.4.3: {} - - eslint@8.57.0: - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - - espree@9.6.1: - dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 - - esquery@1.5.0: - dependencies: - estraverse: 5.3.0 - - esrecurse@4.3.0: - dependencies: - estraverse: 5.3.0 - - estraverse@5.3.0: {} - - esutils@2.0.3: {} - - fast-deep-equal@3.1.3: {} - - fast-glob@3.3.2: - 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.5 - - fast-json-stable-stringify@2.1.0: {} - - fast-levenshtein@2.0.6: {} - - fastq@1.17.1: - dependencies: - reusify: 1.0.4 - - file-entry-cache@6.0.1: - dependencies: - flat-cache: 3.2.0 - - fill-range@7.0.1: - dependencies: - to-regex-range: 5.0.1 - - find-up@5.0.0: - dependencies: - locate-path: 6.0.0 - path-exists: 4.0.0 - - flat-cache@3.2.0: - dependencies: - flatted: 3.3.1 - keyv: 4.5.4 - rimraf: 3.0.2 - - flatted@3.3.1: {} - - fs.realpath@1.0.0: {} - - fsevents@2.3.3: - optional: true - - glob-parent@5.1.2: - dependencies: - is-glob: 4.0.3 - - glob-parent@6.0.2: - dependencies: - is-glob: 4.0.3 - - 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 - - globals@13.24.0: - dependencies: - type-fest: 0.20.2 - - globby@11.1.0: - dependencies: - array-union: 2.1.0 - dir-glob: 3.0.1 - fast-glob: 3.3.2 - ignore: 5.3.1 - merge2: 1.4.1 - slash: 3.0.0 - - graphemer@1.4.0: {} - - has-flag@4.0.0: {} - - ignore@5.3.1: {} - - import-fresh@3.3.0: - dependencies: - parent-module: 1.0.1 - resolve-from: 4.0.0 - - imurmurhash@0.1.4: {} - - inflight@1.0.6: - dependencies: - once: 1.4.0 - wrappy: 1.0.2 - - inherits@2.0.4: {} - - is-extglob@2.1.1: {} - - is-glob@4.0.3: - dependencies: - is-extglob: 2.1.1 - - is-number@7.0.0: {} - - is-path-inside@3.0.3: {} - - isexe@2.0.0: {} - - js-yaml@4.1.0: - dependencies: - argparse: 2.0.1 - - json-buffer@3.0.1: {} - - json-schema-traverse@0.4.1: {} - - json-stable-stringify-without-jsonify@1.0.1: {} - - keyv@4.5.4: - dependencies: - json-buffer: 3.0.1 - - levn@0.4.1: - dependencies: - prelude-ls: 1.2.1 - type-check: 0.4.0 - - locate-path@6.0.0: - dependencies: - p-locate: 5.0.0 - - lodash.merge@4.6.2: {} - - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - - merge2@1.4.1: {} - - micromatch@4.0.5: - dependencies: - braces: 3.0.2 - picomatch: 2.3.1 - - minimatch@3.1.2: - dependencies: - brace-expansion: 1.1.11 - - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - - ms@2.1.2: {} - - nanoid@3.3.7: {} - - natural-compare@1.4.0: {} - - once@1.4.0: - dependencies: - wrappy: 1.0.2 - - optionator@0.9.3: - dependencies: - '@aashutoshrathi/word-wrap': 1.2.6 - deep-is: 0.1.4 - fast-levenshtein: 2.0.6 - levn: 0.4.1 - prelude-ls: 1.2.1 - type-check: 0.4.0 - - p-limit@3.1.0: - dependencies: - yocto-queue: 0.1.0 - - p-locate@5.0.0: - dependencies: - p-limit: 3.1.0 - - parent-module@1.0.1: - dependencies: - callsites: 3.1.0 - - path-exists@4.0.0: {} - - path-is-absolute@1.0.1: {} - - path-key@3.1.1: {} - - path-type@4.0.0: {} - - picocolors@1.0.0: {} - - picomatch@2.3.1: {} - - postcss@8.4.35: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.0.2 - - prelude-ls@1.2.1: {} - - prettier@3.2.5: {} - - punycode@2.3.1: {} - - queue-microtask@1.2.3: {} - - resolve-from@4.0.0: {} - - reusify@1.0.4: {} - - rimraf@3.0.2: - dependencies: - glob: 7.2.3 - - rollup@4.5.2: - optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.5.2 - '@rollup/rollup-android-arm64': 4.5.2 - '@rollup/rollup-darwin-arm64': 4.5.2 - '@rollup/rollup-darwin-x64': 4.5.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.5.2 - '@rollup/rollup-linux-arm64-gnu': 4.5.2 - '@rollup/rollup-linux-arm64-musl': 4.5.2 - '@rollup/rollup-linux-x64-gnu': 4.5.2 - '@rollup/rollup-linux-x64-musl': 4.5.2 - '@rollup/rollup-win32-arm64-msvc': 4.5.2 - '@rollup/rollup-win32-ia32-msvc': 4.5.2 - '@rollup/rollup-win32-x64-msvc': 4.5.2 - fsevents: 2.3.3 - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - - semver@7.5.4: - dependencies: - lru-cache: 6.0.0 - - shebang-command@2.0.0: - dependencies: - shebang-regex: 3.0.0 - - shebang-regex@3.0.0: {} - - slash@3.0.0: {} - - source-map-js@1.0.2: {} - - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-json-comments@3.1.1: {} - - supports-color@7.2.0: - dependencies: - has-flag: 4.0.0 - - text-table@0.2.0: {} - - to-regex-range@5.0.1: - dependencies: - is-number: 7.0.0 - - ts-api-utils@1.0.3(typescript@5.3.3): - dependencies: - typescript: 5.3.3 - - turbo-darwin-64@2.0.3: - optional: true - - turbo-darwin-arm64@2.0.3: - optional: true - - turbo-linux-64@2.0.3: - optional: true - - turbo-linux-arm64@2.0.3: - optional: true - - turbo-windows-64@2.0.3: - optional: true - - turbo-windows-arm64@2.0.3: - optional: true - - turbo@2.0.3: - optionalDependencies: - turbo-darwin-64: 2.0.3 - turbo-darwin-arm64: 2.0.3 - turbo-linux-64: 2.0.3 - turbo-linux-arm64: 2.0.3 - turbo-windows-64: 2.0.3 - turbo-windows-arm64: 2.0.3 - - type-check@0.4.0: - dependencies: - prelude-ls: 1.2.1 - - type-fest@0.20.2: {} - - typescript@5.3.3: {} - - uri-js@4.4.1: - dependencies: - punycode: 2.3.1 - - vite@5.1.4: - dependencies: - esbuild: 0.19.7 - postcss: 8.4.35 - rollup: 4.5.2 - optionalDependencies: - fsevents: 2.3.3 - - which@2.0.2: - dependencies: - isexe: 2.0.0 - - wrappy@1.0.2: {} - - yallist@4.0.0: {} - - yocto-queue@0.1.0: {} diff --git a/turborepo-tests/helpers/setup_example_test.sh b/turborepo-tests/helpers/setup_example_test.sh index f7445c0097a45..9ce2a31930165 100644 --- a/turborepo-tests/helpers/setup_example_test.sh +++ b/turborepo-tests/helpers/setup_example_test.sh @@ -55,24 +55,28 @@ mkdir -p ./tmp echo "/tmp/" >> ".gitignore" # Simulating the user's first run and dumping logs to a file +$package_manager --version >./tmp/package_manager_version.txt $package_manager_command >./tmp/install.txt 2>&1 -$turbo_command >./tmp/grep-me-for-miss.txt +$turbo_command >./tmp/run-1.txt # We don't want to hit cache on first run because we're acting like a user. # A user would never hit cache on first run. Why should we? -if grep -q ">>> FULL TURBO" ./tmp/grep-me-for-miss.txt; then - echo "A FULL TURBO was found. This test is misconfigured (since it can hit a cache)." +if grep -q ">>> FULL TURBO" ./tmp/run-1.txt; then + echo "[ERROR] A 'FULL TURBO' was found. This test must be misconfigured since it hit a cache on what was expected to be the very first run." echo "Dumping logs:" - cat ./tmp/grep-me-for-miss.txt >&2 + echo "" + cat ./tmp/run-1.txt >&2 exit 1 fi # Simulating the user's second run -$turbo_command >./tmp/grep-me-for-hit.txt +$turbo_command >./tmp/run-2.txt # Make sure the user hits FULL TURBO on the second go -if ! grep -q ">>> FULL TURBO" ./tmp/grep-me-for-hit.txt; then - echo "No FULL TURBO was found. Dumping logs:" - cat ./tmp/grep-me-for-hit.txt >&2 +if ! grep -q ">>> FULL TURBO" ./tmp/run-2.txt; then + echo "[ERROR] No 'FULL TURBO' was found. This indicateds that at least one 'cache miss' occurred on the second run when all tasks were expected to be 'cache hit'." + echo "Dumping logs:" + echo "" + cat ./tmp/run-2.txt >&2 exit 1 fi From 422371306e536255fe4ea29cdfde4fa365327767 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 10 Oct 2024 10:18:38 -0400 Subject: [PATCH 054/218] fix(query): naming conflict (#9242) ### Description This slipped in due to an awkward merge. ### Testing Instructions --- crates/turborepo-lib/src/query/mod.rs | 4 ++-- crates/turborepo-lib/src/query/package.rs | 6 +++--- crates/turborepo-lib/src/query/task.rs | 12 ++++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index a0cc9a7bb15a4..b1c210308ec7d 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -19,7 +19,7 @@ use turborepo_repository::package_graph::PackageName; use crate::{ get_version, - query::{file::File, task::Task}, + query::{file::File, task::RepositoryTask}, run::{builder::RunBuilder, Run}, signal::SignalHandler, }; @@ -59,7 +59,7 @@ impl RepositoryQuery { } #[derive(Debug, SimpleObject)] -#[graphql(concrete(name = "Tasks", params(Task)))] +#[graphql(concrete(name = "RepositoryTasks", params(RepositoryTask)))] #[graphql(concrete(name = "Packages", params(Package)))] pub struct Array { items: Vec, diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index 0145fbf475d79..c9ff1c52bfee5 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -6,7 +6,7 @@ use turborepo_errors::Spanned; use turborepo_repository::package_graph::{PackageName, PackageNode}; use crate::{ - query::{task::Task, Array, Error}, + query::{task::RepositoryTask, Array, Error}, run::Run, }; @@ -199,10 +199,10 @@ impl Package { .collect()) } - async fn tasks(&self) -> Array { + async fn tasks(&self) -> Array { self.get_tasks() .into_iter() - .map(|(name, script)| Task { + .map(|(name, script)| RepositoryTask { name, package: self.clone(), script: Some(script), diff --git a/crates/turborepo-lib/src/query/task.rs b/crates/turborepo-lib/src/query/task.rs index 37dbaaead745f..98fe5c9aa7ac1 100644 --- a/crates/turborepo-lib/src/query/task.rs +++ b/crates/turborepo-lib/src/query/task.rs @@ -7,14 +7,14 @@ use crate::{ run::task_id::TaskId, }; -pub struct Task { +pub struct RepositoryTask { pub name: String, pub package: Package, pub script: Option>, } #[Object] -impl Task { +impl RepositoryTask { async fn name(&self) -> String { self.name.clone() } @@ -27,7 +27,7 @@ impl Task { self.script.as_ref().map(|script| script.value.to_string()) } - async fn direct_dependents(&self) -> Array { + async fn direct_dependents(&self) -> Array { let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); self.package .run @@ -37,7 +37,7 @@ impl Task { .flatten() .filter_map(|task| match task { TaskNode::Root => None, - TaskNode::Task(task) => Some(Task { + TaskNode::Task(task) => Some(RepositoryTask { name: task.task().to_string(), package: Package { run: self.package.run.clone(), @@ -49,7 +49,7 @@ impl Task { .collect() } - async fn direct_dependencies(&self) -> Array { + async fn direct_dependencies(&self) -> Array { let task_id = TaskId::new(self.package.name.as_ref(), &self.name); self.package @@ -60,7 +60,7 @@ impl Task { .flatten() .filter_map(|task| match task { TaskNode::Root => None, - TaskNode::Task(task) => Some(Task { + TaskNode::Task(task) => Some(RepositoryTask { name: task.task().to_string(), package: Package { run: self.package.run.clone(), From dc705a243231bb6506710ced047cc76a5844b757 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 10 Oct 2024 11:19:58 -0400 Subject: [PATCH 055/218] feat: warn on empty cache (#9236) ### Description Warns if cache payload consists of just the log file and output globs are specified. ### Testing Instructions Turns out all of our test fixtures have empty outputs so we get a lot of these warnings in tests --- crates/turborepo-lib/src/run/cache.rs | 24 ++++++++++++++++++- crates/turborepo-lib/src/task_graph/mod.rs | 3 +++ turborepo-tests/integration/tests/affected.t | 2 ++ .../integration/tests/filter-run.t | 2 ++ .../integration/tests/global-deps.t | 2 ++ .../integration/tests/global-env.t | 3 +++ .../tests/lockfile-aware-caching/berry.t | 5 ++++ .../tests/lockfile-aware-caching/npm.t | 5 ++++ .../tests/lockfile-aware-caching/pnpm.t | 5 ++++ .../tests/lockfile-aware-caching/yarn.t | 5 ++++ .../6-topological-unimplemented.t | 1 + .../integration/tests/pkg-inference.t | 1 + .../tests/prune/composable-config.t | 1 + .../tests/run-caching/cache-state.t | 3 +++ .../excluded-inputs/excluded-inputs.t | 1 + .../tests/run-caching/global-deps.t | 2 ++ .../integration/tests/run-caching/root-deps.t | 2 ++ .../tests/run-logging/errors-only.t | 2 ++ .../tests/run-logging/log-order-github.t | 5 +++- .../tests/run-logging/log-order-grouped.t | 23 ++++++++++++------ .../tests/run-logging/log-order-stream.t | 17 +++++++++---- .../tests/run-logging/log-prefix.t | 1 + .../integration/tests/run-logging/verbosity.t | 2 ++ .../integration/tests/run-summary/discovery.t | 1 + .../integration/tests/run-summary/enable.t | 2 ++ .../integration/tests/run-summary/monorepo.t | 2 ++ .../tests/run-summary/strict-env.t | 6 +++++ .../integration/tests/run/continue.t | 1 + turborepo-tests/integration/tests/run/force.t | 8 +++++++ .../integration/tests/run/gitignored-inputs.t | 2 ++ .../integration/tests/run/no-root-turbo.t | 1 + .../integration/tests/run/one-script-error.t | 2 ++ .../integration/tests/run/profile.t | 2 ++ .../tests/run/single-package/with-deps-run.t | 1 + .../integration/tests/run/unnamed-packages.t | 1 + .../tests/task-dependencies/overwriting.t | 3 +++ .../tests/task-dependencies/root-workspace.t | 2 ++ .../tests/task-dependencies/topological.t | 2 ++ .../tests/workspace-configs/add-keys.t | 2 ++ .../tests/workspace-configs/cross-workspace.t | 2 ++ .../missing-workspace-config-deps.t | 2 ++ .../tests/workspace-configs/omit-keys-deps.t | 2 ++ .../workspace-configs/override-values-deps.t | 1 + .../tests/workspace-configs/persistent.t | 2 ++ 44 files changed, 151 insertions(+), 13 deletions(-) diff --git a/crates/turborepo-lib/src/run/cache.rs b/crates/turborepo-lib/src/run/cache.rs index 0bffa3e1b5f28..cfb7483ea9291 100644 --- a/crates/turborepo-lib/src/run/cache.rs +++ b/crates/turborepo-lib/src/run/cache.rs @@ -4,8 +4,9 @@ use std::{ time::Duration, }; +use itertools::Itertools; use tokio::sync::oneshot; -use tracing::{debug, error}; +use tracing::{debug, error, log::warn}; use turbopath::{ AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPath, AnchoredSystemPathBuf, }; @@ -47,6 +48,7 @@ pub enum Error { pub struct RunCache { task_output_logs: Option, cache: AsyncCache, + warnings: Arc>>, reads_disabled: bool, writes_disabled: bool, repo_root: AbsoluteSystemPathBuf, @@ -80,6 +82,7 @@ impl RunCache { RunCache { task_output_logs, cache, + warnings: Default::default(), reads_disabled: opts.skip_reads, writes_disabled: opts.skip_writes, repo_root: repo_root.to_owned(), @@ -122,12 +125,18 @@ impl RunCache { log_file_path, daemon_client: self.daemon_client.clone(), ui: self.ui, + warnings: self.warnings.clone(), } } pub async fn shutdown_cache( &self, ) -> Result<(Arc>, oneshot::Receiver<()>), CacheError> { + if let Ok(warnings) = self.warnings.lock() { + for warning in warnings.iter().sorted() { + warn!("{}", warning); + } + } // Ignore errors coming from cache already shutting down self.cache.start_shutdown().await } @@ -144,6 +153,7 @@ pub struct TaskCache { daemon_client: Option>, ui: ColorConfig, task_id: TaskId<'static>, + warnings: Arc>>, } impl TaskCache { @@ -360,6 +370,18 @@ impl TaskCache { globwalk::WalkType::All, )?; + // If we're only caching the log output, *and* output globs are not empty, + // we should warn the user + if files_to_be_cached.len() == 1 && !self.repo_relative_globs.is_empty() { + let _ = self.warnings.lock().map(|mut warnings| { + warnings.push(format!( + "no output files found for task {}. Please check your `outputs` key in \ + `turbo.json`", + self.task_id + )) + }); + } + let mut relative_paths = files_to_be_cached .into_iter() .map(|path| { diff --git a/crates/turborepo-lib/src/task_graph/mod.rs b/crates/turborepo-lib/src/task_graph/mod.rs index 43cd452b296c6..378d5f78c9d74 100644 --- a/crates/turborepo-lib/src/task_graph/mod.rs +++ b/crates/turborepo-lib/src/task_graph/mod.rs @@ -23,6 +23,9 @@ pub struct TaskOutputs { } impl TaskOutputs { + pub fn is_empty(&self) -> bool { + self.inclusions.is_empty() && self.exclusions.is_empty() + } pub fn validated_inclusions(&self) -> Result, GlobError> { self.inclusions .iter() diff --git a/turborepo-tests/integration/tests/affected.t b/turborepo-tests/integration/tests/affected.t index 9f20f4408e939..50cb1f13bdbea 100644 --- a/turborepo-tests/integration/tests/affected.t +++ b/turborepo-tests/integration/tests/affected.t @@ -30,6 +30,7 @@ Validate that we only run `my-app#build` with change not committed Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` Do the same thing with the `ls` command @@ -80,6 +81,7 @@ Validate that we only run `my-app#build` with change not committed Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` Do the same thing with the `ls` command $ ${TURBO} ls --affected diff --git a/turborepo-tests/integration/tests/filter-run.t b/turborepo-tests/integration/tests/filter-run.t index 346f2ec085f85..e781a5deff387 100644 --- a/turborepo-tests/integration/tests/filter-run.t +++ b/turborepo-tests/integration/tests/filter-run.t @@ -40,6 +40,8 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Non existent package name should error $ ${TURBO} run build --filter="foo" --output-logs none diff --git a/turborepo-tests/integration/tests/global-deps.t b/turborepo-tests/integration/tests/global-deps.t index 05cee80e19e78..ba8e1e7ed9182 100644 --- a/turborepo-tests/integration/tests/global-deps.t +++ b/turborepo-tests/integration/tests/global-deps.t @@ -12,6 +12,7 @@ Run a build Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ echo "new text" > global_deps/foo.txt $ ${TURBO} build -F my-app --output-logs=hash-only @@ -24,6 +25,7 @@ Run a build Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ echo "Submit a PR!" >> global_deps/CONTRIBUTING.md $ ${TURBO} build -F my-app --output-logs=hash-only \xe2\x80\xa2 Packages in scope: my-app (esc) diff --git a/turborepo-tests/integration/tests/global-env.t b/turborepo-tests/integration/tests/global-env.t index a22269cf5b2e9..3d83e1a4af050 100644 --- a/turborepo-tests/integration/tests/global-env.t +++ b/turborepo-tests/integration/tests/global-env.t @@ -14,6 +14,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # run again and ensure there's a cache hit $ ${TURBO} run build --filter=util --output-logs=hash-only \xe2\x80\xa2 Packages in scope: util (esc) @@ -36,6 +37,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # set env var with "THASH" and ensure cache miss $ SOMETHING_THASH_YES=hi ${TURBO} run build --filter=util --output-logs=hash-only \xe2\x80\xa2 Packages in scope: util (esc) @@ -58,6 +60,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # THASH deprecation doesn't break --dry=json $ SOMETHING_THASH_YES=hi ${TURBO} run build --filter=util --dry=json | jq -r '.tasks[0].environmentVariables.global[0]' null diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t b/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t index f8abbee558046..feb86bc7aad19 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t @@ -14,6 +14,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -25,6 +26,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -53,6 +55,7 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -76,6 +79,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -87,6 +91,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t b/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t index 35efd97e70266..e23fbc10c92ec 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t @@ -18,6 +18,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -33,6 +34,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -69,6 +71,7 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -96,6 +99,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -111,6 +115,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t index 511a3b4d5994f..4c453bb7cfea5 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t @@ -18,6 +18,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -33,6 +34,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -69,6 +71,7 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump pnpm-lock" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -96,6 +99,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -111,6 +115,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t index 2d796c4a82277..c9dee24495ca1 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t @@ -18,6 +18,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -33,6 +34,7 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -69,6 +71,7 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -96,6 +99,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -111,6 +115,7 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t b/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t index 429824d258d25..ac3eaed04e6df 100644 --- a/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t +++ b/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t @@ -28,3 +28,4 @@ Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task app-a#dev. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/pkg-inference.t b/turborepo-tests/integration/tests/pkg-inference.t index 51eeadef87124..f31552432ec1c 100644 --- a/turborepo-tests/integration/tests/pkg-inference.t +++ b/turborepo-tests/integration/tests/pkg-inference.t @@ -17,3 +17,4 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/prune/composable-config.t b/turborepo-tests/integration/tests/prune/composable-config.t index e9dd448c009b7..4bd1061db93cb 100644 --- a/turborepo-tests/integration/tests/prune/composable-config.t +++ b/turborepo-tests/integration/tests/prune/composable-config.t @@ -22,5 +22,6 @@ Make sure that the internal util package is part of the prune output Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task docs#new-task. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run-caching/cache-state.t b/turborepo-tests/integration/tests/run-caching/cache-state.t index fbe40396cdcdd..9bda6f5001be3 100644 --- a/turborepo-tests/integration/tests/run-caching/cache-state.t +++ b/turborepo-tests/integration/tests/run-caching/cache-state.t @@ -11,6 +11,9 @@ Run a build to get a local cache. Cached: 0 cached, 2 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + Do a dry run so we can see the state of the cache $ ${TURBO} run build --dry=json > dry.json diff --git a/turborepo-tests/integration/tests/run-caching/excluded-inputs/excluded-inputs.t b/turborepo-tests/integration/tests/run-caching/excluded-inputs/excluded-inputs.t index 6ebf04aa02419..4e75ddc24c8ae 100644 --- a/turborepo-tests/integration/tests/run-caching/excluded-inputs/excluded-inputs.t +++ b/turborepo-tests/integration/tests/run-caching/excluded-inputs/excluded-inputs.t @@ -20,6 +20,7 @@ Running build for my-app succeeds Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` Update exluded file and try again $ echo "new excluded value" > apps/my-app/excluded.txt $ ${TURBO} run build --filter=my-app diff --git a/turborepo-tests/integration/tests/run-caching/global-deps.t b/turborepo-tests/integration/tests/run-caching/global-deps.t index 224065ff9ea73..acc85812ebe29 100644 --- a/turborepo-tests/integration/tests/run-caching/global-deps.t +++ b/turborepo-tests/integration/tests/run-caching/global-deps.t @@ -11,6 +11,7 @@ Run a build to get a local cache. Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` Run again to get cache hit $ SOME_ENV_VAR=hi ${TURBO} run build --output-logs=none --filter=my-app @@ -33,3 +34,4 @@ Run again without env var to get cache miss Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run-caching/root-deps.t b/turborepo-tests/integration/tests/run-caching/root-deps.t index f5d5ef1b46b13..78afb808a0250 100644 --- a/turborepo-tests/integration/tests/run-caching/root-deps.t +++ b/turborepo-tests/integration/tests/run-caching/root-deps.t @@ -16,6 +16,7 @@ Warm the cache Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task another#build. Please check your `outputs` key in `turbo.json` Confirm cache hit $ ${TURBO} build --filter=another --output-logs=hash-only @@ -43,6 +44,7 @@ All tasks should be a cache miss, even ones that don't depend on changed package Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) + WARNING no output files found for task another#build. Please check your `outputs` key in `turbo.json` Verify that all packages are in scope on a internal root dep change $ ${TURBO} build --filter='[HEAD]' --dry=json | jq '.packages' diff --git a/turborepo-tests/integration/tests/run-logging/errors-only.t b/turborepo-tests/integration/tests/run-logging/errors-only.t index 403f3aa02343d..86f52be785871 100644 --- a/turborepo-tests/integration/tests/run-logging/errors-only.t +++ b/turborepo-tests/integration/tests/run-logging/errors-only.t @@ -13,6 +13,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task app-a#build. Please check your `outputs` key in `turbo.json` @@ -28,6 +29,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task app-a#buildsuccess. Please check your `outputs` key in `turbo.json` # [x] error exit diff --git a/turborepo-tests/integration/tests/run-logging/log-order-github.t b/turborepo-tests/integration/tests/run-logging/log-order-github.t index b1987e18165ae..ea640a80f9588 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-github.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-github.t @@ -31,7 +31,9 @@ because otherwise prysk interprets them as multiline commands Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) -# Build as if we are in GitHub Actions with a task log prefix. + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` +# Build as if we are in Github Actions with a task log prefix. $ GITHUB_ACTIONS=1 ${TURBO} run build --force --log-prefix="task" --filter=util \xe2\x80\xa2 Packages in scope: util (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -50,6 +52,7 @@ because otherwise prysk interprets them as multiline commands Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Verify that errors are grouped properly $ GITHUB_ACTIONS=1 ${TURBO} run fail diff --git a/turborepo-tests/integration/tests/run-logging/log-order-grouped.t b/turborepo-tests/integration/tests/run-logging/log-order-grouped.t index 3db6f5008c7f5..029dae1111954 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-grouped.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-grouped.t @@ -6,14 +6,14 @@ \xe2\x80\xa2 Packages in scope: my-app, util (esc) \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache bypass, force executing [0-9a-f]+ (re) + my-app:build: cache bypass, force executing 0af90ec6a57471be my-app:build: my-app:build: > build my-app:build: > echo building && sleep 1 && echo done my-app:build: my-app:build: building my-app:build: done - util:build: cache bypass, force executing [0-9a-f]+ (re) + util:build: cache bypass, force executing 2da422600daca8be util:build: util:build: > build util:build: > sleep 0.5 && echo building && sleep 1 && echo completed @@ -25,20 +25,23 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + # We can get the same behavior with an env var $ TURBO_LOG_ORDER=grouped ${TURBO} run build --force \xe2\x80\xa2 Packages in scope: my-app, util (esc) \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache bypass, force executing [0-9a-f]+ (re) + my-app:build: cache bypass, force executing 0af90ec6a57471be my-app:build: my-app:build: > build my-app:build: > echo building && sleep 1 && echo done my-app:build: my-app:build: building my-app:build: done - util:build: cache bypass, force executing [0-9a-f]+ (re) + util:build: cache bypass, force executing 2da422600daca8be util:build: util:build: > build util:build: > sleep 0.5 && echo building && sleep 1 && echo completed @@ -50,19 +53,22 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + # The flag wins over the env var $ TURBO_LOG_ORDER=stream ${TURBO} run build --log-order grouped --force \xe2\x80\xa2 Packages in scope: my-app, util (esc) \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - my-app:build: cache bypass, force executing [0-9a-f]+ (re) + my-app:build: cache bypass, force executing 0af90ec6a57471be my-app:build: my-app:build: > build my-app:build: > echo building && sleep 1 && echo done my-app:build: my-app:build: building my-app:build: done - util:build: cache bypass, force executing [0-9a-f]+ (re) + util:build: cache bypass, force executing 2da422600daca8be util:build: util:build: > build util:build: > sleep 0.5 && echo building && sleep 1 && echo completed @@ -73,4 +79,7 @@ Tasks: 2 successful, 2 total Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - \ No newline at end of file + + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + diff --git a/turborepo-tests/integration/tests/run-logging/log-order-stream.t b/turborepo-tests/integration/tests/run-logging/log-order-stream.t index 7fd3eec9871e6..dc75291adcf65 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-stream.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-stream.t @@ -25,6 +25,9 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + The env var set to stream works (this is default, so this test doesn't guarantee the env var is "working"), it just guarantees setting this env var won't crash. $ TURBO_LOG_ORDER=stream ${TURBO} run build --force @@ -32,7 +35,6 @@ it just guarantees setting this env var won't crash. \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) - (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) .* (re) .* (re) .* (re) @@ -42,6 +44,7 @@ it just guarantees setting this env var won't crash. .* (re) .* (re) .* (re) + my-app:build: building util:build: building my-app:build: done util:build: completed @@ -50,13 +53,14 @@ it just guarantees setting this env var won't crash. Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + The flag wins over the env var $ TURBO_LOG_ORDER=grouped ${TURBO} run build --log-order stream --force \xe2\x80\xa2 Packages in scope: my-app, util (esc) \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) - (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) - (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) .* (re) .* (re) .* (re) @@ -66,6 +70,8 @@ The flag wins over the env var .* (re) .* (re) .* (re) + (my-app|util):build: (re) + my-app:build: building util:build: building my-app:build: done util:build: completed @@ -73,4 +79,7 @@ The flag wins over the env var Tasks: 2 successful, 2 total Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - \ No newline at end of file + + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` + diff --git a/turborepo-tests/integration/tests/run-logging/log-prefix.t b/turborepo-tests/integration/tests/run-logging/log-prefix.t index d9af3064fe987..e9be9e7837d75 100644 --- a/turborepo-tests/integration/tests/run-logging/log-prefix.t +++ b/turborepo-tests/integration/tests/run-logging/log-prefix.t @@ -17,6 +17,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task app-a#build. Please check your `outputs` key in `turbo.json` # Check that the cached logs don't have prefixes $ cat app-a/.turbo/turbo-build.log diff --git a/turborepo-tests/integration/tests/run-logging/verbosity.t b/turborepo-tests/integration/tests/run-logging/verbosity.t index 3c009b31a4d5f..3f104ff7805ac 100644 --- a/turborepo-tests/integration/tests/run-logging/verbosity.t +++ b/turborepo-tests/integration/tests/run-logging/verbosity.t @@ -17,6 +17,7 @@ Verbosity level 1 Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --verbosity=1 --filter=util --force \xe2\x80\xa2 Packages in scope: util (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -32,6 +33,7 @@ Verbosity level 1 Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Verbosity level 2 $ ${TURBO} build -vv --filter=util --force 1> VERBOSEVV 2>&1 diff --git a/turborepo-tests/integration/tests/run-summary/discovery.t b/turborepo-tests/integration/tests/run-summary/discovery.t index 67c430c6b4f77..f27e100dbd714 100644 --- a/turborepo-tests/integration/tests/run-summary/discovery.t +++ b/turborepo-tests/integration/tests/run-summary/discovery.t @@ -18,3 +18,4 @@ Setup Time:\s*[\.0-9]+m?s (re) Summary: .+\.turbo(\/|\\)runs(\/|\\)[a-zA-Z0-9]+.json (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run-summary/enable.t b/turborepo-tests/integration/tests/run-summary/enable.t index c3638751109b3..2ab250abcaa0a 100644 --- a/turborepo-tests/integration/tests/run-summary/enable.t +++ b/turborepo-tests/integration/tests/run-summary/enable.t @@ -26,6 +26,8 @@ Setup # env var=true, missing flag: yes $ rm -rf .turbo/runs $ TURBO_RUN_SUMMARY=true ${TURBO} run build > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` $ /bin/ls .turbo/runs/*.json | wc -l \s*1 (re) # env var=true, --flag=true: yes diff --git a/turborepo-tests/integration/tests/run-summary/monorepo.t b/turborepo-tests/integration/tests/run-summary/monorepo.t index e894fac26c95b..9d8e0034d1fc4 100644 --- a/turborepo-tests/integration/tests/run-summary/monorepo.t +++ b/turborepo-tests/integration/tests/run-summary/monorepo.t @@ -5,6 +5,8 @@ Setup $ rm -rf .turbo/runs $ ${TURBO} run build --summarize -- someargs > /dev/null # first run (should be cache miss) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # HACK: Generated run summaries are named with a ksuid, which is a time-sorted ID. This _generally_ works # but we're seeing in this test that sometimes a summary file is not sorted (with /bin/ls) in the order we expect diff --git a/turborepo-tests/integration/tests/run-summary/strict-env.t b/turborepo-tests/integration/tests/run-summary/strict-env.t index 9a2522b8889ad..ff7dae9247315 100644 --- a/turborepo-tests/integration/tests/run-summary/strict-env.t +++ b/turborepo-tests/integration/tests/run-summary/strict-env.t @@ -12,6 +12,7 @@ Set the env vars Run as `infer` $ rm -rf .turbo/runs $ ${TURBO} run build --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' strict $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' @@ -38,6 +39,7 @@ Run as `strict` Run as `loose` $ rm -rf .turbo/runs $ ${TURBO} run build --env-mode=loose --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' loose $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' @@ -52,6 +54,7 @@ All specified + infer $ rm -rf .turbo/runs $ ${TESTDIR}/../../../helpers/replace_turbo_json.sh $(pwd) "strict_env_vars/all.json" $ ${TURBO} run build --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' strict $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' @@ -68,6 +71,7 @@ All specified + loose $ rm -rf .turbo/runs $ ${TESTDIR}/../../../helpers/replace_turbo_json.sh $(pwd) "strict_env_vars/all.json" $ ${TURBO} run build --env-mode=loose --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' loose $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' @@ -98,6 +102,7 @@ Global passthrough specified value + infer $ rm -rf .turbo/runs $ ${TESTDIR}/../../../helpers/replace_turbo_json.sh $(pwd) "strict_env_vars/global_pt.json" $ ${TURBO} run build --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' strict $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' @@ -154,6 +159,7 @@ Task passthrough specified value + infer $ rm -rf .turbo/runs $ ${TESTDIR}/../../../helpers/replace_turbo_json.sh $(pwd) "strict_env_vars/task_pt.json" $ ${TURBO} run build --summarize > /dev/null + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` $ cat .turbo/runs/*.json | jq -r '.envMode' strict $ cat .turbo/runs/*.json | jq -r '.tasks[0].envMode' diff --git a/turborepo-tests/integration/tests/run/continue.t b/turborepo-tests/integration/tests/run/continue.t index d35ffac9b2655..39a844340f5b9 100644 --- a/turborepo-tests/integration/tests/run/continue.t +++ b/turborepo-tests/integration/tests/run/continue.t @@ -84,5 +84,6 @@ Run with --continue Time:\s*[\.0-9]+m?s (re) Failed: other-app#build, some-lib#build + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] diff --git a/turborepo-tests/integration/tests/run/force.t b/turborepo-tests/integration/tests/run/force.t index 264d1d2fd16fc..96ce7ff20b146 100644 --- a/turborepo-tests/integration/tests/run/force.t +++ b/turborepo-tests/integration/tests/run/force.t @@ -30,6 +30,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # env var=true, missing flag: cache bypass $ TURBO_FORCE=true ${TURBO} run build --output-logs=hash-only --filter=my-app @@ -42,6 +43,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # env var=true, --flag=true: cache bypass $ TURBO_FORCE=true ${TURBO} run build --output-logs=hash-only --filter=my-app --force=true \xe2\x80\xa2 Packages in scope: my-app (esc) @@ -53,6 +55,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # env var=true, --flag=false: cache hit $ TURBO_FORCE=true ${TURBO} run build --output-logs=hash-only --filter=my-app --force=false \xe2\x80\xa2 Packages in scope: my-app (esc) @@ -75,6 +78,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # env var=false, missing flag, cache hit $ TURBO_FORCE=false ${TURBO} run build --output-logs=hash-only --filter=my-app @@ -98,6 +102,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # env var=false, --flag=false: cache hit $ TURBO_FORCE=false ${TURBO} run build --output-logs=hash-only --filter=my-app --force=false \xe2\x80\xa2 Packages in scope: my-app (esc) @@ -120,6 +125,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # missing env var, missing flag: cache hit $ ${TURBO} run build --output-logs=hash-only --filter=my-app @@ -143,6 +149,7 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` # missing env var, --flag=false: cache hit $ ${TURBO} run build --output-logs=hash-only --filter=my-app --force=false \xe2\x80\xa2 Packages in scope: my-app (esc) @@ -165,3 +172,4 @@ baseline to generate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run/gitignored-inputs.t b/turborepo-tests/integration/tests/run/gitignored-inputs.t index 5c2f835fe4230..0c4a835f5a153 100644 --- a/turborepo-tests/integration/tests/run/gitignored-inputs.t +++ b/turborepo-tests/integration/tests/run/gitignored-inputs.t @@ -16,6 +16,7 @@ Some helper functions to parse the summary file Just run the util package, it's simpler $ ${TURBO} run build --filter=util --output-logs=hash-only --summarize | grep "util:build: cache" + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` util:build: cache miss, executing 11cff3dd389fdfed $ FIRST=$(/bin/ls .turbo/runs/*.json | head -n1) @@ -30,6 +31,7 @@ Change the content of internal.txt Hash does not change, because it is gitignored $ ${TURBO} run build --filter=util --output-logs=hash-only --summarize | grep "util:build: cache" + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` util:build: cache miss, executing a489883a3c7cd307 The internal.txt hash should be different from the one before diff --git a/turborepo-tests/integration/tests/run/no-root-turbo.t b/turborepo-tests/integration/tests/run/no-root-turbo.t index 60292a0a7b544..b9d934855c0da 100644 --- a/turborepo-tests/integration/tests/run/no-root-turbo.t +++ b/turborepo-tests/integration/tests/run/no-root-turbo.t @@ -25,6 +25,7 @@ Run with --root-turbo-json should use specified config Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` Run with TURBO_ROOT_TURBO_JSON should use specified config $ TURBO_ROOT_TURBO_JSON=turborepo.json ${TURBO} build --filter=my-app diff --git a/turborepo-tests/integration/tests/run/one-script-error.t b/turborepo-tests/integration/tests/run/one-script-error.t index 77de8eff33d5b..005a8aa2e81f8 100644 --- a/turborepo-tests/integration/tests/run/one-script-error.t +++ b/turborepo-tests/integration/tests/run/one-script-error.t @@ -30,6 +30,7 @@ Note that npm reports any failed script as exit code 1, even though we "exit 2" Time:\s*[\.0-9]+m?s (re) Failed: my-app#error + WARNING no output files found for task my-app#okay. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] @@ -98,5 +99,6 @@ Make sure error code isn't swallowed with continue Time:\s*[\.0-9]+m?s (re) Failed: my-app#error + WARNING no output files found for task my-app#okay2. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] diff --git a/turborepo-tests/integration/tests/run/profile.t b/turborepo-tests/integration/tests/run/profile.t index dc89ea66504e0..e0d4d083452db 100644 --- a/turborepo-tests/integration/tests/run/profile.t +++ b/turborepo-tests/integration/tests/run/profile.t @@ -4,5 +4,7 @@ Setup Run build and record a trace Ignore output since we want to focus on testing the generated profile $ ${TURBO} build --profile=build.trace > turbo.log + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Make sure the resulting trace is valid JSON $ node -e "require('./build.trace')" diff --git a/turborepo-tests/integration/tests/run/single-package/with-deps-run.t b/turborepo-tests/integration/tests/run/single-package/with-deps-run.t index 0050f76b42fcf..f11c66174621a 100644 --- a/turborepo-tests/integration/tests/run/single-package/with-deps-run.t +++ b/turborepo-tests/integration/tests/run/single-package/with-deps-run.t @@ -21,6 +21,7 @@ Check Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task //#test. Please check your `outputs` key in `turbo.json` Run a second time, verify caching works because there is a config $ ${TURBO} run test \xe2\x80\xa2 Running test (esc) diff --git a/turborepo-tests/integration/tests/run/unnamed-packages.t b/turborepo-tests/integration/tests/run/unnamed-packages.t index 9941be7611711..8df57aa3e675b 100644 --- a/turborepo-tests/integration/tests/run/unnamed-packages.t +++ b/turborepo-tests/integration/tests/run/unnamed-packages.t @@ -18,3 +18,4 @@ which does not have a name should be ignored. We should process it but filter. Cached: 0 cached, 1 total Time: (.+) (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/task-dependencies/overwriting.t b/turborepo-tests/integration/tests/task-dependencies/overwriting.t index 555833f1733f6..d3ece94870074 100644 --- a/turborepo-tests/integration/tests/task-dependencies/overwriting.t +++ b/turborepo-tests/integration/tests/task-dependencies/overwriting.t @@ -4,6 +4,9 @@ Setup Test $ ${TURBO} run build > tmp.log + WARNING no output files found for task workspace-a#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task workspace-a#generate. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task workspace-b#build. Please check your `outputs` key in `turbo.json` $ cat tmp.log | grep "Packages in scope" -A2 \xe2\x80\xa2 Packages in scope: workspace-a, workspace-b (esc) \xe2\x80\xa2 Running build in 2 packages (esc) diff --git a/turborepo-tests/integration/tests/task-dependencies/root-workspace.t b/turborepo-tests/integration/tests/task-dependencies/root-workspace.t index 7ee31d3c99a52..4f730794c610d 100644 --- a/turborepo-tests/integration/tests/task-dependencies/root-workspace.t +++ b/turborepo-tests/integration/tests/task-dependencies/root-workspace.t @@ -22,3 +22,5 @@ This tests asserts that root tasks can depend on workspace#task Cached: 0 cached, 2 total Time:\s*[\.0-9ms]+ (re) + WARNING no output files found for task //#mytask. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task lib-a#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/task-dependencies/topological.t b/turborepo-tests/integration/tests/task-dependencies/topological.t index 41543406c3ab3..f2d862d407a6c 100644 --- a/turborepo-tests/integration/tests/task-dependencies/topological.t +++ b/turborepo-tests/integration/tests/task-dependencies/topological.t @@ -23,6 +23,8 @@ Check my-app#build output Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/workspace-configs/add-keys.t b/turborepo-tests/integration/tests/workspace-configs/add-keys.t index db2141c3e5d2c..8aacdecc21cad 100644 --- a/turborepo-tests/integration/tests/workspace-configs/add-keys.t +++ b/turborepo-tests/integration/tests/workspace-configs/add-keys.t @@ -10,6 +10,7 @@ Setup # 1. First run, assert for `dependsOn` and `outputs` keys $ ${TURBO} run add-keys-task --filter=add-keys > tmp.log + WARNING no output files found for task add-keys#add-keys-underlying-task. Please check your `outputs` key in `turbo.json` $ cat tmp.log \xe2\x80\xa2 Packages in scope: add-keys (esc) \xe2\x80\xa2 Running add-keys-task in 1 packages (esc) @@ -76,6 +77,7 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task add-keys#add-keys-underlying-task. Please check your `outputs` key in `turbo.json` # 4. Set env var and assert cache miss $ SOME_VAR=somevalue ${TURBO} run add-keys-task --filter=add-keys \xe2\x80\xa2 Packages in scope: add-keys (esc) diff --git a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t index 17af56d6dabe9..c168128425281 100644 --- a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t +++ b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t @@ -21,3 +21,5 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task blank-pkg#cross-workspace-underlying-task. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task cross-workspace#cross-workspace-task. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t b/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t index 5f7f521c27028..bee09fd83e0ac 100644 --- a/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t @@ -7,6 +7,8 @@ Setup # 1. First run, assert that dependet tasks run `dependsOn` $ ${TURBO} run missing-workspace-config-task-with-deps --filter=missing-workspace-config > tmp.log + WARNING no output files found for task blank-pkg#missing-workspace-config-underlying-topo-task. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task missing-workspace-config#missing-workspace-config-underlying-task. Please check your `outputs` key in `turbo.json` # Validate in pieces. `omit-key` task has two dependsOn values, and those tasks # can run in non-deterministic order. So we need to validate the logs in the pieces. $ cat tmp.log | grep "in scope" -A 2 diff --git a/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t b/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t index 1486678c3ab0b..8aebdc9edb07e 100644 --- a/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t @@ -8,6 +8,8 @@ Setup # 1. First run, assert for `dependsOn` and `outputs` keys $ ${TURBO} run omit-keys-task-with-deps --filter=omit-keys > tmp.log + WARNING no output files found for task blank-pkg#omit-keys-underlying-topo-task. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task omit-keys#omit-keys-underlying-task. Please check your `outputs` key in `turbo.json` # Validate in pieces. `omit-key` task has two dependsOn values, and those tasks # can run in non-deterministic order. So we need to validatte the logs in pieces. $ cat tmp.log | grep "in scope" -A 1 diff --git a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t index 6bba3588cfb2a..0ffa9b4019fc8 100644 --- a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t @@ -22,6 +22,7 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task override-values#override-values-task-with-deps. Please check your `outputs` key in `turbo.json` # This is the same test as above, but with --dry and testing the resolvedTaskDefinition has the same value for dependsOn $ ${TURBO} run override-values-task-with-deps --filter=override-values --dry=json | jq '.tasks | map(select(.taskId == "override-values#override-values-task-with-deps")) | .[0].resolvedTaskDefinition' diff --git a/turborepo-tests/integration/tests/workspace-configs/persistent.t b/turborepo-tests/integration/tests/workspace-configs/persistent.t index c6ead0abd6909..c5fecccf0b36c 100644 --- a/turborepo-tests/integration/tests/workspace-configs/persistent.t +++ b/turborepo-tests/integration/tests/workspace-configs/persistent.t @@ -47,6 +47,8 @@ This test covers: Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + WARNING no output files found for task persistent#persistent-task-2-parent. Please check your `outputs` key in `turbo.json` + WARNING no output files found for task persistent#persistent-task-2. Please check your `outputs` key in `turbo.json` # persistent-task-3-parent dependsOn persistent-task-3 # persistent-task-3 is persistent:true in the root workspace # persistent-task-3 is defined in workspace, but does NOT have the persistent flag From 5c9379392a17e9223e12c1741f5f1998237886d4 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 10 Oct 2024 17:06:29 -0400 Subject: [PATCH 056/218] feat(query): package changes reason (#9240) ### Description Plumbing through reason for why a package changed for query. Adds a `reason` field which is a union of the different reasons a package could be added. This can be reviewed commit by commit, although there is a little bit of churn around types and some behavior. ### Testing Instructions Added some tests to `affected.t` --- .../src/global_deps_package_change_mapper.rs | 147 ----------- crates/turborepo-lib/src/lib.rs | 1 - .../src/package_changes_watcher.rs | 4 +- crates/turborepo-lib/src/query/mod.rs | 203 +++++++++++++- crates/turborepo-lib/src/run/builder.rs | 24 +- crates/turborepo-lib/src/run/mod.rs | 2 +- .../src/run/scope/change_detector.rs | 40 +-- crates/turborepo-lib/src/run/scope/filter.rs | 249 +++++++++++++----- crates/turborepo-lib/src/run/scope/mod.rs | 11 +- .../src/change_mapper/mod.rs | 106 ++++++-- .../src/change_mapper/package.rs | 78 ++++-- crates/turborepo-scm/src/git.rs | 46 ++-- packages/turbo-repository/rust/src/lib.rs | 2 +- turborepo-tests/integration/tests/affected.t | 44 +++- .../tests/lockfile-aware-caching/pnpm.t | 27 +- .../tests/lockfile-aware-caching/yarn.t | 27 +- 16 files changed, 697 insertions(+), 314 deletions(-) delete mode 100644 crates/turborepo-lib/src/global_deps_package_change_mapper.rs diff --git a/crates/turborepo-lib/src/global_deps_package_change_mapper.rs b/crates/turborepo-lib/src/global_deps_package_change_mapper.rs deleted file mode 100644 index 3d686c4955e5b..0000000000000 --- a/crates/turborepo-lib/src/global_deps_package_change_mapper.rs +++ /dev/null @@ -1,147 +0,0 @@ -use thiserror::Error; -use turbopath::AnchoredSystemPath; -use turborepo_repository::{ - change_mapper::{DefaultPackageChangeMapper, PackageChangeMapper, PackageMapping}, - package_graph::{PackageGraph, WorkspacePackage}, -}; -use wax::{BuildError, Program}; - -#[derive(Error, Debug)] -pub enum Error { - #[error(transparent)] - InvalidFilter(#[from] BuildError), -} - -/// A package detector that uses a global deps list to determine -/// if a file should cause all packages to be marked as changed. -/// This is less conservative than the `DefaultPackageChangeMapper`, -/// which assumes that any changed file that is not in a package -/// changes all packages. Since we have a list of global deps, -/// we can check against that and avoid invalidating in unnecessary cases. -pub struct GlobalDepsPackageChangeMapper<'a> { - pkg_dep_graph: &'a PackageGraph, - global_deps_matcher: wax::Any<'a>, -} - -impl<'a> GlobalDepsPackageChangeMapper<'a> { - pub fn new, I: Iterator>( - pkg_dep_graph: &'a PackageGraph, - global_deps: I, - ) -> Result { - let global_deps_matcher = wax::any(global_deps)?; - - Ok(Self { - pkg_dep_graph, - global_deps_matcher, - }) - } -} - -impl<'a> PackageChangeMapper for GlobalDepsPackageChangeMapper<'a> { - fn detect_package(&self, path: &AnchoredSystemPath) -> PackageMapping { - match DefaultPackageChangeMapper::new(self.pkg_dep_graph).detect_package(path) { - // Since `DefaultPackageChangeMapper` is overly conservative, we can check here if - // the path is actually in globalDeps and if not, return it as - // PackageDetection::Package(WorkspacePackage::root()). - PackageMapping::All => { - let cleaned_path = path.clean(); - let in_global_deps = self.global_deps_matcher.is_match(cleaned_path.as_str()); - - if in_global_deps { - PackageMapping::All - } else { - PackageMapping::Package(WorkspacePackage::root()) - } - } - result => result, - } - } -} - -#[cfg(test)] -mod tests { - use tempfile::tempdir; - use turbopath::{AbsoluteSystemPath, AnchoredSystemPathBuf}; - use turborepo_repository::{ - change_mapper::{ - AllPackageChangeReason, ChangeMapper, DefaultPackageChangeMapper, PackageChanges, - }, - discovery, - discovery::PackageDiscovery, - package_graph::{PackageGraphBuilder, WorkspacePackage}, - package_json::PackageJson, - }; - - use super::GlobalDepsPackageChangeMapper; - - #[allow(dead_code)] - pub struct MockDiscovery; - - impl PackageDiscovery for MockDiscovery { - async fn discover_packages( - &self, - ) -> Result { - Ok(discovery::DiscoveryResponse { - package_manager: turborepo_repository::package_manager::PackageManager::Npm, - workspaces: vec![], - }) - } - - async fn discover_packages_blocking( - &self, - ) -> Result { - self.discover_packages().await - } - } - - #[tokio::test] - async fn test_different_package_detectors() -> Result<(), anyhow::Error> { - let repo_root = tempdir()?; - let root_package_json = PackageJson::default(); - - let pkg_graph = PackageGraphBuilder::new( - AbsoluteSystemPath::from_std_path(repo_root.path())?, - root_package_json, - ) - .with_package_discovery(MockDiscovery) - .build() - .await?; - - let default_package_detector = DefaultPackageChangeMapper::new(&pkg_graph); - let change_mapper = ChangeMapper::new(&pkg_graph, vec![], default_package_detector); - - let package_changes = change_mapper.changed_packages( - [AnchoredSystemPathBuf::from_raw("README.md")?] - .into_iter() - .collect(), - None, - )?; - - // We should return All because we don't have global deps and - // therefore must be conservative about changes - assert_eq!( - package_changes, - PackageChanges::All(AllPackageChangeReason::NonPackageFileChanged) - ); - - let turbo_package_detector = - GlobalDepsPackageChangeMapper::new(&pkg_graph, std::iter::empty::<&str>())?; - let change_mapper = ChangeMapper::new(&pkg_graph, vec![], turbo_package_detector); - - let package_changes = change_mapper.changed_packages( - [AnchoredSystemPathBuf::from_raw("README.md")?] - .into_iter() - .collect(), - None, - )?; - - // We only get a root workspace change since we have global deps specified and - // README.md is not one of them - assert_eq!( - package_changes, - PackageChanges::Some([WorkspacePackage::root()].into_iter().collect()) - ); - - Ok(()) - } -} diff --git a/crates/turborepo-lib/src/lib.rs b/crates/turborepo-lib/src/lib.rs index 0014816ab3d38..5124adb23d036 100644 --- a/crates/turborepo-lib/src/lib.rs +++ b/crates/turborepo-lib/src/lib.rs @@ -21,7 +21,6 @@ mod engine; mod framework; mod gitignore; -mod global_deps_package_change_mapper; pub(crate) mod globwatcher; mod hash; mod opts; diff --git a/crates/turborepo-lib/src/package_changes_watcher.rs b/crates/turborepo-lib/src/package_changes_watcher.rs index d60ace1ffda93..2cb9857a18767 100644 --- a/crates/turborepo-lib/src/package_changes_watcher.rs +++ b/crates/turborepo-lib/src/package_changes_watcher.rs @@ -370,7 +370,9 @@ impl Subscriber { } } } - Ok(PackageChanges::Some(mut filtered_pkgs)) => { + Ok(PackageChanges::Some(filtered_pkgs)) => { + let mut filtered_pkgs: HashSet = + filtered_pkgs.into_keys().collect(); // If the root package has changed, we only send it if we have root // tasks. Otherwise it's not worth sending as it will only // pollute up the output logs diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index b1c210308ec7d..91338601cc586 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -15,7 +15,7 @@ use thiserror::Error; use tokio::select; use turbo_trace::TraceError; use turbopath::AbsoluteSystemPathBuf; -use turborepo_repository::package_graph::PackageName; +use turborepo_repository::{change_mapper::AllPackageChangeReason, package_graph::PackageName}; use crate::{ get_version, @@ -46,6 +46,9 @@ pub enum Error { Path(#[from] turbopath::PathError), #[error(transparent)] UI(#[from] turborepo_ui::Error), + #[error(transparent)] + #[diagnostic(transparent)] + Resolution(#[from] crate::run::scope::filter::ResolutionError), } pub struct RepositoryQuery { @@ -61,6 +64,7 @@ impl RepositoryQuery { #[derive(Debug, SimpleObject)] #[graphql(concrete(name = "RepositoryTasks", params(RepositoryTask)))] #[graphql(concrete(name = "Packages", params(Package)))] +#[graphql(concrete(name = "ChangedPackages", params(ChangedPackage)))] pub struct Array { items: Vec, length: usize, @@ -290,6 +294,188 @@ impl PackagePredicate { } } +// why write few types when many work? +#[derive(SimpleObject)] +struct GlobalDepsChanged { + // we're using slightly awkward names so we can reserve the nicer name for the "correct" + // GraphQL type, e.g. a `file` field for the `File` type + file_path: String, +} + +#[derive(SimpleObject)] +struct DefaultGlobalFileChanged { + file_path: String, +} + +#[derive(SimpleObject)] +struct LockfileChangeDetectionFailed { + /// This is a nothing field + empty: bool, +} + +#[derive(SimpleObject)] +struct LockfileChangedWithoutDetails { + /// This is a nothing field + empty: bool, +} + +#[derive(SimpleObject)] +struct RootInternalDepChanged { + root_internal_dep: String, +} + +#[derive(SimpleObject)] +struct NonPackageFileChanged { + file: String, +} + +#[derive(SimpleObject)] +struct GitRefNotFound { + from_ref: Option, + to_ref: Option, +} + +#[derive(SimpleObject)] +struct IncludedByFilter { + filters: Vec, +} + +#[derive(SimpleObject)] +struct RootTask { + task_name: String, +} + +#[derive(SimpleObject)] +struct ConservativeRootLockfileChanged { + /// This is a nothing field + empty: bool, +} + +#[derive(SimpleObject)] +struct LockfileChanged { + /// This is a nothing field + empty: bool, +} + +#[derive(SimpleObject)] +struct DependencyChanged { + dependency_name: String, +} + +#[derive(SimpleObject)] +struct DependentChanged { + dependent_name: String, +} + +#[derive(SimpleObject)] +struct FileChanged { + file_path: String, +} + +#[derive(SimpleObject)] +struct InFilteredDirectory { + directory_path: String, +} + +#[derive(Union)] +enum PackageChangeReason { + GlobalDepsChanged(GlobalDepsChanged), + DefaultGlobalFileChanged(DefaultGlobalFileChanged), + LockfileChangeDetectionFailed(LockfileChangeDetectionFailed), + LockfileChangedWithoutDetails(LockfileChangedWithoutDetails), + RootInternalDepChanged(RootInternalDepChanged), + NonPackageFileChanged(NonPackageFileChanged), + GitRefNotFound(GitRefNotFound), + IncludedByFilter(IncludedByFilter), + RootTask(RootTask), + ConservativeRootLockfileChanged(ConservativeRootLockfileChanged), + LockfileChanged(LockfileChanged), + DependencyChanged(DependencyChanged), + DependentChanged(DependentChanged), + FileChanged(FileChanged), + InFilteredDirectory(InFilteredDirectory), +} + +impl From for PackageChangeReason { + fn from(value: turborepo_repository::change_mapper::PackageInclusionReason) -> Self { + match value { + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::GlobalDepsChanged { file }, + ) => PackageChangeReason::GlobalDepsChanged(GlobalDepsChanged { + file_path: file.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::DefaultGlobalFileChanged { file }, + ) => PackageChangeReason::DefaultGlobalFileChanged(DefaultGlobalFileChanged { + file_path: file.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::LockfileChangeDetectionFailed, + ) => { + PackageChangeReason::LockfileChangeDetectionFailed(LockfileChangeDetectionFailed { + empty: false, + }) + } + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::GitRefNotFound { from_ref, to_ref }, + ) => PackageChangeReason::GitRefNotFound(GitRefNotFound { from_ref, to_ref }), + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::LockfileChangedWithoutDetails, + ) => { + PackageChangeReason::LockfileChangedWithoutDetails(LockfileChangedWithoutDetails { + empty: false, + }) + } + turborepo_repository::change_mapper::PackageInclusionReason::All( + AllPackageChangeReason::RootInternalDepChanged { root_internal_dep }, + ) => PackageChangeReason::RootInternalDepChanged(RootInternalDepChanged { + root_internal_dep: root_internal_dep.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::RootTask { task } => { + PackageChangeReason::RootTask(RootTask { + task_name: task.to_string(), + }) + } + turborepo_repository::change_mapper::PackageInclusionReason::ConservativeRootLockfileChanged => { + PackageChangeReason::ConservativeRootLockfileChanged(ConservativeRootLockfileChanged { empty: false }) + } + turborepo_repository::change_mapper::PackageInclusionReason::LockfileChanged => { + PackageChangeReason::LockfileChanged(LockfileChanged { empty: false }) + } + turborepo_repository::change_mapper::PackageInclusionReason::DependencyChanged { + dependency, + } => PackageChangeReason::DependencyChanged(DependencyChanged { + dependency_name: dependency.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::DependentChanged { + dependent, + } => PackageChangeReason::DependentChanged(DependentChanged { + dependent_name: dependent.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::FileChanged { file } => { + PackageChangeReason::FileChanged(FileChanged { + file_path: file.to_string(), + }) + } + turborepo_repository::change_mapper::PackageInclusionReason::InFilteredDirectory { + directory, + } => PackageChangeReason::InFilteredDirectory(InFilteredDirectory { + directory_path: directory.to_string(), + }), + turborepo_repository::change_mapper::PackageInclusionReason::IncludedByFilter { + filters, + } => PackageChangeReason::IncludedByFilter(IncludedByFilter { filters }), + } + } +} + +#[derive(SimpleObject)] +struct ChangedPackage { + reason: PackageChangeReason, + #[graphql(flatten)] + package: Package, +} + #[Object] impl RepositoryQuery { async fn affected_packages( @@ -297,7 +483,7 @@ impl RepositoryQuery { base: Option, head: Option, filter: Option, - ) -> Result, Error> { + ) -> Result, Error> { let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); @@ -309,12 +495,15 @@ impl RepositoryQuery { self.run.root_turbo_json(), )? .into_iter() - .map(|package| Package { - run: self.run.clone(), - name: package, + .map(|(package, reason)| ChangedPackage { + package: Package { + run: self.run.clone(), + name: package, + }, + reason: reason.into(), }) - .filter(|package| filter.as_ref().map_or(true, |f| f.check(package))) - .sorted_by(|a, b| a.name.cmp(&b.name)) + .filter(|package| filter.as_ref().map_or(true, |f| f.check(&package.package))) + .sorted_by(|a, b| a.package.name.cmp(&b.package.name)) .collect()) } /// Gets a single package by name diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index 0169515663b4c..7f10b64ab1cc5 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -1,5 +1,5 @@ use std::{ - collections::HashSet, + collections::{HashMap, HashSet}, io::{ErrorKind, IsTerminal}, sync::Arc, time::SystemTime, @@ -14,6 +14,7 @@ use turborepo_cache::AsyncCache; use turborepo_env::EnvironmentVariableMap; use turborepo_errors::Spanned; use turborepo_repository::{ + change_mapper::PackageInclusionReason, package_graph::{PackageGraph, PackageName}, package_json, package_json::PackageJson, @@ -148,7 +149,7 @@ impl RunBuilder { pkg_dep_graph: &PackageGraph, scm: &SCM, root_turbo_json: &TurboJson, - ) -> Result, Error> { + ) -> Result, Error> { let (mut filtered_pkgs, is_all_packages) = scope::resolve_packages( &opts.scope_opts, repo_root, @@ -166,7 +167,12 @@ impl RunBuilder { } if root_turbo_json.tasks.contains_key(&task_name) { - filtered_pkgs.insert(PackageName::Root); + filtered_pkgs.insert( + PackageName::Root, + PackageInclusionReason::RootTask { + task: task_name.to_string(), + }, + ); break; } } @@ -411,7 +417,7 @@ impl RunBuilder { let mut engine = self.build_engine( &pkg_dep_graph, &root_turbo_json, - &filtered_pkgs, + filtered_pkgs.keys(), turbo_json_loader.clone(), )?; @@ -420,7 +426,7 @@ impl RunBuilder { engine = self.build_engine( &pkg_dep_graph, &root_turbo_json, - &filtered_pkgs, + filtered_pkgs.keys(), turbo_json_loader, )?; } @@ -453,7 +459,7 @@ impl RunBuilder { api_client: self.api_client, api_auth: self.api_auth, env_at_execution_start, - filtered_pkgs, + filtered_pkgs: filtered_pkgs.keys().cloned().collect(), pkg_dep_graph: Arc::new(pkg_dep_graph), root_turbo_json, scm, @@ -465,11 +471,11 @@ impl RunBuilder { }) } - fn build_engine( + fn build_engine<'a>( &self, pkg_dep_graph: &PackageGraph, root_turbo_json: &TurboJson, - filtered_pkgs: &HashSet, + filtered_pkgs: impl Iterator, turbo_json_loader: TurboJsonLoader, ) -> Result { let mut builder = EngineBuilder::new( @@ -480,7 +486,7 @@ impl RunBuilder { ) .with_root_tasks(root_turbo_json.tasks.keys().cloned()) .with_tasks_only(self.opts.run_opts.only) - .with_workspaces(filtered_pkgs.clone().into_iter().collect()) + .with_workspaces(filtered_pkgs.cloned().collect()) .with_tasks(self.opts.run_opts.tasks.iter().map(|task| { // TODO: Pull span info from command Spanned::new(TaskName::from(task.as_str()).into_owned()) diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 5b50452c10be5..0f3a90676c67d 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -6,7 +6,7 @@ mod error; pub(crate) mod global_hash; mod graph_visualizer; pub(crate) mod package_discovery; -mod scope; +pub(crate) mod scope; pub(crate) mod summary; pub mod task_access; pub mod task_id; diff --git a/crates/turborepo-lib/src/run/scope/change_detector.rs b/crates/turborepo-lib/src/run/scope/change_detector.rs index b2527a74cc40d..3b8459e352836 100644 --- a/crates/turborepo-lib/src/run/scope/change_detector.rs +++ b/crates/turborepo-lib/src/run/scope/change_detector.rs @@ -1,17 +1,17 @@ -use std::collections::HashSet; +use std::collections::{HashMap, HashSet}; use tracing::debug; use turbopath::{AbsoluteSystemPath, AnchoredSystemPathBuf}; use turborepo_repository::{ - change_mapper::{ChangeMapper, DefaultPackageChangeMapper, LockfileChange, PackageChanges}, + change_mapper::{ + AllPackageChangeReason, ChangeMapper, DefaultPackageChangeMapper, Error, + GlobalDepsPackageChangeMapper, LockfileChange, PackageChanges, PackageInclusionReason, + }, package_graph::{PackageGraph, PackageName}, }; -use turborepo_scm::{git::ChangedFiles, SCM}; +use turborepo_scm::{git::InvalidRange, SCM}; -use crate::{ - global_deps_package_change_mapper::{Error, GlobalDepsPackageChangeMapper}, - run::scope::ResolutionError, -}; +use crate::run::scope::ResolutionError; /// Given two git refs, determine which packages have changed between them. pub trait GitChangeDetector { @@ -22,7 +22,7 @@ pub trait GitChangeDetector { include_uncommitted: bool, allow_unknown_objects: bool, merge_base: bool, - ) -> Result, ResolutionError>; + ) -> Result, ResolutionError>; } pub struct ScopeChangeDetector<'a> { @@ -94,7 +94,7 @@ impl<'a> GitChangeDetector for ScopeChangeDetector<'a> { include_uncommitted: bool, allow_unknown_objects: bool, merge_base: bool, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { let changed_files = match self.scm.changed_files( self.turbo_root, from_ref, @@ -103,15 +103,23 @@ impl<'a> GitChangeDetector for ScopeChangeDetector<'a> { allow_unknown_objects, merge_base, )? { - ChangedFiles::All => { + Err(InvalidRange { from_ref, to_ref }) => { debug!("all packages changed"); return Ok(self .pkg_graph .packages() - .map(|(name, _)| name.to_owned()) + .map(|(name, _)| { + ( + name.to_owned(), + PackageInclusionReason::All(AllPackageChangeReason::GitRefNotFound { + from_ref: from_ref.clone(), + to_ref: to_ref.clone(), + }), + ) + }) .collect()); } - ChangedFiles::Some(changed_files) => changed_files, + Ok(changed_files) => changed_files, }; let lockfile_contents = self.get_lockfile_contents(from_ref, &changed_files); @@ -133,22 +141,22 @@ impl<'a> GitChangeDetector for ScopeChangeDetector<'a> { Ok(self .pkg_graph .packages() - .map(|(name, _)| name.to_owned()) + .map(|(name, _)| (name.to_owned(), PackageInclusionReason::All(reason.clone()))) .collect()) } PackageChanges::Some(packages) => { debug!( "{} packages changed: {:?}", packages.len(), - &packages - .iter() + packages + .keys() .map(|x| x.name.to_string()) .collect::>() ); Ok(packages .iter() - .map(|package| package.name.to_owned()) + .map(|(package, reason)| (package.name.clone(), reason.clone())) .collect()) } } diff --git a/crates/turborepo-lib/src/run/scope/filter.rs b/crates/turborepo-lib/src/run/scope/filter.rs index 331d53f0526f5..918afc2a3c8e4 100644 --- a/crates/turborepo-lib/src/run/scope/filter.rs +++ b/crates/turborepo-lib/src/run/scope/filter.rs @@ -4,10 +4,11 @@ use std::{ str::FromStr, }; +use miette::Diagnostic; use tracing::debug; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPathBuf}; use turborepo_repository::{ - change_mapper::ChangeMapError, + change_mapper::{merge_changed_packages, ChangeMapError, PackageInclusionReason}, package_graph::{self, PackageGraph, PackageName}, }; use turborepo_scm::SCM; @@ -18,10 +19,7 @@ use super::{ simple_glob::{Match, SimpleGlob}, target_selector::{GitRange, InvalidSelectorError, TargetSelector}, }; -use crate::{ - global_deps_package_change_mapper, run::scope::change_detector::ScopeChangeDetector, - turbo_json::TurboJson, -}; +use crate::{run::scope::change_detector::ScopeChangeDetector, turbo_json::TurboJson}; pub struct PackageInference { package_name: Option, @@ -165,7 +163,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { &self, affected: &Option<(Option, Option)>, patterns: &[String], - ) -> Result<(HashSet, bool), ResolutionError> { + ) -> Result<(HashMap, bool), ResolutionError> { // inference is None only if we are in the root let is_all_packages = patterns.is_empty() && self.inference.is_none() && affected.is_none(); @@ -174,7 +172,14 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { self.pkg_graph .packages() .filter(|(name, _)| matches!(name, PackageName::Other(_))) - .map(|(name, _)| name.to_owned()) + .map(|(name, _)| { + ( + name.to_owned(), + PackageInclusionReason::IncludedByFilter { + filters: patterns.to_vec(), + }, + ) + }) .collect() } else { self.get_packages_from_patterns(affected, patterns)? @@ -187,7 +192,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { &self, affected: &Option<(Option, Option)>, patterns: &[String], - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { let mut selectors = patterns .iter() .map(|pattern| TargetSelector::from_str(pattern)) @@ -213,7 +218,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn get_filtered_packages( &self, selectors: Vec, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { let (_prod_selectors, all_selectors) = self .apply_inference(selectors) .into_iter() @@ -249,7 +254,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn filter_graph( &self, selectors: Vec, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { let (include_selectors, exclude_selectors) = selectors.into_iter().partition::, _>(|t| !t.exclude); @@ -261,13 +266,28 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { .packages() // todo: a type-level way of dealing with non-root packages .filter(|(name, _)| !PackageName::Root.eq(name)) // the root package has to be explicitly included - .map(|(name, _)| name.to_owned()) + .map(|(name, _)| { + ( + name.to_owned(), + PackageInclusionReason::IncludedByFilter { + filters: exclude_selectors + .iter() + .map(|s| s.raw.to_string()) + .collect(), + }, + ) + }) .collect() }; - let exclude = self.filter_graph_with_selectors(exclude_selectors)?; + // We want to just collect the names, not the reasons, so when we check for + // inclusion we don't need to check the reason + let exclude: HashSet = self + .filter_graph_with_selectors(exclude_selectors)? + .into_keys() + .collect(); - include.retain(|i| !exclude.contains(i)); + include.retain(|i, _| !exclude.contains(i)); Ok(include) } @@ -275,12 +295,12 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn filter_graph_with_selectors( &self, selectors: Vec, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { let mut unmatched_selectors = Vec::new(); - let mut walked_dependencies = HashSet::new(); - let mut walked_dependents = HashSet::new(); - let mut walked_dependent_dependencies = HashSet::new(); - let mut cherry_picked_packages = HashSet::new(); + let mut walked_dependencies = HashMap::new(); + let mut walked_dependents = HashMap::new(); + let mut walked_dependent_dependencies = HashMap::new(); + let mut cherry_picked_packages = HashMap::new(); for selector in selectors { let selector_packages = self.filter_graph_with_selector(&selector)?; @@ -290,7 +310,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { continue; } - for package in selector_packages { + for (package, reason) in selector_packages { let node = package_graph::PackageNode::Workspace(package.clone()); if selector.include_dependencies { @@ -298,17 +318,35 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { let dependencies = dependencies .iter() .filter(|node| !matches!(node, package_graph::PackageNode::Root)) - .map(|i| i.as_package_name().to_owned()) + .map(|i| { + ( + i.as_package_name().to_owned(), + // While we're adding dependencies, from their + // perspective, they were changed because + // of a *dependent* + PackageInclusionReason::DependentChanged { + dependent: package.to_owned(), + }, + ) + }) .collect::>(); // flatmap through the option, the set, and then the optional package name - walked_dependencies.extend(dependencies); + merge_changed_packages(&mut walked_dependencies, dependencies); } if selector.include_dependents { let dependents = self.pkg_graph.ancestors(&node); for dependent in dependents.iter().map(|i| i.as_package_name()) { - walked_dependents.insert(dependent.clone()); + walked_dependents.insert( + dependent.clone(), + // While we're adding dependents, from their + // perspective, they were changed because + // of a *dependency* + PackageInclusionReason::DependencyChanged { + dependency: package.to_owned(), + }, + ); // get the dependent's dependencies if selector.include_dependencies { @@ -321,10 +359,20 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { let dependent_dependencies = dependent_dependencies .iter() .filter(|node| !matches!(node, package_graph::PackageNode::Root)) - .map(|i| i.as_package_name().to_owned()) + .map(|i| { + ( + i.as_package_name().to_owned(), + PackageInclusionReason::DependencyChanged { + dependency: package.to_owned(), + }, + ) + }) .collect::>(); - walked_dependent_dependencies.extend(dependent_dependencies); + merge_changed_packages( + &mut walked_dependent_dependencies, + dependent_dependencies, + ); } } } @@ -334,20 +382,20 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { { // if we are including dependents or dependencies, and we are not excluding // ourselves, then we should add ourselves to the list of packages - walked_dependencies.insert(package); + walked_dependencies.insert(package, reason); } else if !selector.include_dependencies && !selector.include_dependents { // if we are neither including dependents or dependencies, then // add to the list of cherry picked packages - cherry_picked_packages.insert(package); + cherry_picked_packages.insert(package, reason); } } } - let mut all_packages = HashSet::new(); - all_packages.extend(walked_dependencies); - all_packages.extend(walked_dependents); - all_packages.extend(walked_dependent_dependencies); - all_packages.extend(cherry_picked_packages); + let mut all_packages = HashMap::new(); + merge_changed_packages(&mut all_packages, walked_dependencies); + merge_changed_packages(&mut all_packages, walked_dependents); + merge_changed_packages(&mut all_packages, walked_dependent_dependencies); + merge_changed_packages(&mut all_packages, cherry_picked_packages); Ok(all_packages) } @@ -355,7 +403,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn filter_graph_with_selector( &self, selector: &TargetSelector, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { if selector.match_dependencies { self.filter_subtrees_with_selector(selector) } else { @@ -375,8 +423,8 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn filter_subtrees_with_selector( &self, selector: &TargetSelector, - ) -> Result, ResolutionError> { - let mut entry_packages = HashSet::new(); + ) -> Result, ResolutionError> { + let mut entry_packages = HashMap::new(); for (name, info) in self.pkg_graph.packages() { if let Some(parent_dir) = selector.parent_dir.as_deref() { @@ -385,10 +433,20 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { let matches = parent_dir_matcher.is_match(info.package_path().as_path()); if matches { - entry_packages.insert(name.to_owned()); + entry_packages.insert( + name.to_owned(), + PackageInclusionReason::InFilteredDirectory { + directory: parent_dir.to_owned(), + }, + ); } } else { - entry_packages.insert(name.to_owned()); + entry_packages.insert( + name.to_owned(), + PackageInclusionReason::IncludedByFilter { + filters: vec![selector.raw.to_string()], + }, + ); } } @@ -399,26 +457,26 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { entry_packages }; - let mut roots = HashSet::new(); + let mut roots = HashMap::new(); let mut matched = HashSet::new(); let changed_packages = if let Some(git_range) = selector.git_range.as_ref() { self.packages_changed_in_range(git_range)? } else { - HashSet::new() + HashMap::default() }; - for package in filtered_entry_packages { + for (package, reason) in filtered_entry_packages { if matched.contains(&package) { - roots.insert(package); + roots.insert(package, reason); continue; } let workspace_node = package_graph::PackageNode::Workspace(package.clone()); let dependencies = self.pkg_graph.dependencies(&workspace_node); - for changed_package in &changed_packages { + for changed_package in changed_packages.keys() { if !selector.exclude_self && package.eq(changed_package) { - roots.insert(package); + roots.insert(package, reason); break; } @@ -426,7 +484,7 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { package_graph::PackageNode::Workspace(changed_package.to_owned()); if dependencies.contains(&changed_node) { - roots.insert(package.clone()); + roots.insert(package.clone(), reason); matched.insert(package); break; } @@ -439,8 +497,8 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn filter_nodes_with_selector( &self, selector: &TargetSelector, - ) -> Result, ResolutionError> { - let mut entry_packages = HashSet::new(); + ) -> Result, ResolutionError> { + let mut entry_packages = HashMap::new(); let mut selector_valid = false; let parent_dir_unix = selector.parent_dir.as_deref().map(|path| path.to_unix()); @@ -480,13 +538,13 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { .map(|(name, entry)| (name, entry.package_path())) .collect::>(); - for package in changed_packages { + for (package, reason) in changed_packages { if let Some(parent_dir_globber) = parent_dir_globber.as_ref() { if package == PackageName::Root { // The root package changed, only add it if // the parentDir is equivalent to the root if parent_dir_globber.matched(&Path::new(".").into()).is_some() { - entry_packages.insert(package); + entry_packages.insert(package, reason); } } else { let path = package_path_lookup @@ -494,11 +552,11 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { .ok_or(ResolutionError::MissingPackageInfo(package.to_string()))?; if parent_dir_globber.is_match(path.as_path()) { - entry_packages.insert(package); + entry_packages.insert(package, reason); } } } else { - entry_packages.insert(package); + entry_packages.insert(package, reason); } } } else if let Some((parent_dir, parent_dir_globber)) = selector @@ -508,21 +566,42 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { { selector_valid = true; if parent_dir == &*AnchoredSystemPathBuf::from_raw(".").expect("valid anchored") { - entry_packages.insert(PackageName::Root); + entry_packages.insert( + PackageName::Root, + PackageInclusionReason::InFilteredDirectory { + directory: parent_dir.to_owned(), + }, + ); } else { let packages = self.pkg_graph.packages(); for (name, _) in packages.filter(|(_name, info)| { let path = info.package_path().as_path(); parent_dir_globber.is_match(path) }) { - entry_packages.insert(name.to_owned()); + entry_packages.insert( + name.to_owned(), + PackageInclusionReason::InFilteredDirectory { + directory: parent_dir.to_owned(), + }, + ); } } } if !selector.name_pattern.is_empty() { if !selector_valid { - entry_packages = self.all_packages(); + entry_packages = self + .all_packages() + .into_iter() + .map(|name| { + ( + name, + PackageInclusionReason::IncludedByFilter { + filters: vec![selector.raw.to_string()], + }, + ) + }) + .collect(); selector_valid = true; } let all_packages = self.all_packages(); @@ -541,10 +620,10 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { } } - fn packages_changed_in_range( + pub fn packages_changed_in_range( &self, git_range: &GitRange, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { self.change_detector.changed_packages( git_range.from_ref.as_deref(), git_range.to_ref.as_deref(), @@ -572,8 +651,8 @@ impl<'a, T: GitChangeDetector> FilterResolver<'a, T> { fn match_package_names( name_pattern: &str, all_packages: &HashSet, - mut packages: HashSet, -) -> Result, ResolutionError> { + mut packages: HashMap, +) -> Result, ResolutionError> { let matcher = SimpleGlob::new(name_pattern)?; let matched_packages = all_packages .iter() @@ -588,12 +667,12 @@ fn match_package_names( )); } - packages.retain(|pkg| matched_packages.contains(pkg)); + packages.retain(|pkg, _| matched_packages.contains(pkg)); Ok(packages) } -#[derive(Debug, thiserror::Error)] +#[derive(Debug, thiserror::Error, Diagnostic)] pub enum ResolutionError { #[error("missing info for package")] MissingPackageInfo(String), @@ -623,7 +702,7 @@ pub enum ResolutionError { #[error("Directory '{0}' specified in filter does not exist")] DirectoryDoesNotExist(AbsoluteSystemPathBuf), #[error("failed to construct glob for globalDependencies")] - GlobalDependenciesGlob(#[from] global_deps_package_change_mapper::Error), + GlobalDependenciesGlob(#[from] turborepo_repository::change_mapper::Error), } #[cfg(test)] @@ -635,6 +714,7 @@ mod test { use test_case::test_case; use turbopath::{AbsoluteSystemPathBuf, AnchoredSystemPathBuf, RelativeUnixPathBuf}; use turborepo_repository::{ + change_mapper::PackageInclusionReason, discovery::PackageDiscovery, package_graph::{PackageGraph, PackageName, ROOT_PKG_NAME}, package_json::PackageJson, @@ -1024,7 +1104,10 @@ mod test { let packages = resolver.get_filtered_packages(selectors).unwrap(); assert_eq!( - packages, + packages + .into_iter() + .map(|(name, _)| name) + .collect::>(), expected.iter().map(|s| PackageName::from(*s)).collect() ); } @@ -1040,15 +1123,21 @@ mod test { let packages = resolver .get_filtered_packages(vec![TargetSelector { name_pattern: "bar".to_string(), + raw: "bar".to_string(), ..Default::default() }]) .unwrap(); assert_eq!( packages, - vec![PackageName::Other("bar".to_string())] - .into_iter() - .collect() + vec![( + PackageName::Other("bar".to_string()), + PackageInclusionReason::IncludedByFilter { + filters: vec!["bar".to_string()] + } + )] + .into_iter() + .collect() ); } @@ -1062,6 +1151,7 @@ mod test { ); let packages = resolver.get_filtered_packages(vec![TargetSelector { name_pattern: "bar".to_string(), + raw: "bar".to_string(), ..Default::default() }]); @@ -1070,12 +1160,21 @@ mod test { let packages = resolver .get_filtered_packages(vec![TargetSelector { name_pattern: "@foo/bar".to_string(), + raw: "@foo/bar".to_string(), ..Default::default() }]) .unwrap(); + assert_eq!( packages, - vec![PackageName::from("@foo/bar")].into_iter().collect() + vec![( + PackageName::from("@foo/bar"), + PackageInclusionReason::IncludedByFilter { + filters: vec!["@foo/bar".to_string()] + } + )] + .into_iter() + .collect() ); } @@ -1240,12 +1339,17 @@ mod test { let packages = resolver.get_filtered_packages(selectors).unwrap(); assert_eq!( - packages, + packages + .into_iter() + .map(|(name, _)| name) + .collect::>(), expected.iter().map(|s| PackageName::from(*s)).collect() ); } - struct TestChangeDetector<'a>(HashMap<(&'a str, Option<&'a str>), HashSet>); + struct TestChangeDetector<'a>( + HashMap<(&'a str, Option<&'a str>), HashMap>, + ); impl<'a> TestChangeDetector<'a> { fn new(pairs: &[(&'a str, Option<&'a str>, &[&'a str])]) -> Self { @@ -1253,7 +1357,16 @@ mod test { for (from, to, changed) in pairs { map.insert( (*from, *to), - changed.iter().map(|s| PackageName::from(*s)).collect(), + changed + .iter() + .map(|s| { + ( + PackageName::from(*s), + // This is just a random reason, + PackageInclusionReason::IncludedByFilter { filters: vec![] }, + ) + }) + .collect(), ); } @@ -1269,7 +1382,7 @@ mod test { _include_uncommitted: bool, _allow_unknown_objects: bool, _merge_base: bool, - ) -> Result, ResolutionError> { + ) -> Result, ResolutionError> { Ok(self .0 .get(&(from.expect("expected base branch"), to)) diff --git a/crates/turborepo-lib/src/run/scope/mod.rs b/crates/turborepo-lib/src/run/scope/mod.rs index c009f61a1329e..7bed4b3b19f00 100644 --- a/crates/turborepo-lib/src/run/scope/mod.rs +++ b/crates/turborepo-lib/src/run/scope/mod.rs @@ -1,13 +1,16 @@ mod change_detector; -mod filter; +pub mod filter; mod simple_glob; pub mod target_selector; -use std::collections::HashSet; +use std::collections::HashMap; use filter::{FilterResolver, PackageInference}; use turbopath::AbsoluteSystemPath; -use turborepo_repository::package_graph::{PackageGraph, PackageName}; +use turborepo_repository::{ + change_mapper::PackageInclusionReason, + package_graph::{PackageGraph, PackageName}, +}; use turborepo_scm::SCM; pub use crate::run::scope::filter::ResolutionError; @@ -20,7 +23,7 @@ pub fn resolve_packages( pkg_graph: &PackageGraph, scm: &SCM, root_turbo_json: &TurboJson, -) -> Result<(HashSet, bool), ResolutionError> { +) -> Result<(HashMap, bool), ResolutionError> { let pkg_inference = opts.pkg_inference_root.as_ref().map(|pkg_inference_path| { PackageInference::calculate(turbo_root, pkg_inference_path, pkg_graph) }); diff --git a/crates/turborepo-repository/src/change_mapper/mod.rs b/crates/turborepo-repository/src/change_mapper/mod.rs index c4e0b14d5f4f7..5b861802e7f9c 100644 --- a/crates/turborepo-repository/src/change_mapper/mod.rs +++ b/crates/turborepo-repository/src/change_mapper/mod.rs @@ -1,16 +1,20 @@ //! Maps changed files to changed packages in a repository. //! Used for both `--filter` and for isolated builds. -use std::collections::HashSet; +use std::{ + collections::{HashMap, HashSet}, + hash::Hash, +}; pub use package::{ - DefaultPackageChangeMapper, GlobalDepsPackageChangeMapper, PackageChangeMapper, PackageMapping, + DefaultPackageChangeMapper, Error, GlobalDepsPackageChangeMapper, PackageChangeMapper, + PackageMapping, }; use tracing::debug; use turbopath::{AbsoluteSystemPath, AnchoredSystemPathBuf}; use wax::Program; -use crate::package_graph::{ChangedPackagesError, PackageGraph, WorkspacePackage}; +use crate::package_graph::{ChangedPackagesError, PackageGraph, PackageName, WorkspacePackage}; mod package; @@ -23,19 +27,63 @@ pub enum LockfileChange { WithContent(Vec), } -#[derive(Debug, PartialEq, Eq)] +#[derive(Debug, PartialEq, Eq, Hash, Clone)] +pub enum PackageInclusionReason { + /// All the packages are invalidated + All(AllPackageChangeReason), + /// Root task was run + RootTask { task: String }, + /// We conservatively assume that the root package is changed because + /// the lockfile changed. + ConservativeRootLockfileChanged, + /// The lockfile changed and caused this package to be invalidated + LockfileChanged, + /// A transitive dependency of this package changed + DependencyChanged { dependency: PackageName }, + /// A transitive dependent of this package changed + DependentChanged { dependent: PackageName }, + /// A file contained in this package changed + FileChanged { file: AnchoredSystemPathBuf }, + /// The filter selected a directory which contains this package + InFilteredDirectory { directory: AnchoredSystemPathBuf }, + /// Package is automatically included because of the filter (or lack + /// thereof) + IncludedByFilter { filters: Vec }, +} + +#[derive(Debug, PartialEq, Eq, Hash, Clone)] pub enum AllPackageChangeReason { - DefaultGlobalFileChanged, + GlobalDepsChanged { + file: AnchoredSystemPathBuf, + }, + /// A file like `package.json` or `turbo.json` changed + DefaultGlobalFileChanged { + file: AnchoredSystemPathBuf, + }, LockfileChangeDetectionFailed, LockfileChangedWithoutDetails, - RootInternalDepChanged, - NonPackageFileChanged, + RootInternalDepChanged { + root_internal_dep: PackageName, + }, + GitRefNotFound { + from_ref: Option, + to_ref: Option, + }, +} + +pub fn merge_changed_packages( + changed_packages: &mut HashMap, + new_changes: impl IntoIterator, +) { + for (package, reason) in new_changes { + changed_packages.entry(package).or_insert(reason); + } } #[derive(Debug, PartialEq, Eq)] pub enum PackageChanges { All(AllPackageChangeReason), - Some(HashSet), + Some(HashMap), } pub struct ChangeMapper<'a, PD> { @@ -58,10 +106,12 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { } } - fn default_global_file_changed(changed_files: &HashSet) -> bool { + fn default_global_file_changed( + changed_files: &HashSet, + ) -> Option<&AnchoredSystemPathBuf> { changed_files .iter() - .any(|f| DEFAULT_GLOBAL_DEPS.iter().any(|dep| *dep == f.as_str())) + .find(|f| DEFAULT_GLOBAL_DEPS.iter().any(|dep| *dep == f.as_str())) } pub fn changed_packages( @@ -69,10 +119,12 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { changed_files: HashSet, lockfile_change: Option, ) -> Result { - if Self::default_global_file_changed(&changed_files) { + if let Some(file) = Self::default_global_file_changed(&changed_files) { debug!("global file changed"); return Ok(PackageChanges::All( - AllPackageChangeReason::DefaultGlobalFileChanged, + AllPackageChangeReason::DefaultGlobalFileChanged { + file: file.to_owned(), + }, )); } @@ -86,7 +138,8 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { match lockfile_change { Some(LockfileChange::WithContent(content)) => { // if we run into issues, don't error, just assume all packages have changed - let Ok(lockfile_changes) = self.get_changed_packages_from_lockfile(content) + let Ok(lockfile_changes) = + self.get_changed_packages_from_lockfile(&content) else { debug!( "unable to determine lockfile changes, assuming all packages \ @@ -100,7 +153,12 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { "found {} packages changed by lockfile", lockfile_changes.len() ); - changed_pkgs.extend(lockfile_changes); + merge_changed_packages( + &mut changed_pkgs, + lockfile_changes + .into_iter() + .map(|pkg| (pkg, PackageInclusionReason::LockfileChanged)), + ); Ok(PackageChanges::Some(changed_pkgs)) } @@ -134,11 +192,11 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { files: impl Iterator, ) -> PackageChanges { let root_internal_deps = self.pkg_graph.root_internal_package_dependencies(); - let mut changed_packages = HashSet::new(); + let mut changed_packages = HashMap::new(); for file in files { match self.package_detector.detect_package(file) { // Internal root dependency changed so global hash has changed - PackageMapping::Package(pkg) if root_internal_deps.contains(&pkg) => { + PackageMapping::Package((pkg, _)) if root_internal_deps.contains(&pkg) => { debug!( "{} changes root internal dependency: \"{}\"\nshortest path from root: \ {:?}", @@ -146,15 +204,17 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { pkg.name, self.pkg_graph.root_internal_dependency_explanation(&pkg), ); - return PackageChanges::All(AllPackageChangeReason::RootInternalDepChanged); + return PackageChanges::All(AllPackageChangeReason::RootInternalDepChanged { + root_internal_dep: pkg.name.clone(), + }); } - PackageMapping::Package(pkg) => { + PackageMapping::Package((pkg, reason)) => { debug!("{} changes \"{}\"", file.to_string(), pkg.name); - changed_packages.insert(pkg); + changed_packages.insert(pkg, reason); } - PackageMapping::All => { + PackageMapping::All(reason) => { debug!("all packages changed due to {file:?}"); - return PackageChanges::All(AllPackageChangeReason::NonPackageFileChanged); + return PackageChanges::All(reason); } PackageMapping::None => {} } @@ -165,12 +225,12 @@ impl<'a, PD: PackageChangeMapper> ChangeMapper<'a, PD> { fn get_changed_packages_from_lockfile( &self, - lockfile_content: Vec, + lockfile_content: &[u8], ) -> Result, ChangeMapError> { let previous_lockfile = self .pkg_graph .package_manager() - .parse_lockfile(self.pkg_graph.root_package_json(), &lockfile_content)?; + .parse_lockfile(self.pkg_graph.root_package_json(), lockfile_content)?; let additional_packages = self .pkg_graph diff --git a/crates/turborepo-repository/src/change_mapper/package.rs b/crates/turborepo-repository/src/change_mapper/package.rs index c023b56ffe631..fa24e05d8e10e 100644 --- a/crates/turborepo-repository/src/change_mapper/package.rs +++ b/crates/turborepo-repository/src/change_mapper/package.rs @@ -1,16 +1,19 @@ use thiserror::Error; -use turbopath::AnchoredSystemPath; +use turbopath::{AnchoredSystemPath, AnchoredSystemPathBuf}; use wax::{BuildError, Program}; -use crate::package_graph::{PackageGraph, PackageName, WorkspacePackage}; +use crate::{ + change_mapper::{AllPackageChangeReason, PackageInclusionReason}, + package_graph::{PackageGraph, PackageName, WorkspacePackage}, +}; pub enum PackageMapping { /// We've hit a global file, so all packages have changed - All, + All(AllPackageChangeReason), /// This change is meaningless, no packages have changed None, /// This change has affected one package - Package(WorkspacePackage), + Package((WorkspacePackage, PackageInclusionReason)), } /// Maps a single file change to affected packages. This can be a single @@ -49,15 +52,22 @@ impl<'a> PackageChangeMapper for DefaultPackageChangeMapper<'a> { } if let Some(package_path) = entry.package_json_path.parent() { if Self::is_file_in_package(file, package_path) { - return PackageMapping::Package(WorkspacePackage { - name: name.clone(), - path: package_path.to_owned(), - }); + return PackageMapping::Package(( + WorkspacePackage { + name: name.clone(), + path: package_path.to_owned(), + }, + PackageInclusionReason::FileChanged { + file: file.to_owned(), + }, + )); } } } - PackageMapping::All + PackageMapping::All(AllPackageChangeReason::GlobalDepsChanged { + file: file.to_owned(), + }) } } @@ -94,18 +104,43 @@ impl<'a> GlobalDepsPackageChangeMapper<'a> { impl<'a> PackageChangeMapper for GlobalDepsPackageChangeMapper<'a> { fn detect_package(&self, path: &AnchoredSystemPath) -> PackageMapping { + // If we have a lockfile change, we consider this as a root package change, + // since there's a chance that the root package uses a workspace package + // dependency (this is cursed behavior but sadly possible). There's a chance + // that we can make this more accurate by checking which package + // manager, since not all package managers may permit root pulling from + // workspace package dependencies + if matches!( + path.as_str(), + "package.json" | "pnpm-lock.yaml" | "yarn.lock" + ) { + return PackageMapping::Package(( + WorkspacePackage { + name: PackageName::Root, + path: AnchoredSystemPathBuf::from_raw("").unwrap(), + }, + PackageInclusionReason::ConservativeRootLockfileChanged, + )); + } match DefaultPackageChangeMapper::new(self.pkg_dep_graph).detect_package(path) { // Since `DefaultPackageChangeMapper` is overly conservative, we can check here if // the path is actually in globalDeps and if not, return it as // PackageDetection::Package(WorkspacePackage::root()). - PackageMapping::All => { + PackageMapping::All(_) => { let cleaned_path = path.clean(); let in_global_deps = self.global_deps_matcher.is_match(cleaned_path.as_str()); if in_global_deps { - PackageMapping::All + PackageMapping::All(AllPackageChangeReason::GlobalDepsChanged { + file: path.to_owned(), + }) } else { - PackageMapping::Package(WorkspacePackage::root()) + PackageMapping::Package(( + WorkspacePackage::root(), + PackageInclusionReason::FileChanged { + file: path.to_owned(), + }, + )) } } result => result, @@ -120,7 +155,9 @@ mod tests { use super::{DefaultPackageChangeMapper, GlobalDepsPackageChangeMapper}; use crate::{ - change_mapper::{AllPackageChangeReason, ChangeMapper, PackageChanges}, + change_mapper::{ + AllPackageChangeReason, ChangeMapper, PackageChanges, PackageInclusionReason, + }, discovery, discovery::PackageDiscovery, package_graph::{PackageGraphBuilder, WorkspacePackage}, @@ -174,7 +211,9 @@ mod tests { // therefore must be conservative about changes assert_eq!( package_changes, - PackageChanges::All(AllPackageChangeReason::NonPackageFileChanged) + PackageChanges::All(AllPackageChangeReason::GlobalDepsChanged { + file: AnchoredSystemPathBuf::from_raw("README.md")?, + }) ); let turbo_package_detector = @@ -192,7 +231,16 @@ mod tests { // README.md is not one of them assert_eq!( package_changes, - PackageChanges::Some([WorkspacePackage::root()].into_iter().collect()) + PackageChanges::Some( + [( + WorkspacePackage::root(), + PackageInclusionReason::FileChanged { + file: AnchoredSystemPathBuf::from_raw("README.md")?, + } + )] + .into_iter() + .collect() + ) ); Ok(()) diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index fecfbae6f7bf8..0c6751a9dffc8 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -16,10 +16,10 @@ use turborepo_ci::Vendor; use crate::{Error, Git, SCM}; -#[derive(Debug)] -pub enum ChangedFiles { - All, - Some(HashSet), +#[derive(Debug, PartialEq, Eq)] +pub struct InvalidRange { + pub from_ref: Option, + pub to_ref: Option, } impl SCM { @@ -45,13 +45,17 @@ impl SCM { include_uncommitted: bool, allow_unknown_objects: bool, merge_base: bool, - ) -> Result { - fn unable_to_detect_range(error: impl std::error::Error) -> Result { + ) -> Result, InvalidRange>, Error> { + fn unable_to_detect_range( + error: impl std::error::Error, + from_ref: Option, + to_ref: Option, + ) -> Result, InvalidRange>, Error> { warn!( "unable to detect git range, assuming all files have changed: {}", error ); - Ok(ChangedFiles::All) + Ok(Err(InvalidRange { from_ref, to_ref })) } match self { Self::Git(git) => { @@ -62,17 +66,23 @@ impl SCM { include_uncommitted, merge_base, ) { - Ok(files) => Ok(ChangedFiles::Some(files)), + Ok(files) => Ok(Ok(files)), Err(ref error @ Error::Git(ref message, _)) if allow_unknown_objects && (message.contains("no merge base") || message.contains("bad object")) => { - unable_to_detect_range(error) - } - Err(Error::UnableToResolveRef) => { - unable_to_detect_range(Error::UnableToResolveRef) + unable_to_detect_range( + error, + from_commit.map(|c| c.to_string()), + to_commit.map(|c| c.to_string()), + ) } + Err(Error::UnableToResolveRef) => unable_to_detect_range( + Error::UnableToResolveRef, + from_commit.map(|c| c.to_string()), + to_commit.map(|c| c.to_string()), + ), Err(e) => Err(e), } } @@ -402,7 +412,7 @@ mod tests { use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, PathError}; use which::which; - use super::{previous_content, CIEnv, ChangedFiles}; + use super::{previous_content, CIEnv, InvalidRange}; use crate::{ git::{GitHubCommit, GitHubEvent}, Error, Git, SCM, @@ -438,7 +448,7 @@ mod tests { // Replicating the `--filter` behavior where we only do a merge base // if both ends of the git range are specified. let merge_base = to_commit.is_some(); - let ChangedFiles::Some(files) = scm.changed_files( + let Ok(files) = scm.changed_files( &turbo_root, from_commit, to_commit, @@ -1010,7 +1020,13 @@ mod tests { .changed_files(&root, None, Some("HEAD"), true, true, false) .unwrap(); - assert_matches!(actual, ChangedFiles::All); + assert_eq!( + actual, + Err(InvalidRange { + from_ref: None, + to_ref: Some("HEAD".to_string()), + }) + ); Ok(()) } diff --git a/packages/turbo-repository/rust/src/lib.rs b/packages/turbo-repository/rust/src/lib.rs index db3d043b676f0..626d0b38e6206 100644 --- a/packages/turbo-repository/rust/src/lib.rs +++ b/packages/turbo-repository/rust/src/lib.rs @@ -219,7 +219,7 @@ impl Workspace { path: info.package_path().to_owned(), }) .collect::>(), - PackageChanges::Some(packages) => packages.into_iter().collect(), + PackageChanges::Some(packages) => packages.into_iter().map(|(p, _)| p).collect(), }; let mut serializable_packages: Vec = packages diff --git a/turborepo-tests/integration/tests/affected.t b/turborepo-tests/integration/tests/affected.t index 50cb1f13bdbea..eed12e6dbe6ad 100644 --- a/turborepo-tests/integration/tests/affected.t +++ b/turborepo-tests/integration/tests/affected.t @@ -43,14 +43,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { items { name } } }" + $ ${TURBO} query "query { affectedPackages { items { name reason { __typename } } } }" WARNING query command is experimental and may change in the future { "data": { "affectedPackages": { "items": [ { - "name": "my-app" + "name": "my-app", + "reason": { + "__typename": "FileChanged" + } } ] } @@ -61,6 +64,36 @@ Do the same thing with the `query` command Remove the new file $ rm apps/my-app/new.js +Add a file in `util` + $ echo "hello world" > packages/util/new.js + +Validate that both `my-app` and `util` are affected + $ ${TURBO} query "query { affectedPackages { items { name reason { __typename } } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "affectedPackages": { + "items": [ + { + "name": "my-app", + "reason": { + "__typename": "DependencyChanged" + } + }, + { + "name": "util", + "reason": { + "__typename": "FileChanged" + } + } + ] + } + } + } + +Remove the new file + $ rm packages/util/new.js + Add field to `apps/my-app/package.json` $ jq '. += {"description": "foo"}' apps/my-app/package.json | tr -d '\r' > apps/my-app/package.json.new $ mv apps/my-app/package.json.new apps/my-app/package.json @@ -92,14 +125,17 @@ Do the same thing with the `ls` command Do the same thing with the `query` command - $ ${TURBO} query "query { affectedPackages { items { name } } }" + $ ${TURBO} query "query { affectedPackages { items { name reason { __typename } } } }" WARNING query command is experimental and may change in the future { "data": { "affectedPackages": { "items": [ { - "name": "my-app" + "name": "my-app", + "reason": { + "__typename": "FileChanged" + } } ] } diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t index 4c453bb7cfea5..45ff462ccf3b8 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t @@ -80,7 +80,32 @@ Only root and b should be rebuilt since only the deps for b had a version bump "//", "b" ] - + +This should be annotated as a `ConservativeRootLockfileChanged` because the root package may pull from the workspace packages' dependencies (even though this is cursed) + $ ${TURBO} query "query { affectedPackages(base: \"HEAD~1\") { items { name reason { __typename } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "affectedPackages": { + "items": [ + { + "name": "//", + "reason": { + "__typename": "ConservativeRootLockfileChanged" + } + }, + { + "name": "b", + "reason": { + "__typename": "LockfileChanged" + } + } + ] + } + } + } + + Bump of root workspace invalidates all packages $ patch pnpm-lock.yaml turbo-bump.patch patching file pnpm-lock.yaml diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t index c9dee24495ca1..00e687b46999f 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t @@ -80,7 +80,32 @@ Only root and b should be rebuilt since only the deps for b had a version bump "//", "b" ] - + +This should be annotated as a `ConservativeRootLockfileChanged` because the root package may pull from the workspace packages' dependencies (even though this is cursed) + $ ${TURBO} query "query { affectedPackages(base: \"HEAD~1\") { items { name reason { __typename } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "affectedPackages": { + "items": [ + { + "name": "//", + "reason": { + "__typename": "ConservativeRootLockfileChanged" + } + }, + { + "name": "b", + "reason": { + "__typename": "LockfileChanged" + } + } + ] + } + } + } + + Bump of root workspace invalidates all packages $ patch yarn.lock turbo-bump.patch patching file yarn.lock From 91e8168312fce6aea391659ff9cce5dd52f1c037 Mon Sep 17 00:00:00 2001 From: Roberto Molina <54558382+robertoms99@users.noreply.github.com> Date: Fri, 11 Oct 2024 07:44:23 -0500 Subject: [PATCH 057/218] Update package-configurations.mdx (#9232) --- docs/repo-docs/reference/package-configurations.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/reference/package-configurations.mdx b/docs/repo-docs/reference/package-configurations.mdx index 92d3ac91a11c4..c554aa24459c6 100644 --- a/docs/repo-docs/reference/package-configurations.mdx +++ b/docs/repo-docs/reference/package-configurations.mdx @@ -150,7 +150,7 @@ configuration. With a Package Configuration, the task configuration is merged instead. Consider the example of the monorepo with multiple Next.js apps and a Sveltekit -app again. Without a package-specific task, you might configure your root +app again. With a package-specific task, you might configure your root `turbo.json` like this: ```jsonc title="./turbo.json" From 8f1dabadcc963eb55d979936d62b6f0cbdb0f486 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 14:39:59 +0000 Subject: [PATCH 058/218] release(turborepo): 2.1.4-canary.3 (#9245) --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 3d956ffbd5c34..f784e27d8aace 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 99a281fdf5ec2..2ac5d494c2e42 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index b5cf9b17583be..8206d87775a5b 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 2650daddfab19..26f9166177fb5 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index a7bbb3d56d338..5b7c193111c11 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index d1d1c8f7bd8a0..0eb64b79a11e2 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 22f16a346cf12..0d4346babea48 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 1628111b09924..1fe50e23c617b 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 47bcbc520155f..e236735d99cf0 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.2", + "version": "2.1.4-canary.3", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.2", - "turbo-darwin-arm64": "2.1.4-canary.2", - "turbo-linux-64": "2.1.4-canary.2", - "turbo-linux-arm64": "2.1.4-canary.2", - "turbo-windows-64": "2.1.4-canary.2", - "turbo-windows-arm64": "2.1.4-canary.2" + "turbo-darwin-64": "2.1.4-canary.3", + "turbo-darwin-arm64": "2.1.4-canary.3", + "turbo-linux-64": "2.1.4-canary.3", + "turbo-linux-arm64": "2.1.4-canary.3", + "turbo-windows-64": "2.1.4-canary.3", + "turbo-windows-arm64": "2.1.4-canary.3" } } diff --git a/version.txt b/version.txt index a0e657a8b3dd6..52e00c20df14d 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.2 +2.1.4-canary.3 canary From a99773ee401c2fa86dd4793214c082fd20d12175 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 11 Oct 2024 14:23:30 -0400 Subject: [PATCH 059/218] feat(query): adding indirect and all dependencies for tasks (#9207) ### Description Adds indirect and all dependencies as fields on tasks. You can review commit by commit. ### Testing Instructions Adds tests along with a new fixture based off of `task-dependencies/complex` --- crates/turborepo-graph-utils/src/lib.rs | 32 ++- crates/turborepo-lib/src/engine/mod.rs | 33 +++ crates/turborepo-lib/src/query/package.rs | 1 + crates/turborepo-lib/src/query/task.rs | 155 ++++++++-- .../src/package_graph/mod.rs | 61 ++-- crates/turborepo-ui/src/wui/query.rs | 6 +- .../query/app-a/package.json | 11 + .../query/app-b/package.json | 11 + .../query/lib-a/package.json | 11 + .../query/lib-b/package.json | 11 + .../query/lib-c/package.json | 6 + .../query/lib-d/package.json | 7 + .../task_dependencies/query/package.json | 11 + .../task_dependencies/query/turbo.json | 24 ++ .../integration/tests/query/tasks.t | 264 +++++++++++++++++- .../tests/run-logging/log-order-stream.t | 2 +- 16 files changed, 570 insertions(+), 76 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/app-a/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/app-b/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/lib-a/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/lib-b/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/lib-c/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/lib-d/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/query/turbo.json diff --git a/crates/turborepo-graph-utils/src/lib.rs b/crates/turborepo-graph-utils/src/lib.rs index 94165801fc2cd..9609a208c1c7b 100644 --- a/crates/turborepo-graph-utils/src/lib.rs +++ b/crates/turborepo-graph-utils/src/lib.rs @@ -1,9 +1,12 @@ mod walker; -use std::fmt::Display; +use std::{collections::HashSet, fmt::Display, hash::Hash}; use itertools::Itertools; -use petgraph::prelude::*; +use petgraph::{ + prelude::*, + visit::{depth_first_search, Reversed}, +}; use thiserror::Error; #[derive(Debug, Error)] @@ -14,6 +17,31 @@ pub enum Error { SelfDependency(String), } +pub fn transitive_closure>( + graph: &Graph, + indices: I, + direction: petgraph::Direction, +) -> HashSet<&N> { + let mut visited = HashSet::new(); + + let visitor = |event| { + if let petgraph::visit::DfsEvent::Discover(n, _) = event { + visited.insert( + graph + .node_weight(n) + .expect("node index found during dfs doesn't exist"), + ); + } + }; + + match direction { + petgraph::Direction::Outgoing => depth_first_search(&graph, indices, visitor), + petgraph::Direction::Incoming => depth_first_search(Reversed(&graph), indices, visitor), + }; + + visited +} + pub fn validate_graph(graph: &Graph) -> Result<(), Error> { // This is equivalent to AcyclicGraph.Cycles from Go's dag library let cycles_lines = petgraph::algo::tarjan_scc(&graph) diff --git a/crates/turborepo-lib/src/engine/mod.rs b/crates/turborepo-lib/src/engine/mod.rs index f93eb7fa1c1fc..41ca79cc2f38c 100644 --- a/crates/turborepo-lib/src/engine/mod.rs +++ b/crates/turborepo-lib/src/engine/mod.rs @@ -31,6 +31,23 @@ impl From> for TaskNode { } } +#[derive(Debug, Error)] +pub enum Error { + #[error("expected a task node, got root")] + Root, +} + +impl TryFrom for TaskId<'static> { + type Error = Error; + + fn try_from(node: TaskNode) -> Result { + match node { + TaskNode::Root => Err(Error::Root), + TaskNode::Task(id) => Ok(id), + } + } +} + #[derive(Debug, Default)] pub struct Building; #[derive(Debug, Default)] @@ -332,6 +349,22 @@ impl Engine { self.neighbors(task_id, petgraph::Direction::Incoming) } + pub fn transitive_dependents(&self, task_id: &TaskId<'static>) -> HashSet<&TaskNode> { + turborepo_graph_utils::transitive_closure( + &self.task_graph, + self.task_lookup.get(task_id).cloned(), + petgraph::Direction::Incoming, + ) + } + + pub fn transitive_dependencies(&self, task_id: &TaskId<'static>) -> HashSet<&TaskNode> { + turborepo_graph_utils::transitive_closure( + &self.task_graph, + self.task_lookup.get(task_id).cloned(), + petgraph::Direction::Outgoing, + ) + } + fn neighbors( &self, task_id: &TaskId, diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index c9ff1c52bfee5..621f6385dfbe2 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -202,6 +202,7 @@ impl Package { async fn tasks(&self) -> Array { self.get_tasks() .into_iter() + .sorted_by(|a, b| a.0.cmp(&b.0)) .map(|(name, script)| RepositoryTask { name, package: self.clone(), diff --git a/crates/turborepo-lib/src/query/task.rs b/crates/turborepo-lib/src/query/task.rs index 98fe5c9aa7ac1..5fbe69c7c5219 100644 --- a/crates/turborepo-lib/src/query/task.rs +++ b/crates/turborepo-lib/src/query/task.rs @@ -1,10 +1,13 @@ +use std::sync::Arc; + use async_graphql::Object; +use itertools::Itertools; use turborepo_errors::Spanned; use crate::{ engine::TaskNode, query::{package::Package, Array}, - run::task_id::TaskId, + run::{task_id::TaskId, Run}, }; pub struct RepositoryTask { @@ -13,6 +16,22 @@ pub struct RepositoryTask { pub script: Option>, } +impl RepositoryTask { + pub fn new(task_id: &TaskId, run: &Arc) -> Self { + let package = Package { + name: task_id.package().into(), + run: run.clone(), + }; + let script = package.get_tasks().get(task_id.task()).cloned(); + + RepositoryTask { + name: task_id.task().to_string(), + package, + script, + } + } +} + #[Object] impl RepositoryTask { async fn name(&self) -> String { @@ -23,6 +42,10 @@ impl RepositoryTask { self.package.clone() } + async fn full_name(&self) -> String { + format!("{}#{}", self.package.name, self.name) + } + async fn script(&self) -> Option { self.script.as_ref().map(|script| script.value.to_string()) } @@ -37,14 +60,14 @@ impl RepositoryTask { .flatten() .filter_map(|task| match task { TaskNode::Root => None, - TaskNode::Task(task) => Some(RepositoryTask { - name: task.task().to_string(), - package: Package { - run: self.package.run.clone(), - name: task.package().to_string().into(), - }, - script: self.package.get_tasks().get(task.task()).cloned(), - }), + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) }) .collect() } @@ -60,14 +83,112 @@ impl RepositoryTask { .flatten() .filter_map(|task| match task { TaskNode::Root => None, - TaskNode::Task(task) => Some(RepositoryTask { - name: task.task().to_string(), - package: Package { - run: self.package.run.clone(), - name: task.package().to_string().into(), - }, - script: self.package.get_tasks().get(task.task()).cloned(), - }), + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) + }) + .collect() + } + + async fn indirect_dependents(&self) -> Array { + let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + let direct_dependents = self + .package + .run + .engine() + .dependencies(&task_id) + .unwrap_or_default(); + self.package + .run + .engine() + .transitive_dependents(&task_id) + .into_iter() + .filter(|node| !direct_dependents.contains(node)) + .filter_map(|node| match node { + TaskNode::Root => None, + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) + }) + .collect() + } + + async fn indirect_dependencies(&self) -> Array { + let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + let direct_dependencies = self + .package + .run + .engine() + .dependencies(&task_id) + .unwrap_or_default(); + self.package + .run + .engine() + .transitive_dependencies(&task_id) + .into_iter() + .filter(|node| !direct_dependencies.contains(node)) + .filter_map(|node| match node { + TaskNode::Root => None, + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) + }) + .collect() + } + + async fn all_dependents(&self) -> Array { + let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + self.package + .run + .engine() + .transitive_dependents(&task_id) + .into_iter() + .filter_map(|node| match node { + TaskNode::Root => None, + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) + }) + .collect() + } + + async fn all_dependencies(&self) -> Array { + let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + self.package + .run + .engine() + .transitive_dependencies(&task_id) + .into_iter() + .filter_map(|node| match node { + TaskNode::Root => None, + TaskNode::Task(task) if task == &task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + }) + .sorted_by(|a, b| { + a.package + .name + .cmp(&b.package.name) + .then_with(|| a.name.cmp(&b.name)) }) .collect() } diff --git a/crates/turborepo-repository/src/package_graph/mod.rs b/crates/turborepo-repository/src/package_graph/mod.rs index 6804dbc3b9ba6..2701c3ec26dfc 100644 --- a/crates/turborepo-repository/src/package_graph/mod.rs +++ b/crates/turborepo-repository/src/package_graph/mod.rs @@ -4,7 +4,6 @@ use std::{ }; use itertools::Itertools; -use petgraph::visit::{depth_first_search, Reversed}; use serde::Serialize; use tracing::debug; use turbopath::{ @@ -259,8 +258,11 @@ impl PackageGraph { /// dependencies(a) = {b, c} #[allow(dead_code)] pub fn dependencies<'a>(&'a self, node: &PackageNode) -> HashSet<&'a PackageNode> { - let mut dependencies = - self.transitive_closure_inner(Some(node), petgraph::Direction::Outgoing); + let mut dependencies = turborepo_graph_utils::transitive_closure( + &self.graph, + self.node_lookup.get(node).cloned(), + petgraph::Direction::Outgoing, + ); // Add in all root dependencies as they're implied dependencies for every // package in the graph. dependencies.extend(self.root_internal_dependencies()); @@ -281,7 +283,11 @@ impl PackageGraph { let mut dependents = if self.root_internal_dependencies().contains(node) { return self.graph.node_weights().collect(); } else { - self.transitive_closure_inner(Some(node), petgraph::Direction::Incoming) + turborepo_graph_utils::transitive_closure( + &self.graph, + self.node_lookup.get(node).cloned(), + petgraph::Direction::Incoming, + ) }; dependents.remove(node); dependents @@ -358,8 +364,11 @@ impl PackageGraph { fn root_internal_dependencies(&self) -> HashSet<&PackageNode> { // We cannot call self.dependencies(&PackageNode::Workspace(PackageName::Root)) // as it will infinitely recurse. - let mut dependencies = self.transitive_closure_inner( - Some(&PackageNode::Workspace(PackageName::Root)), + let mut dependencies = turborepo_graph_utils::transitive_closure( + &self.graph, + self.node_lookup + .get(&PackageNode::Workspace(PackageName::Root)) + .cloned(), petgraph::Direction::Outgoing, ); dependencies.remove(&PackageNode::Workspace(PackageName::Root)); @@ -375,39 +384,13 @@ impl PackageGraph { &'a self, nodes: I, ) -> HashSet<&'a PackageNode> { - self.transitive_closure_inner(nodes, petgraph::Direction::Outgoing) - } - - fn transitive_closure_inner<'a, 'b, I: IntoIterator>( - &'a self, - nodes: I, - direction: petgraph::Direction, - ) -> HashSet<&'a PackageNode> { - let indices = nodes - .into_iter() - .filter_map(|node| self.node_lookup.get(node)) - .copied(); - - let mut visited = HashSet::new(); - - let visitor = |event| { - if let petgraph::visit::DfsEvent::Discover(n, _) = event { - visited.insert( - self.graph - .node_weight(n) - .expect("node index found during dfs doesn't exist"), - ); - } - }; - - match direction { - petgraph::Direction::Outgoing => depth_first_search(&self.graph, indices, visitor), - petgraph::Direction::Incoming => { - depth_first_search(Reversed(&self.graph), indices, visitor) - } - }; - - visited + turborepo_graph_utils::transitive_closure( + &self.graph, + nodes + .into_iter() + .flat_map(|node| self.node_lookup.get(node).cloned()), + petgraph::Direction::Outgoing, + ) } pub fn transitive_external_dependencies<'a, I: IntoIterator>( diff --git a/crates/turborepo-ui/src/wui/query.rs b/crates/turborepo-ui/src/wui/query.rs index 35dd5ab2c87ad..004be8e278b86 100644 --- a/crates/turborepo-ui/src/wui/query.rs +++ b/crates/turborepo-ui/src/wui/query.rs @@ -7,7 +7,7 @@ use tokio::sync::Mutex; use crate::wui::subscriber::{TaskState, WebUIState}; #[derive(Debug, Clone, Serialize, SimpleObject)] -struct Task { +struct RunTask { name: String, state: TaskState, } @@ -18,13 +18,13 @@ struct CurrentRun<'a> { #[Object] impl<'a> CurrentRun<'a> { - async fn tasks(&self) -> Vec { + async fn tasks(&self) -> Vec { self.state .lock() .await .tasks() .iter() - .map(|(task, state)| Task { + .map(|(task, state)| RunTask { name: task.clone(), state: state.clone(), }) diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/app-a/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/app-a/package.json new file mode 100644 index 0000000000000..29db5866948a8 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/app-a/package.json @@ -0,0 +1,11 @@ +{ + "name": "app-a", + "scripts": { + "build": "echo 'build app-a'", + "test": "echo 'test app-a'", + "custom": "echo 'custom app-a'" + }, + "dependencies": { + "lib-a": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/app-b/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/app-b/package.json new file mode 100644 index 0000000000000..5b28eec0f17f7 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/app-b/package.json @@ -0,0 +1,11 @@ +{ + "name": "app-b", + "scripts": { + "build": "echo 'build app-b'", + "test": "echo 'test app-b'" + }, + "dependencies": { + "lib-b": "*", + "lib-c": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/lib-a/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-a/package.json new file mode 100644 index 0000000000000..d8a445ff0411c --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-a/package.json @@ -0,0 +1,11 @@ +{ + "name": "lib-a", + "scripts": { + "build0": "echo 'build0 lib-a'", + "build": "echo 'build lib-a'", + "test": "echo 'test lib-a'" + }, + "dependencies": { + "lib-b": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/lib-b/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-b/package.json new file mode 100644 index 0000000000000..4be75196dbed1 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-b/package.json @@ -0,0 +1,11 @@ +{ + "name": "lib-b", + "scripts": { + "build0": "echo 'build0 lib-b'", + "build": "echo 'build lib-b'", + "test": "echo 'test lib-b'" + }, + "dependencies": { + "lib-d": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/lib-c/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-c/package.json new file mode 100644 index 0000000000000..d52930425c5d3 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-c/package.json @@ -0,0 +1,6 @@ +{ + "name": "lib-c", + "scripts": { + "build": "echo 'build lib-c'" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/lib-d/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-d/package.json new file mode 100644 index 0000000000000..94d86aa0d4a5b --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/lib-d/package.json @@ -0,0 +1,7 @@ +{ + "name": "lib-d", + "scripts": { + "build": "echo 'build lib-d'", + "test": "echo 'test lib-d'" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/package.json b/turborepo-tests/integration/fixtures/task_dependencies/query/package.json new file mode 100644 index 0000000000000..ea0a7089dc497 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/package.json @@ -0,0 +1,11 @@ +{ + "name": "unknown-dependency", + "workspaces": [ + "app-a", + "app-b", + "lib-a", + "lib-b", + "lib-c", + "lib-d" + ] +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/query/turbo.json b/turborepo-tests/integration/fixtures/task_dependencies/query/turbo.json new file mode 100644 index 0000000000000..c9a734f93e341 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/query/turbo.json @@ -0,0 +1,24 @@ +{ + "tasks": { + "build0": { + "dependsOn": ["^build0", "prepare"] + }, + "test": { + "dependsOn": ["^build0", "prepare"] + }, + "custom": {}, + "prepare": {}, + "side-quest": { + "dependsOn": ["prepare"] + }, + + "build1": { + "dependsOn": ["^build1"] + }, + + "build2": { + "dependsOn": ["app-a#custom"] + } + + } +} diff --git a/turborepo-tests/integration/tests/query/tasks.t b/turborepo-tests/integration/tests/query/tasks.t index c36a481760485..9482705d903ee 100644 --- a/turborepo-tests/integration/tests/query/tasks.t +++ b/turborepo-tests/integration/tests/query/tasks.t @@ -1,7 +1,7 @@ Setup - $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh task_dependencies/topological + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh task_dependencies/query - $ ${TURBO} query "query { package(name: \"my-app\") { tasks { items { name } } } }" | jq + $ ${TURBO} query "query { package(name: \"app-a\") { tasks { items { name } } } }" | jq WARNING query command is experimental and may change in the future { "data": { @@ -10,6 +10,12 @@ Setup "items": [ { "name": "build" + }, + { + "name": "custom" + }, + { + "name": "test" } ] } @@ -17,7 +23,7 @@ Setup } } - $ ${TURBO} query "query { package(name: \"my-app\") { tasks { items { name directDependencies { items { name package { name } } } } } } }" | jq + $ ${TURBO} query "query { package(name: \"app-a\") { tasks { items { fullName directDependencies { items { fullName } } } } } }" WARNING query command is experimental and may change in the future { "data": { @@ -25,14 +31,26 @@ Setup "tasks": { "items": [ { - "name": "build", + "fullName": "app-a#build", + "directDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#custom", + "directDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#test", "directDependencies": { "items": [ { - "name": "build", - "package": { - "name": "util" - } + "fullName": "app-a#prepare" + }, + { + "fullName": "lib-a#build0" } ] } @@ -43,7 +61,7 @@ Setup } } - $ ${TURBO} query "query { package(name: \"util\") { tasks { items { name directDependents { items { name package { name } } } } } } }" | jq + $ ${TURBO} query "query { package(name: \"lib-b\") { tasks { items { fullName directDependents { items { fullName } } } } } }" | jq WARNING query command is experimental and may change in the future { "data": { @@ -51,14 +69,232 @@ Setup "tasks": { "items": [ { - "name": "build", + "fullName": "lib-b#build", "directDependents": { + "items": [] + } + }, + { + "fullName": "lib-b#build0", + "directDependents": { + "items": [ + { + "fullName": "app-b#build0" + }, + { + "fullName": "app-b#test" + }, + { + "fullName": "lib-a#build0" + }, + { + "fullName": "lib-a#test" + } + ] + } + }, + { + "fullName": "lib-b#test", + "directDependents": { + "items": [] + } + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"lib-b\") { tasks { items { fullName allDependents { items { fullName } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "fullName": "lib-b#build", + "allDependents": { + "items": [] + } + }, + { + "fullName": "lib-b#build0", + "allDependents": { + "items": [ + { + "fullName": "app-a#build0" + }, + { + "fullName": "app-a#test" + }, + { + "fullName": "app-b#build0" + }, + { + "fullName": "app-b#test" + }, + { + "fullName": "lib-a#build0" + }, + { + "fullName": "lib-a#test" + } + ] + } + }, + { + "fullName": "lib-b#test", + "allDependents": { + "items": [] + } + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"app-a\") { tasks { items { fullName allDependencies { items { fullName } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "fullName": "app-a#build", + "allDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#custom", + "allDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#test", + "allDependencies": { "items": [ { - "name": "build", - "package": { - "name": "my-app" - } + "fullName": "app-a#prepare" + }, + { + "fullName": "lib-a#build0" + }, + { + "fullName": "lib-a#prepare" + }, + { + "fullName": "lib-b#build0" + }, + { + "fullName": "lib-b#prepare" + }, + { + "fullName": "lib-d#build0" + }, + { + "fullName": "lib-d#prepare" + } + ] + } + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"lib-b\") { tasks { items { fullName indirectDependents { items { fullName } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "fullName": "lib-b#build", + "indirectDependents": { + "items": [] + } + }, + { + "fullName": "lib-b#build0", + "indirectDependents": { + "items": [ + { + "fullName": "app-a#build0" + }, + { + "fullName": "app-a#test" + }, + { + "fullName": "app-b#build0" + }, + { + "fullName": "app-b#test" + }, + { + "fullName": "lib-a#build0" + }, + { + "fullName": "lib-a#test" + } + ] + } + }, + { + "fullName": "lib-b#test", + "indirectDependents": { + "items": [] + } + } + ] + } + } + } + } + + $ ${TURBO} query "query { package(name: \"app-a\") { tasks { items { fullName indirectDependencies { items { fullName } } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "tasks": { + "items": [ + { + "fullName": "app-a#build", + "indirectDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#custom", + "indirectDependencies": { + "items": [] + } + }, + { + "fullName": "app-a#test", + "indirectDependencies": { + "items": [ + { + "fullName": "lib-a#prepare" + }, + { + "fullName": "lib-b#build0" + }, + { + "fullName": "lib-b#prepare" + }, + { + "fullName": "lib-d#build0" + }, + { + "fullName": "lib-d#prepare" } ] } diff --git a/turborepo-tests/integration/tests/run-logging/log-order-stream.t b/turborepo-tests/integration/tests/run-logging/log-order-stream.t index dc75291adcf65..c3d3ef9b9a1cc 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-stream.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-stream.t @@ -71,7 +71,7 @@ The flag wins over the env var .* (re) .* (re) (my-app|util):build: (re) - my-app:build: building + (my-app:build): building (re) util:build: building my-app:build: done util:build: completed From 961ce000605f521ee0e984228cf8a162e1e1907c Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 11 Oct 2024 15:00:35 -0400 Subject: [PATCH 060/218] feat(query): recover from trace errors (#9244) ### Description Even if we get trace errors, return the files we have successfully traced ### Testing Instructions Added a test for a file with an invalid import --- crates/turbo-trace/src/lib.rs | 2 +- crates/turbo-trace/src/tracer.rs | 6 +- crates/turborepo-lib/src/query/file.rs | 88 +++++++++++++++---- crates/turborepo-lib/src/query/mod.rs | 2 + .../fixtures/turbo_trace/invalid.ts | 2 + .../integration/tests/turbo-trace.t | 75 ++++++++++++---- 6 files changed, 136 insertions(+), 39 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/invalid.ts diff --git a/crates/turbo-trace/src/lib.rs b/crates/turbo-trace/src/lib.rs index b8f162159e1ba..c37074f75fb8d 100644 --- a/crates/turbo-trace/src/lib.rs +++ b/crates/turbo-trace/src/lib.rs @@ -2,4 +2,4 @@ mod import_finder; mod tracer; -pub use tracer::{TraceError, Tracer}; +pub use tracer::{TraceError, TraceResult, Tracer}; diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 2d236fc9ef482..bab720d6261de 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -48,18 +48,18 @@ impl Tracer { cwd: AbsoluteSystemPathBuf, files: Vec, ts_config: Option, - ) -> Result { + ) -> Self { let ts_config = ts_config.map(|ts_config| AbsoluteSystemPathBuf::from_unknown(&cwd, ts_config)); let seen = HashSet::new(); - Ok(Self { + Self { files, seen, ts_config, source_map: Rc::new(SourceMap::default()), - }) + } } pub fn trace(mut self) -> TraceResult { diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 717f4d136fd94..b24e28508a8a0 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -1,11 +1,14 @@ use std::sync::Arc; -use async_graphql::Object; +use async_graphql::{Object, SimpleObject}; use itertools::Itertools; use turbo_trace::Tracer; use turbopath::AbsoluteSystemPathBuf; -use crate::{query::Error, run::Run}; +use crate::{ + query::{Array, Error}, + run::Run, +}; pub struct File { run: Arc, @@ -18,6 +21,66 @@ impl File { } } +#[derive(SimpleObject, Debug)] +pub struct TraceError { + message: String, + path: Option, + start: Option, + end: Option, +} + +impl From for TraceError { + fn from(error: turbo_trace::TraceError) -> Self { + let message = error.to_string(); + match error { + turbo_trace::TraceError::FileNotFound(file) => TraceError { + message, + path: Some(file.to_string()), + start: None, + end: None, + }, + turbo_trace::TraceError::PathEncoding(_) => TraceError { + message, + path: None, + start: None, + end: None, + }, + turbo_trace::TraceError::RootFile(path) => TraceError { + message, + path: Some(path.to_string()), + start: None, + end: None, + }, + turbo_trace::TraceError::Resolve { span, text } => TraceError { + message, + path: Some(text.name().to_string()), + start: Some(span.offset()), + end: Some(span.offset() + span.len()), + }, + } + } +} + +#[derive(SimpleObject)] +struct TraceResult { + files: Array, + errors: Array, +} + +impl TraceResult { + fn new(result: turbo_trace::TraceResult, run: Arc) -> Self { + Self { + files: result + .files + .into_iter() + .sorted() + .map(|path| File::new(run.clone(), path)) + .collect(), + errors: result.errors.into_iter().map(|e| e.into()).collect(), + } + } +} + #[Object] impl File { async fn contents(&self) -> Result { @@ -37,25 +100,16 @@ impl File { Ok(self.path.to_string()) } - async fn dependencies(&self) -> Result, Error> { + async fn dependencies(&self) -> TraceResult { let tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], None, - )?; - - let result = tracer.trace(); - if !result.errors.is_empty() { - return Err(Error::Trace(result.errors)); - } + ); - Ok(result - .files - .into_iter() - // Filter out the file we're looking at - .filter(|file| file != &self.path) - .map(|path| File::new(self.run.clone(), path)) - .sorted_by(|a, b| a.path.cmp(&b.path)) - .collect()) + let mut result = tracer.trace(); + // Remove the file itself from the result + result.files.remove(&self.path); + TraceResult::new(result, self.run.clone()) } } diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index 91338601cc586..fa61ea618014e 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -65,6 +65,8 @@ impl RepositoryQuery { #[graphql(concrete(name = "RepositoryTasks", params(RepositoryTask)))] #[graphql(concrete(name = "Packages", params(Package)))] #[graphql(concrete(name = "ChangedPackages", params(ChangedPackage)))] +#[graphql(concrete(name = "Files", params(File)))] +#[graphql(concrete(name = "TraceErrors", params(file::TraceError)))] pub struct Array { items: Vec, length: usize, diff --git a/turborepo-tests/integration/fixtures/turbo_trace/invalid.ts b/turborepo-tests/integration/fixtures/turbo_trace/invalid.ts new file mode 100644 index 0000000000000..0dd0d047bddac --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/invalid.ts @@ -0,0 +1,2 @@ +import foo from "./non-existent-file.js"; +import { Button } from "./button.tsx"; diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t index c40b5a913eece..24569c5c761c9 100644 --- a/turborepo-tests/integration/tests/turbo-trace.t +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -11,49 +11,88 @@ Setup } } - $ ${TURBO} query "query { file(path: \"main.ts\") { path, dependencies { path } } }" + $ ${TURBO} query "query { file(path: \"main.ts\") { path, dependencies { files { items { path } } } } }" WARNING query command is experimental and may change in the future { "data": { "file": { "path": "main.ts", - "dependencies": [ - { - "path": "button.tsx" - }, - { - "path": "foo.js" - }, - { - "path": "node_modules(\/|\\\\)repeat-string(\/|\\\\)index.js" (re) + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules(\/|\\\\)repeat-string(\/|\\\\)index.js" (re) + } + ] } - ] + } } } } - $ ${TURBO} query "query { file(path: \"button.tsx\") { path, dependencies { path } } }" + $ ${TURBO} query "query { file(path: \"button.tsx\") { path, dependencies { files { items { path } } } } }" WARNING query command is experimental and may change in the future { "data": { "file": { "path": "button.tsx", - "dependencies": [] + "dependencies": { + "files": { + "items": [] + } + } } } } - $ ${TURBO} query "query { file(path: \"circular.ts\") { path, dependencies { path } } }" + $ ${TURBO} query "query { file(path: \"circular.ts\") { path dependencies { files { items { path } } } } }" WARNING query command is experimental and may change in the future { "data": { "file": { "path": "circular.ts", - "dependencies": [ - { - "path": "circular2.ts" + "dependencies": { + "files": { + "items": [ + { + "path": "circular2.ts" + } + ] + } + } + } + } + } + +Trace file with invalid import + $ ${TURBO} query "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "invalid.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + } + ] + }, + "errors": { + "items": [ + { + "message": "failed to resolve import" + } + ] } - ] + } } } } From b65589e15e9961a3ca6aa86ff5cdd9940148fcd7 Mon Sep 17 00:00:00 2001 From: Cosmin Nicolaescu Date: Tue, 15 Oct 2024 01:34:06 -1000 Subject: [PATCH 061/218] chore: add USER as one of the supported process.env variables to passthru (#9235) ### Description Enable `USER` to be PassThruEnv. --- crates/turborepo-lib/src/task_hash.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/crates/turborepo-lib/src/task_hash.rs b/crates/turborepo-lib/src/task_hash.rs index 24ce129b0c3f8..9bedc108e5129 100644 --- a/crates/turborepo-lib/src/task_hash.rs +++ b/crates/turborepo-lib/src/task_hash.rs @@ -466,6 +466,7 @@ impl<'a> TaskHasher<'a> { let default_env_var_pass_through_map = self.env_at_execution_start.from_wildcards(&[ "HOME", + "USER", "TZ", "LANG", "SHELL", From 1b9410f033e7008bd66dabaeb33ee4c6b4cf5bad Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:13:40 -0400 Subject: [PATCH 062/218] release(turborepo): 2.1.4-canary.4 (#9256) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index f784e27d8aace..45bfa8b0ecbc6 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 2ac5d494c2e42..ff8587733c2cd 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 8206d87775a5b..8433dc8a53b16 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 26f9166177fb5..e5547059f239b 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 5b7c193111c11..c0694767b9edd 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 0eb64b79a11e2..0c948bdd2ad8e 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 0d4346babea48..d78fe66dad428 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 1fe50e23c617b..06611c46c0510 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index e236735d99cf0..9c00b7a63fa57 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.3", + "version": "2.1.4-canary.4", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.3", - "turbo-darwin-arm64": "2.1.4-canary.3", - "turbo-linux-64": "2.1.4-canary.3", - "turbo-linux-arm64": "2.1.4-canary.3", - "turbo-windows-64": "2.1.4-canary.3", - "turbo-windows-arm64": "2.1.4-canary.3" + "turbo-darwin-64": "2.1.4-canary.4", + "turbo-darwin-arm64": "2.1.4-canary.4", + "turbo-linux-64": "2.1.4-canary.4", + "turbo-linux-arm64": "2.1.4-canary.4", + "turbo-windows-64": "2.1.4-canary.4", + "turbo-windows-arm64": "2.1.4-canary.4" } } diff --git a/version.txt b/version.txt index 52e00c20df14d..e65464a14a1a2 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.3 +2.1.4-canary.4 canary From f5323be0fdeb66d7311c1fbcebf567627df95fe0 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 15 Oct 2024 13:42:26 -0400 Subject: [PATCH 063/218] chore(shim): add unit tests for shim parsing (#9248) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description I was looking at hoisting daemon detection up to shim level so we could avoid reloading a filtered tracing layer. This ended up not being the solution I wanted, but I figured I should add the tests that I added. ⚠️ This PR does have an extremely minor behavior change. See [this comment](https://github.com/vercel/turborepo/pull/9248#discussion_r1797232220) ### Testing Instructions Unit tests pass --- crates/turborepo-lib/src/shim/parser.rs | 207 +++++++++++++++++++++++- 1 file changed, 202 insertions(+), 5 deletions(-) diff --git a/crates/turborepo-lib/src/shim/parser.rs b/crates/turborepo-lib/src/shim/parser.rs index 376121a521997..15bfaaba330a6 100644 --- a/crates/turborepo-lib/src/shim/parser.rs +++ b/crates/turborepo-lib/src/shim/parser.rs @@ -41,7 +41,7 @@ pub struct MultipleCwd { flag4: Option, } -#[derive(Debug)] +#[derive(Debug, PartialEq, Eq)] pub struct ShimArgs { pub cwd: AbsoluteSystemPathBuf, pub invocation_dir: AbsoluteSystemPathBuf, @@ -56,6 +56,14 @@ pub struct ShimArgs { impl ShimArgs { pub fn parse() -> Result { + let invocation_dir = AbsoluteSystemPathBuf::cwd()?; + Self::parse_from_iter(invocation_dir, std::env::args()) + } + + fn parse_from_iter( + invocation_dir: AbsoluteSystemPathBuf, + args: impl Iterator, + ) -> Result { let mut cwd_flag_idx = None; let mut cwds = Vec::new(); let mut skip_infer = false; @@ -68,7 +76,7 @@ impl ShimArgs { let mut color = false; let mut no_color = false; - let args = env::args().skip(1); + let args = args.skip(1); for (idx, arg) in args.enumerate() { // We've seen a `--` and therefore we do no parsing if is_forwarded_args { @@ -100,7 +108,10 @@ impl ShimArgs { } else if cwd_flag_idx.is_some() { // We've seen a `--cwd` and therefore add this to the cwds list along with // the index of the `--cwd` (*not* the value) - cwds.push((AbsoluteSystemPathBuf::from_cwd(arg)?, idx - 1)); + cwds.push(( + AbsoluteSystemPathBuf::from_unknown(&invocation_dir, arg), + idx - 1, + )); cwd_flag_idx = None; } else if arg == "--cwd" { // If we see a `--cwd` we expect the next arg to be a path. @@ -108,7 +119,10 @@ impl ShimArgs { } else if let Some(cwd_arg) = arg.strip_prefix("--cwd=") { // In the case where `--cwd` is passed as `--cwd=./path/to/foo`, that // entire chunk is a single arg, so we need to split it up. - cwds.push((AbsoluteSystemPathBuf::from_cwd(cwd_arg)?, idx)); + cwds.push(( + AbsoluteSystemPathBuf::from_unknown(&invocation_dir, cwd_arg), + idx, + )); } else if arg == "--color" { color = true; } else if arg == "--no-color" { @@ -146,7 +160,6 @@ impl ShimArgs { }))); } - let invocation_dir = AbsoluteSystemPathBuf::cwd()?; let cwd = cwds .pop() .map(|(cwd, _)| cwd) @@ -258,7 +271,9 @@ impl ShimArgs { #[cfg(test)] mod test { use miette::SourceSpan; + use pretty_assertions::assert_eq; use test_case::test_case; + use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use super::ShimArgs; @@ -275,4 +290,186 @@ mod test { ShimArgs::get_spans_in_args_string(arg_indices, args.into_iter()); assert_eq!(indices_in_args_string, expected_indices_in_arg_string); } + + #[derive(Default)] + struct ExpectedArgs { + pub skip_infer: bool, + pub verbosity: usize, + pub force_update_check: bool, + pub remaining_turbo_args: &'static [&'static str], + pub forwarded_args: &'static [&'static str], + pub color: bool, + pub no_color: bool, + pub relative_cwd: Option<&'static [&'static str]>, + } + + impl ExpectedArgs { + fn build(self, invocation_dir: &AbsoluteSystemPath) -> ShimArgs { + let Self { + skip_infer, + verbosity, + force_update_check, + remaining_turbo_args, + forwarded_args, + color, + no_color, + relative_cwd, + } = self; + ShimArgs { + cwd: relative_cwd.map_or_else( + || invocation_dir.to_owned(), + |components| invocation_dir.join_components(components), + ), + invocation_dir: invocation_dir.to_owned(), + remaining_turbo_args: remaining_turbo_args + .iter() + .map(|arg| arg.to_string()) + .collect(), + forwarded_args: forwarded_args.iter().map(|arg| arg.to_string()).collect(), + skip_infer, + verbosity, + force_update_check, + color, + no_color, + } + } + } + + #[test_case( + &["turbo"], + ExpectedArgs { + ..Default::default() + } + ; "no args" + )] + #[test_case( + &["turbo", "-v"], + ExpectedArgs { + verbosity: 1, + remaining_turbo_args: &["-v"], + ..Default::default() + } + ; "verbosity count 1" + )] + #[test_case( + &["turbo", "-vv"], + ExpectedArgs { + verbosity: 2, + remaining_turbo_args: &["-vv"], + ..Default::default() + } + ; "verbosity count 2" + )] + #[test_case( + &["turbo", "--verbosity", "3"], + ExpectedArgs { + verbosity: 3, + remaining_turbo_args: &["--verbosity", "3"], + ..Default::default() + } + ; "verbosity flag 3" + )] + #[test_case( + &["turbo", "--verbosity=3"], + ExpectedArgs { + verbosity: 3, + remaining_turbo_args: &["--verbosity=3"], + ..Default::default() + } + ; "verbosity equals 3" + )] + #[test_case( + &["turbo", "--verbosity=3", "-vv"], + ExpectedArgs { + verbosity: 2, + remaining_turbo_args: &["--verbosity=3", "-vv"], + ..Default::default() + } + ; "multi verbosity" + )] + #[test_case( + &["turbo", "--color"], + ExpectedArgs { + color: true, + ..Default::default() + } + ; "color" + )] + #[test_case( + &["turbo", "--no-color"], + ExpectedArgs { + no_color: true, + ..Default::default() + } + ; "no color" + )] + #[test_case( + &["turbo", "--no-color", "--color"], + ExpectedArgs { + color: true, + no_color: true, + ..Default::default() + } + ; "confused color" + )] + #[test_case( + &["turbo", "--skip-infer"], + ExpectedArgs { + skip_infer: true, + ..Default::default() + } + ; "skip infer" + )] + #[test_case( + &["turbo", "--", "another", "--skip-infer"], + ExpectedArgs { + forwarded_args: &["another", "--skip-infer"], + ..Default::default() + } + ; "forwarded args" + )] + #[test_case( + &["turbo", "--check-for-update"], + ExpectedArgs { + force_update_check: true, + ..Default::default() + } + ; "check for update" + )] + #[test_case( + &["turbo", "--check-for-update=true"], + ExpectedArgs { + force_update_check: false, + remaining_turbo_args: &["--check-for-update=true"], + ..Default::default() + } + ; "check for update value" + )] + #[test_case( + &["turbo", "--cwd", "another-dir"], + ExpectedArgs { + relative_cwd: Some(&["another-dir"]), + ..Default::default() + } + ; "cwd value" + )] + #[test_case( + &["turbo", "--cwd=another-dir"], + ExpectedArgs { + relative_cwd: Some(&["another-dir"]), + ..Default::default() + } + ; "cwd equals" + )] + fn test_shim_parsing(args: &[&str], expected: ExpectedArgs) { + let cwd = AbsoluteSystemPathBuf::new(if cfg!(windows) { + "Z:\\some\\dir" + } else { + "/some/dir" + }) + .unwrap(); + let expected = expected.build(&cwd); + let actual = ShimArgs::parse_from_iter(cwd, args.iter().map(|s| s.to_string())).unwrap(); + assert_eq!(expected, actual); + } } From 6cbce7a202ca601cb833ed45ae707af85f6b2e84 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 15 Oct 2024 13:53:56 -0400 Subject: [PATCH 064/218] feat(watch): add interruptible tasks (#9228) ### Description Adds the ability to annotate persistent tasks as interruptible. Fixes #8164. NOTE: This does create change in behavior for watch mode where new changes will *stop* the current executing and start a new one. Previously, we waited for runs to finish, but now that persistent tasks can be interrupted, we can't do that since persistent tasks don't finish. ### Testing Instructions Added tests for ensuring that `interruptible` requires `persistent`, but otherwise you'll have to try this out manually since it's watch mode. --- crates/turborepo-lib/src/config/mod.rs | 7 +++ crates/turborepo-lib/src/engine/mod.rs | 47 +++++++-------- crates/turborepo-lib/src/run/mod.rs | 12 ++-- crates/turborepo-lib/src/run/summary/task.rs | 4 ++ crates/turborepo-lib/src/run/watch.rs | 58 ++++++++++++++----- crates/turborepo-lib/src/task_graph/mod.rs | 9 ++- crates/turborepo-lib/src/turbo_json/mod.rs | 23 +++++++- crates/turborepo-lib/src/turbo_json/parser.rs | 2 + .../interruptible-but-not-persistent.json | 19 ++++++ .../integration/tests/bad-turbo-json.t | 16 ++++- .../integration/tests/dry-json/monorepo.t | 2 + .../tests/dry-json/single-package-no-config.t | 1 + .../tests/dry-json/single-package-with-deps.t | 2 + .../tests/dry-json/single-package.t | 1 + .../integration/tests/run-summary/error.t | 1 + .../tests/run/single-package/dry-run.t | 2 +- .../tests/run/single-package/no-config.t | 2 +- .../run/single-package/with-deps-dry-run.t | 4 +- .../workspace-configs/override-values-deps.t | 2 + 19 files changed, 161 insertions(+), 53 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/turbo-configs/interruptible-but-not-persistent.json diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index 0e1ae724956e8..c7ad713ef48ed 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -91,6 +91,13 @@ pub enum Error { #[label("package task found here")] span: Option, }, + #[error("interruptible tasks must be persistent")] + InterruptibleButNotPersistent { + #[source_code] + text: NamedSource, + #[label("`interruptible` set here")] + span: Option, + }, #[error(transparent)] #[diagnostic(transparent)] InvalidEnvPrefix(Box), diff --git a/crates/turborepo-lib/src/engine/mod.rs b/crates/turborepo-lib/src/engine/mod.rs index 41ca79cc2f38c..81176f6e5c16b 100644 --- a/crates/turborepo-lib/src/engine/mod.rs +++ b/crates/turborepo-lib/src/engine/mod.rs @@ -62,7 +62,7 @@ pub struct Engine { task_definitions: HashMap, TaskDefinition>, task_locations: HashMap, Spanned<()>>, package_tasks: HashMap>, - pub(crate) has_persistent_tasks: bool, + pub(crate) has_non_interruptible_tasks: bool, } impl Engine { @@ -77,7 +77,7 @@ impl Engine { task_definitions: HashMap::default(), task_locations: HashMap::default(), package_tasks: HashMap::default(), - has_persistent_tasks: false, + has_non_interruptible_tasks: false, } } @@ -104,8 +104,8 @@ impl Engine { task_id: TaskId<'static>, definition: TaskDefinition, ) -> Option { - if definition.persistent { - self.has_persistent_tasks = true; + if definition.persistent && !definition.interruptible { + self.has_non_interruptible_tasks = true; } self.task_definitions.insert(task_id, definition) } @@ -132,7 +132,7 @@ impl Engine { task_definitions, task_locations, package_tasks, - has_persistent_tasks: has_persistent_task, + has_non_interruptible_tasks, .. } = self; Engine { @@ -143,7 +143,7 @@ impl Engine { task_definitions, task_locations, package_tasks, - has_persistent_tasks: has_persistent_task, + has_non_interruptible_tasks, } } } @@ -186,7 +186,7 @@ impl Engine { .get(task) .expect("task should have definition"); - if def.persistent { + if def.persistent && !def.interruptible { return None; } } @@ -225,13 +225,13 @@ impl Engine { task_locations: self.task_locations.clone(), package_tasks: self.package_tasks.clone(), // We've filtered out persistent tasks - has_persistent_tasks: false, + has_non_interruptible_tasks: false, } } - /// Creates an `Engine` with persistent tasks filtered out. Used in watch - /// mode to re-run the non-persistent tasks. - pub fn create_engine_without_persistent_tasks(&self) -> Engine { + /// Creates an `Engine` with only interruptible tasks, i.e. non-persistent + /// tasks and persistent tasks that are allowed to be interrupted + pub fn create_engine_for_interruptible_tasks(&self) -> Engine { let new_graph = self.task_graph.filter_map( |node_idx, node| match &self.task_graph[node_idx] { TaskNode::Task(task) => { @@ -240,7 +240,7 @@ impl Engine { .get(task) .expect("task should have definition"); - if !def.persistent { + if !def.persistent || def.interruptible { Some(node.clone()) } else { None @@ -277,12 +277,13 @@ impl Engine { task_definitions: self.task_definitions.clone(), task_locations: self.task_locations.clone(), package_tasks: self.package_tasks.clone(), - has_persistent_tasks: false, + has_non_interruptible_tasks: false, } } - /// Creates an `Engine` that is only the persistent tasks. - pub fn create_engine_for_persistent_tasks(&self) -> Engine { + /// Creates an `Engine` that is only the tasks that are not interruptible, + /// i.e. persistent and not allowed to be restarted + pub fn create_engine_for_non_interruptible_tasks(&self) -> Engine { let mut new_graph = self.task_graph.filter_map( |node_idx, node| match &self.task_graph[node_idx] { TaskNode::Task(task) => { @@ -291,7 +292,7 @@ impl Engine { .get(task) .expect("task should have definition"); - if def.persistent { + if def.persistent && !def.interruptible { Some(node.clone()) } else { None @@ -337,7 +338,7 @@ impl Engine { task_definitions: self.task_definitions.clone(), task_locations: self.task_locations.clone(), package_tasks: self.package_tasks.clone(), - has_persistent_tasks: true, + has_non_interruptible_tasks: true, } } @@ -744,20 +745,20 @@ mod test { let engine = engine.seal(); - let persistent_tasks_engine = engine.create_engine_for_persistent_tasks(); - for node in persistent_tasks_engine.tasks() { + let non_interruptible_tasks_engine = engine.create_engine_for_non_interruptible_tasks(); + for node in non_interruptible_tasks_engine.tasks() { if let TaskNode::Task(task_id) = node { - let def = persistent_tasks_engine + let def = non_interruptible_tasks_engine .task_definition(task_id) .expect("task should have definition"); assert!(def.persistent, "task should be persistent"); } } - let non_persistent_tasks_engine = engine.create_engine_without_persistent_tasks(); - for node in non_persistent_tasks_engine.tasks() { + let interruptible_tasks_engine = engine.create_engine_for_interruptible_tasks(); + for node in interruptible_tasks_engine.tasks() { if let TaskNode::Task(task_id) = node { - let def = non_persistent_tasks_engine + let def = interruptible_tasks_engine .task_definition(task_id) .expect("task should have definition"); assert!(!def.persistent, "task should not be persistent"); diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 0f3a90676c67d..201e5377a0101 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -81,8 +81,8 @@ type WuiResult = UIResult; type TuiResult = UIResult; impl Run { - fn has_persistent_tasks(&self) -> bool { - self.engine.has_persistent_tasks + fn has_non_interruptible_tasks(&self) -> bool { + self.engine.has_non_interruptible_tasks } fn print_run_prelude(&self) { let targets_list = self.opts.run_opts.tasks.join(", "); @@ -136,17 +136,17 @@ impl Run { &self.root_turbo_json } - pub fn create_run_for_persistent_tasks(&self) -> Self { + pub fn create_run_for_non_interruptible_tasks(&self) -> Self { let mut new_run = self.clone(); - let new_engine = new_run.engine.create_engine_for_persistent_tasks(); + let new_engine = new_run.engine.create_engine_for_non_interruptible_tasks(); new_run.engine = Arc::new(new_engine); new_run } - pub fn create_run_without_persistent_tasks(&self) -> Self { + pub fn create_run_for_interruptible_tasks(&self) -> Self { let mut new_run = self.clone(); - let new_engine = new_run.engine.create_engine_without_persistent_tasks(); + let new_engine = new_run.engine.create_engine_for_interruptible_tasks(); new_run.engine = Arc::new(new_engine); new_run diff --git a/crates/turborepo-lib/src/run/summary/task.rs b/crates/turborepo-lib/src/run/summary/task.rs index 2f87ba15aef62..1f5b8f31ec33c 100644 --- a/crates/turborepo-lib/src/run/summary/task.rs +++ b/crates/turborepo-lib/src/run/summary/task.rs @@ -101,6 +101,7 @@ pub struct TaskSummaryTaskDefinition { inputs: Vec, output_logs: OutputLogsMode, persistent: bool, + interruptible: bool, env: Vec, pass_through_env: Option>, interactive: bool, @@ -280,6 +281,7 @@ impl From for TaskSummaryTaskDefinition { mut inputs, output_logs, persistent, + interruptible, interactive, env_mode, } = value; @@ -313,6 +315,7 @@ impl From for TaskSummaryTaskDefinition { inputs, output_logs, persistent, + interruptible, interactive, env, pass_through_env, @@ -372,6 +375,7 @@ mod test { "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "interactive": false, "env": [], "passThroughEnv": null, diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index bc5f18f3621f5..5a721abc49ed9 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -48,7 +48,7 @@ impl ChangedPackages { pub struct WatchClient { run: Arc, watched_packages: HashSet, - persistent_tasks_handle: Option, + persistent_tasks_handle: Option, connector: DaemonConnector, base: CommandBase, telemetry: CommandEventBuilder, @@ -57,7 +57,7 @@ pub struct WatchClient { ui_handle: Option>>, } -struct PersistentRunHandle { +struct RunHandle { stopper: run::RunStopper, run_task: JoinHandle>, } @@ -189,6 +189,7 @@ impl WatchClient { }; let run_fut = async { + let mut run_handle: Option = None; loop { notify_run.notified().await; let some_changed_packages = { @@ -197,8 +198,17 @@ impl WatchClient { (!changed_packages_guard.is_empty()) .then(|| std::mem::take(changed_packages_guard.deref_mut())) }; + if let Some(changed_packages) = some_changed_packages { - self.execute_run(changed_packages).await?; + // Clean up currently running tasks + if let Some(RunHandle { stopper, run_task }) = run_handle.take() { + // Shut down the tasks for the run + stopper.stop().await; + // Run should exit shortly after we stop all child tasks, wait for it to + // finish to ensure all messages are flushed. + let _ = run_task.await; + } + run_handle = Some(self.execute_run(changed_packages).await?); } } }; @@ -251,7 +261,14 @@ impl WatchClient { Ok(()) } - async fn execute_run(&mut self, changed_packages: ChangedPackages) -> Result { + /// Executes a run with the given changed packages. Splits the run into two + /// parts: + /// 1. The persistent tasks that are not allowed to be interrupted + /// 2. The non-persistent tasks and the persistent tasks that are allowed to + /// be interrupted + /// + /// Returns a handle to the task running (2) + async fn execute_run(&mut self, changed_packages: ChangedPackages) -> Result { // Should we recover here? trace!("handling run with changed packages: {changed_packages:?}"); match changed_packages { @@ -303,7 +320,11 @@ impl WatchClient { .map_err(|err| Error::UISend(err.to_string()))?; } - Ok(run.run(self.ui_sender.clone(), true).await?) + let ui_sender = self.ui_sender.clone(); + Ok(RunHandle { + stopper: run.stopper(), + run_task: tokio::spawn(async move { run.run(ui_sender, true).await }), + }) } ChangedPackages::All => { let mut args = self.base.args().clone(); @@ -339,9 +360,7 @@ impl WatchClient { self.watched_packages = self.run.get_relevant_packages(); // Clean up currently running persistent tasks - if let Some(PersistentRunHandle { stopper, run_task }) = - self.persistent_tasks_handle.take() - { + if let Some(RunHandle { stopper, run_task }) = self.persistent_tasks_handle.take() { // Shut down the tasks for the run stopper.stop().await; // Run should exit shortly after we stop all child tasks, wait for it to finish @@ -355,16 +374,16 @@ impl WatchClient { .map_err(|err| Error::UISend(err.to_string()))?; } - if self.run.has_persistent_tasks() { + if self.run.has_non_interruptible_tasks() { debug_assert!( self.persistent_tasks_handle.is_none(), "persistent handle should be empty before creating a new one" ); - let persistent_run = self.run.create_run_for_persistent_tasks(); + let persistent_run = self.run.create_run_for_non_interruptible_tasks(); let ui_sender = self.ui_sender.clone(); // If we have persistent tasks, we run them on a separate thread // since persistent tasks don't finish - self.persistent_tasks_handle = Some(PersistentRunHandle { + self.persistent_tasks_handle = Some(RunHandle { stopper: persistent_run.stopper(), run_task: tokio::spawn( async move { persistent_run.run(ui_sender, true).await }, @@ -372,10 +391,21 @@ impl WatchClient { }); // But we still run the regular tasks blocking - let non_persistent_run = self.run.create_run_without_persistent_tasks(); - Ok(non_persistent_run.run(self.ui_sender.clone(), true).await?) + let non_persistent_run = self.run.create_run_for_interruptible_tasks(); + let ui_sender = self.ui_sender.clone(); + Ok(RunHandle { + stopper: non_persistent_run.stopper(), + run_task: tokio::spawn(async move { + non_persistent_run.run(ui_sender, true).await + }), + }) } else { - Ok(self.run.run(self.ui_sender.clone(), true).await?) + let ui_sender = self.ui_sender.clone(); + let run = self.run.clone(); + Ok(RunHandle { + stopper: run.stopper(), + run_task: tokio::spawn(async move { run.run(ui_sender, true).await }), + }) } } } diff --git a/crates/turborepo-lib/src/task_graph/mod.rs b/crates/turborepo-lib/src/task_graph/mod.rs index 378d5f78c9d74..e8c9afc4e8b8b 100644 --- a/crates/turborepo-lib/src/task_graph/mod.rs +++ b/crates/turborepo-lib/src/task_graph/mod.rs @@ -72,10 +72,14 @@ pub struct TaskDefinition { pub(crate) output_logs: OutputLogsMode, // Persistent indicates whether the Task is expected to exit or not - // Tasks marked Persistent do not exit (e.g. --watch mode or dev servers) + // Tasks marked Persistent do not exit (e.g. watch mode or dev servers) pub persistent: bool, - // Interactive marks that a task can have it's stdin written to. + // Indicates whether a persistent task can be interrupted in the middle of execution + // by watch mode + pub interruptible: bool, + + // Interactive marks that a task can have its stdin written to. // Tasks that take stdin input cannot be cached as their outputs may depend on the // input. pub interactive: bool, @@ -96,6 +100,7 @@ impl Default for TaskDefinition { inputs: Default::default(), output_logs: Default::default(), persistent: Default::default(), + interruptible: Default::default(), interactive: Default::default(), env_mode: Default::default(), } diff --git a/crates/turborepo-lib/src/turbo_json/mod.rs b/crates/turborepo-lib/src/turbo_json/mod.rs index 471990a7ec066..5c14cbaf6be11 100644 --- a/crates/turborepo-lib/src/turbo_json/mod.rs +++ b/crates/turborepo-lib/src/turbo_json/mod.rs @@ -219,6 +219,8 @@ pub struct RawTaskDefinition { #[serde(skip_serializing_if = "Option::is_none")] persistent: Option>, #[serde(skip_serializing_if = "Option::is_none")] + interruptible: Option>, + #[serde(skip_serializing_if = "Option::is_none")] outputs: Option>>, #[serde(skip_serializing_if = "Option::is_none")] output_logs: Option>, @@ -257,6 +259,7 @@ impl RawTaskDefinition { set_field!(self, other, inputs); set_field!(self, other, output_logs); set_field!(self, other, persistent); + set_field!(self, other, interruptible); set_field!(self, other, env); set_field!(self, other, pass_through_env); set_field!(self, other, interactive); @@ -330,6 +333,13 @@ impl TryFrom for TaskDefinition { } } + let persistent = *raw_task.persistent.unwrap_or_default(); + let interruptible = raw_task.interruptible.unwrap_or_default(); + if *interruptible && !persistent { + let (span, text) = interruptible.span_and_text("turbo.json"); + return Err(Error::InterruptibleButNotPersistent { span, text }); + } + let mut env_var_dependencies = HashSet::new(); let mut topological_dependencies: Vec> = Vec::new(); let mut task_dependencies: Vec> = Vec::new(); @@ -407,7 +417,8 @@ impl TryFrom for TaskDefinition { inputs, pass_through_env, output_logs: *raw_task.output_logs.unwrap_or_default(), - persistent: *raw_task.persistent.unwrap_or_default(), + persistent, + interruptible: *interruptible, interactive, env_mode: raw_task.env_mode, }) @@ -720,7 +731,8 @@ mod tests { "inputs": ["package/a/src/**"], "outputLogs": "full", "persistent": true, - "interactive": true + "interactive": true, + "interruptible": true }"#, RawTaskDefinition { depends_on: Some(Spanned::new(vec![Spanned::::new("cli#build".into()).with_range(26..37)]).with_range(25..38)), @@ -732,6 +744,7 @@ mod tests { output_logs: Some(Spanned::new(OutputLogsMode::Full).with_range(246..252)), persistent: Some(Spanned::new(true).with_range(278..282)), interactive: Some(Spanned::new(true).with_range(309..313)), + interruptible: Some(Spanned::new(true).with_range(342..346)), env_mode: None, }, TaskDefinition { @@ -748,6 +761,7 @@ mod tests { topological_dependencies: vec![], persistent: true, interactive: true, + interruptible: true, env_mode: None, } ; "full" @@ -761,7 +775,8 @@ mod tests { "cache": false, "inputs": ["package\\a\\src\\**"], "outputLogs": "full", - "persistent": true + "persistent": true, + "interruptible": true }"#, RawTaskDefinition { depends_on: Some(Spanned::new(vec![Spanned::::new("cli#build".into()).with_range(30..41)]).with_range(29..42)), @@ -772,6 +787,7 @@ mod tests { inputs: Some(vec![Spanned::::new("package\\a\\src\\**".into()).with_range(227..248)]), output_logs: Some(Spanned::new(OutputLogsMode::Full).with_range(279..285)), persistent: Some(Spanned::new(true).with_range(315..319)), + interruptible: Some(Spanned::new(true).with_range(352..356)), interactive: None, env_mode: None, }, @@ -788,6 +804,7 @@ mod tests { task_dependencies: vec![Spanned::>::new("cli#build".into()).with_range(30..41)], topological_dependencies: vec![], persistent: true, + interruptible: true, interactive: false, env_mode: None, } diff --git a/crates/turborepo-lib/src/turbo_json/parser.rs b/crates/turborepo-lib/src/turbo_json/parser.rs index bb16c723f95e0..d209a22d17553 100644 --- a/crates/turborepo-lib/src/turbo_json/parser.rs +++ b/crates/turborepo-lib/src/turbo_json/parser.rs @@ -146,6 +146,7 @@ impl WithMetadata for RawTaskDefinition { self.inputs.add_text(text.clone()); self.pass_through_env.add_text(text.clone()); self.persistent.add_text(text.clone()); + self.interruptible.add_text(text.clone()); self.outputs.add_text(text.clone()); self.output_logs.add_text(text.clone()); self.interactive.add_text(text); @@ -160,6 +161,7 @@ impl WithMetadata for RawTaskDefinition { self.inputs.add_path(path.clone()); self.pass_through_env.add_path(path.clone()); self.persistent.add_path(path.clone()); + self.interruptible.add_path(path.clone()); self.outputs.add_path(path.clone()); self.output_logs.add_path(path.clone()); self.interactive.add_path(path); diff --git a/turborepo-tests/integration/fixtures/turbo-configs/interruptible-but-not-persistent.json b/turborepo-tests/integration/fixtures/turbo-configs/interruptible-but-not-persistent.json new file mode 100644 index 0000000000000..95f978df227d7 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo-configs/interruptible-but-not-persistent.json @@ -0,0 +1,19 @@ +{ + "$schema": "https://turbo.build/schema.json", + "globalDependencies": [ + "foo.txt" + ], + "globalEnv": [ + "SOME_ENV_VAR" + ], + "tasks": { + "build": { + "env": [ + "NODE_ENV", + "$FOOBAR" + ], + "interruptible": true, + "outputs": [] + } + } +} diff --git a/turborepo-tests/integration/tests/bad-turbo-json.t b/turborepo-tests/integration/tests/bad-turbo-json.t index 770495a1a62a2..62e2406aa4672 100644 --- a/turborepo-tests/integration/tests/bad-turbo-json.t +++ b/turborepo-tests/integration/tests/bad-turbo-json.t @@ -68,7 +68,21 @@ Run in single package mode even though we have a task with package syntax `---- +Use our custom turbo config which has interruptible: true + $ . ${TESTDIR}/../../helpers/replace_turbo_json.sh $(pwd) "interruptible-but-not-persistent.json" +Build should fail + $ ${TURBO} run build + x interruptible tasks must be persistent + ,-[turbo.json:14:1] + 14 | ], + 15 | "interruptible": true, + : ^^|^ + : `-- `interruptible` set here + 16 | "outputs": [] + `---- + + [1] Use our custom turbo config with syntax errors $ . ${TESTDIR}/../../helpers/replace_turbo_json.sh $(pwd) "syntax-error.json" @@ -101,4 +115,4 @@ Run build with syntax errors in turbo.json 15 | `---- - [1] + [1] \ No newline at end of file diff --git a/turborepo-tests/integration/tests/dry-json/monorepo.t b/turborepo-tests/integration/tests/dry-json/monorepo.t index 75379b04e98d1..feac7894ea193 100644 --- a/turborepo-tests/integration/tests/dry-json/monorepo.t +++ b/turborepo-tests/integration/tests/dry-json/monorepo.t @@ -87,6 +87,7 @@ Setup ], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false @@ -137,6 +138,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [ "NODE_ENV" ], diff --git a/turborepo-tests/integration/tests/dry-json/single-package-no-config.t b/turborepo-tests/integration/tests/dry-json/single-package-no-config.t index 248ffc91f51c8..1759791bab4a4 100644 --- a/turborepo-tests/integration/tests/dry-json/single-package-no-config.t +++ b/turborepo-tests/integration/tests/dry-json/single-package-no-config.t @@ -62,6 +62,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false diff --git a/turborepo-tests/integration/tests/dry-json/single-package-with-deps.t b/turborepo-tests/integration/tests/dry-json/single-package-with-deps.t index 2f73cdf82e72f..4c161d4aac18f 100644 --- a/turborepo-tests/integration/tests/dry-json/single-package-with-deps.t +++ b/turborepo-tests/integration/tests/dry-json/single-package-with-deps.t @@ -68,6 +68,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false @@ -121,6 +122,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false diff --git a/turborepo-tests/integration/tests/dry-json/single-package.t b/turborepo-tests/integration/tests/dry-json/single-package.t index 452725a66603a..3da76f1623a9b 100644 --- a/turborepo-tests/integration/tests/dry-json/single-package.t +++ b/turborepo-tests/integration/tests/dry-json/single-package.t @@ -66,6 +66,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false diff --git a/turborepo-tests/integration/tests/run-summary/error.t b/turborepo-tests/integration/tests/run-summary/error.t index 9867b44d74141..2e1ea5d8dbc41 100644 --- a/turborepo-tests/integration/tests/run-summary/error.t +++ b/turborepo-tests/integration/tests/run-summary/error.t @@ -59,6 +59,7 @@ Validate that we got a full task summary for the failed task with an error in .e "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false diff --git a/turborepo-tests/integration/tests/run/single-package/dry-run.t b/turborepo-tests/integration/tests/run/single-package/dry-run.t index 2efd36a1e454c..65ec73ee4c4b1 100644 --- a/turborepo-tests/integration/tests/run/single-package/dry-run.t +++ b/turborepo-tests/integration/tests/run/single-package/dry-run.t @@ -32,5 +32,5 @@ Check Inferred Env Vars Values = Passed Through Env Vars = Passed Through Env Vars Values = - Resolved Task Definition = {"outputs":["foo.txt"],"cache":true,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"env":[],"passThroughEnv":null,"interactive":false} + Resolved Task Definition = {"outputs":["foo.txt"],"cache":true,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"interruptible":false,"env":[],"passThroughEnv":null,"interactive":false} Framework = diff --git a/turborepo-tests/integration/tests/run/single-package/no-config.t b/turborepo-tests/integration/tests/run/single-package/no-config.t index a50efedaa974c..54f6cc8717807 100644 --- a/turborepo-tests/integration/tests/run/single-package/no-config.t +++ b/turborepo-tests/integration/tests/run/single-package/no-config.t @@ -34,7 +34,7 @@ Check Inferred Env Vars Values = Passed Through Env Vars = Passed Through Env Vars Values = - Resolved Task Definition = {"outputs":[],"cache":false,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"env":[],"passThroughEnv":null,"interactive":false} + Resolved Task Definition = {"outputs":[],"cache":false,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"interruptible":false,"env":[],"passThroughEnv":null,"interactive":false} Framework = $ ${TURBO} run build --graph diff --git a/turborepo-tests/integration/tests/run/single-package/with-deps-dry-run.t b/turborepo-tests/integration/tests/run/single-package/with-deps-dry-run.t index 3c5e504cfd537..d0516fa39d795 100644 --- a/turborepo-tests/integration/tests/run/single-package/with-deps-dry-run.t +++ b/turborepo-tests/integration/tests/run/single-package/with-deps-dry-run.t @@ -32,7 +32,7 @@ Check Inferred Env Vars Values = Passed Through Env Vars = Passed Through Env Vars Values = - Resolved Task Definition = {"outputs":["foo.txt"],"cache":true,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"env":[],"passThroughEnv":null,"interactive":false} + Resolved Task Definition = {"outputs":["foo.txt"],"cache":true,"dependsOn":[],"inputs":[],"outputLogs":"full","persistent":false,"interruptible":false,"env":[],"passThroughEnv":null,"interactive":false} Framework = test Task = test\s* (re) @@ -50,5 +50,5 @@ Check Inferred Env Vars Values = Passed Through Env Vars = Passed Through Env Vars Values = - Resolved Task Definition = {"outputs":[],"cache":true,"dependsOn":["build"],"inputs":[],"outputLogs":"full","persistent":false,"env":[],"passThroughEnv":null,"interactive":false} + Resolved Task Definition = {"outputs":[],"cache":true,"dependsOn":["build"],"inputs":[],"outputLogs":"full","persistent":false,"interruptible":false,"env":[],"passThroughEnv":null,"interactive":false} Framework = diff --git a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t index 0ffa9b4019fc8..8d2cdaaf542ce 100644 --- a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t @@ -33,6 +33,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false @@ -48,6 +49,7 @@ Setup "inputs": [], "outputLogs": "full", "persistent": false, + "interruptible": false, "env": [], "passThroughEnv": null, "interactive": false From b5fefe83bb028192f130e218c1eb9de64ee8b59c Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Tue, 15 Oct 2024 14:26:37 -0400 Subject: [PATCH 065/218] feat(turbo): add platform env support (#9122) ### Description Support reading what variables are set by a user in CI, and diffing those with those in the execution environment. ## Testing ``` TURBO_SYSTEM_ENV=THIS_NEAT_ENV,SUPER_COOL,TEST THIS_NEAT_ENV=1 ./target/debug/turbo build --skip-infer --force --cwd examples/basic ``` --- Cargo.lock | 2 + crates/turborepo-env/Cargo.toml | 2 + crates/turborepo-env/src/lib.rs | 2 + crates/turborepo-env/src/platform.rs | 104 ++++++++++++++++++ crates/turborepo-lib/src/run/cache.rs | 4 + .../turborepo-lib/src/task_graph/visitor.rs | 60 +++++++++- crates/turborepo-ui/src/lib.rs | 22 ++++ 7 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 crates/turborepo-env/src/platform.rs diff --git a/Cargo.lock b/Cargo.lock index c4dbcc163caa5..b0731cdba1357 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6218,6 +6218,8 @@ dependencies = [ "sha2", "test-case", "thiserror", + "turborepo-ci", + "turborepo-ui", ] [[package]] diff --git a/crates/turborepo-env/Cargo.toml b/crates/turborepo-env/Cargo.toml index 507d716b1fd06..4751cb2141f7b 100644 --- a/crates/turborepo-env/Cargo.toml +++ b/crates/turborepo-env/Cargo.toml @@ -15,6 +15,8 @@ regex = { workspace = true } serde = { workspace = true } sha2 = { workspace = true } thiserror = { workspace = true } +turborepo-ci = { workspace = true } +turborepo-ui = { workspace = true } [dev-dependencies] test-case = { workspace = true } diff --git a/crates/turborepo-env/src/lib.rs b/crates/turborepo-env/src/lib.rs index 399f0b5261565..938aff039f252 100644 --- a/crates/turborepo-env/src/lib.rs +++ b/crates/turborepo-env/src/lib.rs @@ -11,6 +11,8 @@ use serde::Serialize; use sha2::{Digest, Sha256}; use thiserror::Error; +pub mod platform; + const DEFAULT_ENV_VARS: [&str; 1] = ["VERCEL_ANALYTICS_ID"]; #[derive(Clone, Debug, Error)] diff --git a/crates/turborepo-env/src/platform.rs b/crates/turborepo-env/src/platform.rs new file mode 100644 index 0000000000000..7ab91d9eb01a3 --- /dev/null +++ b/crates/turborepo-env/src/platform.rs @@ -0,0 +1,104 @@ +use turborepo_ci::Vendor; +use turborepo_ui::{ceprint, ceprintln, color, ColorConfig, BOLD, GREY, UNDERLINE, YELLOW}; + +use crate::EnvironmentVariableMap; + +pub struct PlatformEnv { + env_keys: Vec, +} + +impl Default for PlatformEnv { + fn default() -> Self { + Self::new() + } +} + +const TURBO_PLATFORM_ENV_KEY: &str = "TURBO_PLATFORM_ENV"; +const TURBO_PLATFORM_ENV_DISABLED_KEY: &str = "TURBO_PLATFORM_ENV_DISABLED"; + +impl PlatformEnv { + pub fn new() -> Self { + let env_keys = std::env::var(TURBO_PLATFORM_ENV_KEY) + .unwrap_or_default() + .split(',') + .filter(|s| !s.is_empty()) + .map(|s| s.to_string()) + .collect(); + + Self { env_keys } + } + + pub fn disabled() -> bool { + let turbo_platform_env_disabled = + std::env::var(TURBO_PLATFORM_ENV_DISABLED_KEY).unwrap_or_default(); + turbo_platform_env_disabled == "1" || turbo_platform_env_disabled == "true" + } + + pub fn validate(&self, execution_env: &EnvironmentVariableMap) -> Vec { + if Self::disabled() { + return vec![]; + } + + self.diff(execution_env) + } + + pub fn diff(&self, execution_env: &EnvironmentVariableMap) -> Vec { + self.env_keys + .iter() + .filter(|key| !execution_env.contains_key(*key)) + .map(|s| s.to_string()) + .collect() + } + + pub fn output_header(is_strict: bool, color_config: ColorConfig) { + let ci = Vendor::get_constant().unwrap_or("unknown"); + + let strict_message = if is_strict { + "These variables WILL NOT be available to your application and may cause your build to \ + fail." + } else { + "These variables WILL NOT be considered in your cache key and could cause inadvertent \ + cache hits." + }; + + match ci { + "VERCEL" => { + ceprintln!( + color_config, + BOLD, + "The following environment variables are set on your Vercel project, but \ + missing from \"turbo.json\". {}", + strict_message + ); + } + _ => { + ceprintln!( + color_config, + BOLD, + "The following environment variables are missing from \"turbo.json\". {}", + strict_message + ); + } + } + + let docs = color!( + color_config, + UNDERLINE, + "https://turbo.build/repo/docs/platform-environment-variables" + ); + ceprintln!(color_config, GREY, "Learn more at {docs}\n"); + } + + pub fn output_for_task( + missing: Vec, + task_id_for_display: &str, + color_config: ColorConfig, + ) { + ceprintln!(color_config, YELLOW, "{}", task_id_for_display); + for key in missing { + ceprint!(color_config, GREY, " - "); + ceprint!(color_config, GREY, "{}\n", key); + } + eprintln!(); + } +} diff --git a/crates/turborepo-lib/src/run/cache.rs b/crates/turborepo-lib/src/run/cache.rs index cfb7483ea9291..02c9eedce5b9b 100644 --- a/crates/turborepo-lib/src/run/cache.rs +++ b/crates/turborepo-lib/src/run/cache.rs @@ -161,6 +161,10 @@ impl TaskCache { self.task_output_logs } + pub fn is_caching_disabled(&self) -> bool { + self.caching_disabled + } + /// Will read log file and write to output a line at a time pub fn replay_log_file(&self, output: &mut impl CacheOutput) -> Result<(), Error> { if self.log_file_path.exists() { diff --git a/crates/turborepo-lib/src/task_graph/visitor.rs b/crates/turborepo-lib/src/task_graph/visitor.rs index f2313e4ad9584..af40e2ce5ff0c 100644 --- a/crates/turborepo-lib/src/task_graph/visitor.rs +++ b/crates/turborepo-lib/src/task_graph/visitor.rs @@ -13,10 +13,10 @@ use itertools::Itertools; use miette::{Diagnostic, NamedSource, SourceSpan}; use regex::Regex; use tokio::sync::{mpsc, oneshot}; -use tracing::{debug, error, Instrument, Span}; +use tracing::{debug, error, warn, Instrument, Span}; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPath}; use turborepo_ci::{Vendor, VendorBehavior}; -use turborepo_env::EnvironmentVariableMap; +use turborepo_env::{platform::PlatformEnv, EnvironmentVariableMap}; use turborepo_repository::{ package_graph::{PackageGraph, PackageName, ROOT_PKG_NAME}, package_manager::PackageManager, @@ -68,6 +68,7 @@ pub struct Visitor<'a> { color_config: ColorConfig, is_watch: bool, ui_sender: Option, + warnings: Arc>>, } #[derive(Debug, thiserror::Error, Diagnostic)] @@ -153,6 +154,7 @@ impl<'a> Visitor<'a> { global_env, ui_sender, is_watch, + warnings: Default::default(), } } @@ -293,6 +295,7 @@ impl<'a> Visitor<'a> { } else { TaskOutput::Direct(self.output_client(&info, vendor_behavior)) }; + let tracker = self.run_tracker.track_task(info.clone().into_owned()); let spaces_client = self.run_tracker.spaces_task_client(); let parent_span = Span::current(); @@ -381,6 +384,35 @@ impl<'a> Visitor<'a> { let global_hash_summary = GlobalHashSummary::try_from(global_hash_inputs)?; + // output any warnings that we collected while running tasks + if let Ok(warnings) = self.warnings.lock() { + if !warnings.is_empty() { + eprintln!(); + warn!("finished with warnings"); + eprintln!(); + + let has_missing_platform_env: bool = warnings + .iter() + .any(|warning| !warning.missing_platform_env.is_empty()); + if has_missing_platform_env { + PlatformEnv::output_header( + global_env_mode == EnvMode::Strict, + self.color_config, + ); + + for warning in warnings.iter() { + if !warning.missing_platform_env.is_empty() { + PlatformEnv::output_for_task( + warning.missing_platform_env.clone(), + &warning.task_id, + self.color_config, + ) + } + } + } + } + } + Ok(self .run_tracker .finish( @@ -564,6 +596,13 @@ fn turbo_regex() -> &'static Regex { RE.get_or_init(|| Regex::new(r"(?:^|\s)turbo(?:$|\s)").unwrap()) } +// Warning that comes from the execution of the task +#[derive(Debug, Clone)] +pub struct TaskWarning { + task_id: String, + missing_platform_env: Vec, +} + // Error that comes from the execution of the task #[derive(Debug, thiserror::Error, Clone)] #[error("{task_id}: {cause}")] @@ -691,8 +730,10 @@ impl<'a> ExecContextFactory<'a> { continue_on_error: self.visitor.run_opts.continue_on_error, pass_through_args, errors: self.errors.clone(), + warnings: self.visitor.warnings.clone(), takes_input, task_access, + platform_env: PlatformEnv::new(), } } @@ -727,8 +768,10 @@ struct ExecContext { continue_on_error: bool, pass_through_args: Option>, errors: Arc>>, + warnings: Arc>>, takes_input: bool, task_access: TaskAccess, + platform_env: PlatformEnv, } enum ExecOutcome { @@ -881,6 +924,19 @@ impl ExecContext { } } + if !self.task_cache.is_caching_disabled() { + let missing_platform_env = self.platform_env.validate(&self.execution_env); + if !missing_platform_env.is_empty() { + self.warnings + .lock() + .expect("warnings lock poisoned") + .push(TaskWarning { + task_id: self.task_id_for_display.clone(), + missing_platform_env, + }); + } + } + match self .task_cache .restore_outputs(&mut prefixed_ui, telemetry) diff --git a/crates/turborepo-ui/src/lib.rs b/crates/turborepo-ui/src/lib.rs index 307ec9f50d981..b87b2ea275dfa 100644 --- a/crates/turborepo-ui/src/lib.rs +++ b/crates/turborepo-ui/src/lib.rs @@ -120,6 +120,28 @@ macro_rules! cwriteln { }}; } +#[macro_export] +macro_rules! ceprintln { + ($ui:expr, $color:expr, $format_string:expr $(, $arg:expr)*) => {{ + let formatted_str = format!($format_string $(, $arg)*); + + let colored_str = $color.apply_to(formatted_str); + + eprintln!("{}", $ui.apply(colored_str)) + }}; +} + +#[macro_export] +macro_rules! ceprint { + ($ui:expr, $color:expr, $format_string:expr $(, $arg:expr)*) => {{ + let formatted_str = format!($format_string $(, $arg)*); + + let colored_str = $color.apply_to(formatted_str); + + eprint!("{}", $ui.apply(colored_str)) + }}; +} + /// Helper struct to apply any necessary formatting to UI output #[derive(Debug, Clone, Copy)] pub struct ColorConfig { From 2290ac2ec26510b598247c1f4f5b6f47086f2f77 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 15 Oct 2024 15:19:04 -0400 Subject: [PATCH 066/218] chore: fix clippy lint in filter tests (#9257) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Fixing some clippy lints that only get displayed if compiled with when `test` is enabled. ### Testing Instructions 👀 --- crates/turborepo-lib/src/run/scope/filter.rs | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/crates/turborepo-lib/src/run/scope/filter.rs b/crates/turborepo-lib/src/run/scope/filter.rs index 918afc2a3c8e4..d465b112807a4 100644 --- a/crates/turborepo-lib/src/run/scope/filter.rs +++ b/crates/turborepo-lib/src/run/scope/filter.rs @@ -1104,10 +1104,7 @@ mod test { let packages = resolver.get_filtered_packages(selectors).unwrap(); assert_eq!( - packages - .into_iter() - .map(|(name, _)| name) - .collect::>(), + packages.into_keys().collect::>(), expected.iter().map(|s| PackageName::from(*s)).collect() ); } @@ -1339,10 +1336,7 @@ mod test { let packages = resolver.get_filtered_packages(selectors).unwrap(); assert_eq!( - packages - .into_iter() - .map(|(name, _)| name) - .collect::>(), + packages.into_keys().collect::>(), expected.iter().map(|s| PackageName::from(*s)).collect() ); } From 9dafce0fd6fe64cfa6f269ce4a7efb229bc652bb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 16:04:18 -0400 Subject: [PATCH 067/218] release(turborepo): 2.1.4-canary.5 (#9259) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 45bfa8b0ecbc6..ee82857a2818f 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index ff8587733c2cd..3596c0789302e 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 8433dc8a53b16..6be0eae40b931 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index e5547059f239b..e78d1ac7dd8a4 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index c0694767b9edd..e3d2b041b9bc6 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 0c948bdd2ad8e..f9cbfefc91c53 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index d78fe66dad428..d25a41f5b0f08 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 06611c46c0510..42ef5093457bc 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 9c00b7a63fa57..b1965a54a93f3 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.4", + "version": "2.1.4-canary.5", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.4", - "turbo-darwin-arm64": "2.1.4-canary.4", - "turbo-linux-64": "2.1.4-canary.4", - "turbo-linux-arm64": "2.1.4-canary.4", - "turbo-windows-64": "2.1.4-canary.4", - "turbo-windows-arm64": "2.1.4-canary.4" + "turbo-darwin-64": "2.1.4-canary.5", + "turbo-darwin-arm64": "2.1.4-canary.5", + "turbo-linux-64": "2.1.4-canary.5", + "turbo-linux-arm64": "2.1.4-canary.5", + "turbo-windows-64": "2.1.4-canary.5", + "turbo-windows-arm64": "2.1.4-canary.5" } } diff --git a/version.txt b/version.txt index e65464a14a1a2..5d1c6f3ae08df 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.4 +2.1.4-canary.5 canary From 51b75dc6b698e216cff2015872ebb7a56a21acc1 Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Tue, 15 Oct 2024 21:08:32 -0400 Subject: [PATCH 068/218] chore(platform_env): add warn prefix (#9261) ### Description Use correct warning output prefix ### Testing Instructions --- crates/turborepo-env/src/platform.rs | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/crates/turborepo-env/src/platform.rs b/crates/turborepo-env/src/platform.rs index 7ab91d9eb01a3..f9bf30a2a31af 100644 --- a/crates/turborepo-env/src/platform.rs +++ b/crates/turborepo-env/src/platform.rs @@ -66,8 +66,8 @@ impl PlatformEnv { ceprintln!( color_config, BOLD, - "The following environment variables are set on your Vercel project, but \ - missing from \"turbo.json\". {}", + "Warning - the following environment variables are set on your Vercel \ + project, but missing from \"turbo.json\". {}", strict_message ); } @@ -75,7 +75,8 @@ impl PlatformEnv { ceprintln!( color_config, BOLD, - "The following environment variables are missing from \"turbo.json\". {}", + "Warning - the following environment variables are missing from \ + \"turbo.json\". {}", strict_message ); } @@ -94,11 +95,21 @@ impl PlatformEnv { task_id_for_display: &str, color_config: ColorConfig, ) { - ceprintln!(color_config, YELLOW, "{}", task_id_for_display); + let ci = Vendor::get_constant().unwrap_or("unknown"); + let log_prefix = match ci { + "VERCEL" => "[warn]", + _ => "", + }; + ceprintln!( + color_config, + YELLOW, + "{} {}", + log_prefix, + task_id_for_display + ); for key in missing { - ceprint!(color_config, GREY, " - "); - ceprint!(color_config, GREY, "{}\n", key); + ceprint!(color_config, GREY, "{} - ", log_prefix); + ceprint!(color_config, GREY, "{} \n", key); } - eprintln!(); } } From 760488448a237a9bfd64c1c881e43f45cf1121ef Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 09:29:25 -0400 Subject: [PATCH 069/218] release(turborepo): 2.1.4-canary.6 (#9265) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index ee82857a2818f..7d230d57114c4 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 3596c0789302e..dc11e273eb0cc 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6be0eae40b931..b60e223aa06d6 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index e78d1ac7dd8a4..a185df278a522 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index e3d2b041b9bc6..a6415b9aaa867 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index f9cbfefc91c53..df61e0bcd48eb 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index d25a41f5b0f08..c7cdc7f893273 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 42ef5093457bc..ca7097f586975 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index b1965a54a93f3..03e0ff42599ca 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.5", + "version": "2.1.4-canary.6", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.5", - "turbo-darwin-arm64": "2.1.4-canary.5", - "turbo-linux-64": "2.1.4-canary.5", - "turbo-linux-arm64": "2.1.4-canary.5", - "turbo-windows-64": "2.1.4-canary.5", - "turbo-windows-arm64": "2.1.4-canary.5" + "turbo-darwin-64": "2.1.4-canary.6", + "turbo-darwin-arm64": "2.1.4-canary.6", + "turbo-linux-64": "2.1.4-canary.6", + "turbo-linux-arm64": "2.1.4-canary.6", + "turbo-windows-64": "2.1.4-canary.6", + "turbo-windows-arm64": "2.1.4-canary.6" } } diff --git a/version.txt b/version.txt index 5d1c6f3ae08df..cc0af44980652 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.5 +2.1.4-canary.6 canary From 9d597140adc3fcc64d16a446155ca848f51e37d7 Mon Sep 17 00:00:00 2001 From: Nebojsa Vojvodic Date: Wed, 16 Oct 2024 17:11:03 +0200 Subject: [PATCH 070/218] fix(docs): circleci config - remove excess colon when calling node/install-packages (#9264) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In this example we need to remove the colon at the end, since we're calling the command without params. Otherwise we get a schema validation error since it attempts to use lines below as mapping. ### Description ![image](https://github.com/user-attachments/assets/264d38d0-0cb9-44cf-a9b4-5061408dcd0c) --- docs/repo-docs/guides/ci-vendors/circleci.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/ci-vendors/circleci.mdx b/docs/repo-docs/guides/ci-vendors/circleci.mdx index 4a577cb721d25..c6b2e94d57b8c 100644 --- a/docs/repo-docs/guides/ci-vendors/circleci.mdx +++ b/docs/repo-docs/guides/ci-vendors/circleci.mdx @@ -124,7 +124,7 @@ Create a file called `.circleci/config.yml` in your repository with the followin - image: cimg/node:lts steps: - checkout - - node/install-packages: + - node/install-packages - run: command: npm i -g pnpm environment: From f69b43a888311c24513da98ccbbb9084bb6fe136 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 16 Oct 2024 11:33:47 -0400 Subject: [PATCH 071/218] chore(trace): fix compilation error in turbo-trace (#9267) ### Description `Tracer::new` returns `Tracer` not a try-able type so we remove the `?` Future work is getting this crate covered by CI so we make sure it compiles. ### Testing Instructions It compiles now --- crates/turbo-trace/src/main.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/turbo-trace/src/main.rs b/crates/turbo-trace/src/main.rs index be8c5cd79857c..5c5f10473ede9 100644 --- a/crates/turbo-trace/src/main.rs +++ b/crates/turbo-trace/src/main.rs @@ -30,7 +30,7 @@ fn main() -> Result<(), PathError> { .map(|f| AbsoluteSystemPathBuf::from_unknown(&abs_cwd, f)) .collect(); - let tracer = Tracer::new(abs_cwd, files, args.ts_config)?; + let tracer = Tracer::new(abs_cwd, files, args.ts_config); let result = tracer.trace(); From ec801390c39a0ec08036d9e967bb23775e59816a Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Wed, 16 Oct 2024 13:50:20 -0400 Subject: [PATCH 072/218] ci: build all rust packages (#9268) ### Description Since we're no longer sharing a repo with turbopack, we can now build all the crates instead of using cargo groups ### Testing Instructions --------- Co-authored-by: Chris Olszewski --- .github/workflows/turborepo-test.yml | 12 ++++++++---- packages/turbo-repository/rust/src/lib.rs | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml index b58ecd7d097cf..abcfeb4c67b30 100644 --- a/.github/workflows/turborepo-test.yml +++ b/.github/workflows/turborepo-test.yml @@ -229,7 +229,7 @@ jobs: - name: Run cargo clippy run: | - cargo groups clippy turborepo-libraries --features rustls-tls -- --deny clippy::all + cargo clippy --workspace --features rustls-tls -- --deny clippy::all - name: Run ast-grep lints run: | @@ -260,7 +260,7 @@ jobs: - name: Run cargo check run: | - cargo groups check turborepo-libraries + cargo check --workspace rust_test: needs: [rust_check] @@ -308,8 +308,12 @@ jobs: run: | if [ -z "${RUSTC_WRAPPER}" ]; then unset RUSTC_WRAPPER - fi - cargo groups test turborepo-libraries + fi + if [ "$RUNNER_OS" == "Windows" ]; then + cargo test --workspace --exclude turborepo-napi + else + cargo test --workspace + fi shell: bash env: SCCACHE_BUCKET: turborepo-sccache diff --git a/packages/turbo-repository/rust/src/lib.rs b/packages/turbo-repository/rust/src/lib.rs index 626d0b38e6206..7687c8bd4d394 100644 --- a/packages/turbo-repository/rust/src/lib.rs +++ b/packages/turbo-repository/rust/src/lib.rs @@ -219,7 +219,7 @@ impl Workspace { path: info.package_path().to_owned(), }) .collect::>(), - PackageChanges::Some(packages) => packages.into_iter().map(|(p, _)| p).collect(), + PackageChanges::Some(packages) => packages.into_keys().collect(), }; let mut serializable_packages: Vec = packages From 2a7c317643632affca2ef3246f3817c240b2a1af Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Wed, 16 Oct 2024 14:16:17 -0400 Subject: [PATCH 073/218] chore(platform_env): add warn prefix to docs (#9269) ### Description Update logs ### Testing Instructions --- crates/turborepo-env/src/platform.rs | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/crates/turborepo-env/src/platform.rs b/crates/turborepo-env/src/platform.rs index f9bf30a2a31af..819b4f83912e4 100644 --- a/crates/turborepo-env/src/platform.rs +++ b/crates/turborepo-env/src/platform.rs @@ -61,14 +61,20 @@ impl PlatformEnv { cache hits." }; + let docs_message = color!( + color_config, + UNDERLINE, + "https://turbo.build/repo/docs/platform-environment-variables" + ); + match ci { "VERCEL" => { ceprintln!( color_config, BOLD, "Warning - the following environment variables are set on your Vercel \ - project, but missing from \"turbo.json\". {}", - strict_message + project, but missing from \"turbo.json\". {strict_message} Learn more at \ + {docs_message}\n" ); } _ => { @@ -76,18 +82,10 @@ impl PlatformEnv { color_config, BOLD, "Warning - the following environment variables are missing from \ - \"turbo.json\". {}", - strict_message + \"turbo.json\". {strict_message} Learn more at {docs_message}\n" ); } } - - let docs = color!( - color_config, - UNDERLINE, - "https://turbo.build/repo/docs/platform-environment-variables" - ); - ceprintln!(color_config, GREY, "Learn more at {docs}\n"); } pub fn output_for_task( From 7cb4f751a75470e42af12e2a864cdceb478883b2 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Wed, 16 Oct 2024 15:31:39 -0400 Subject: [PATCH 074/218] fix(query): remove engine validation for query (#9271) ### Description We don't want to validate certain issues with graphs with `turbo query`, because it should be still usable even with an invalid graph. ### Testing Instructions Added a test that shows that `turbo query` is tolerant of issues that `turbo run` is not. --- crates/turborepo-lib/src/commands/query.rs | 4 +- crates/turborepo-lib/src/engine/builder.rs | 9 +- crates/turborepo-lib/src/run/builder.rs | 14 +- .../invalid-dependency/app-a/package.json | 10 ++ .../invalid-dependency/app-b/package.json | 11 ++ .../invalid-dependency/lib-a/package.json | 10 ++ .../invalid-dependency/lib-b/package.json | 10 ++ .../invalid-dependency/lib-c/package.json | 6 + .../invalid-dependency/lib-d/package.json | 7 + .../invalid-dependency/package.json | 11 ++ .../invalid-dependency/turbo.json | 32 ++++ .../integration/tests/query/validation.t | 148 ++++++++++++++++++ 12 files changed, 269 insertions(+), 3 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-a/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-b/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-a/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-b/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-c/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-d/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/package.json create mode 100644 turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/turbo.json create mode 100644 turborepo-tests/integration/tests/query/validation.t diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index 83cb64fc25ca4..6d367bd562688 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -68,7 +68,9 @@ pub async fn run( execution_args: Box::default(), }); - let run_builder = RunBuilder::new(base)?.add_all_tasks(); + let run_builder = RunBuilder::new(base)? + .add_all_tasks() + .do_not_validate_engine(); let run = run_builder.build(&handler, telemetry).await?; if let Some(query) = query { diff --git a/crates/turborepo-lib/src/engine/builder.rs b/crates/turborepo-lib/src/engine/builder.rs index dd958fcf127c0..acd2dbb4efa3b 100644 --- a/crates/turborepo-lib/src/engine/builder.rs +++ b/crates/turborepo-lib/src/engine/builder.rs @@ -101,6 +101,7 @@ pub struct EngineBuilder<'a> { root_enabled_tasks: HashSet>, tasks_only: bool, add_all_tasks: bool, + should_validate_engine: bool, } impl<'a> EngineBuilder<'a> { @@ -120,6 +121,7 @@ impl<'a> EngineBuilder<'a> { root_enabled_tasks: HashSet::new(), tasks_only: false, add_all_tasks: false, + should_validate_engine: true, } } @@ -157,6 +159,11 @@ impl<'a> EngineBuilder<'a> { self } + pub fn do_not_validate_engine(mut self) -> Self { + self.should_validate_engine = false; + self + } + // Returns the set of allowed tasks that can be run if --only is used // The set is exactly the product of the packages in filter and tasks specified // by CLI @@ -502,7 +509,7 @@ impl<'a> EngineBuilder<'a> { } } - if task_definitions.is_empty() { + if task_definitions.is_empty() && self.should_validate_engine { let (span, text) = task_id.span_and_text("turbo.json"); return Err(Error::MissingPackageTask { span, diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index 7f10b64ab1cc5..dbfaa33f8324f 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -67,6 +67,8 @@ pub struct RunBuilder { should_print_prelude_override: Option, allow_missing_package_manager: bool, allow_no_turbo_json: bool, + // In query, we don't want to validate the engine. Defaults to `true` + should_validate_engine: bool, // If true, we will add all tasks to the graph, even if they are not specified add_all_tasks: bool, } @@ -111,6 +113,7 @@ impl RunBuilder { allow_missing_package_manager, root_turbo_json_path, allow_no_turbo_json, + should_validate_engine: true, add_all_tasks: false, }) } @@ -130,6 +133,11 @@ impl RunBuilder { self } + pub fn do_not_validate_engine(mut self) -> Self { + self.should_validate_engine = false; + self + } + fn connect_process_manager(&self, signal_subscriber: SignalSubscriber) { let manager = self.processes.clone(); tokio::spawn(async move { @@ -496,6 +504,10 @@ impl RunBuilder { builder = builder.add_all_tasks(); } + if !self.should_validate_engine { + builder = builder.do_not_validate_engine(); + } + let mut engine = builder.build()?; // If we have an initial task, we prune out the engine to only @@ -504,7 +516,7 @@ impl RunBuilder { engine = engine.create_engine_for_subgraph(entrypoint_packages); } - if !self.opts.run_opts.parallel { + if !self.opts.run_opts.parallel && self.should_validate_engine { engine .validate( pkg_dep_graph, diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-a/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-a/package.json new file mode 100644 index 0000000000000..1b1065a49f07a --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-a/package.json @@ -0,0 +1,10 @@ +{ + "name": "app-a", + "scripts": { + "build": "echo 'build app-a'", + "test": "echo 'test app-a'" + }, + "dependencies": { + "lib-a": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-b/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-b/package.json new file mode 100644 index 0000000000000..5b28eec0f17f7 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/app-b/package.json @@ -0,0 +1,11 @@ +{ + "name": "app-b", + "scripts": { + "build": "echo 'build app-b'", + "test": "echo 'test app-b'" + }, + "dependencies": { + "lib-b": "*", + "lib-c": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-a/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-a/package.json new file mode 100644 index 0000000000000..7507e85ce1b0b --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-a/package.json @@ -0,0 +1,10 @@ +{ + "name": "lib-a", + "scripts": { + "build": "echo 'build lib-a'", + "test": "echo 'test lib-a'" + }, + "dependencies": { + "lib-b": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-b/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-b/package.json new file mode 100644 index 0000000000000..5288e96887e92 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-b/package.json @@ -0,0 +1,10 @@ +{ + "name": "lib-b", + "scripts": { + "build": "echo 'build lib-b'", + "test": "echo 'test lib-b'" + }, + "dependencies": { + "lib-d": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-c/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-c/package.json new file mode 100644 index 0000000000000..d52930425c5d3 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-c/package.json @@ -0,0 +1,6 @@ +{ + "name": "lib-c", + "scripts": { + "build": "echo 'build lib-c'" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-d/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-d/package.json new file mode 100644 index 0000000000000..94d86aa0d4a5b --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/lib-d/package.json @@ -0,0 +1,7 @@ +{ + "name": "lib-d", + "scripts": { + "build": "echo 'build lib-d'", + "test": "echo 'test lib-d'" + } +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/package.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/package.json new file mode 100644 index 0000000000000..ea0a7089dc497 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/package.json @@ -0,0 +1,11 @@ +{ + "name": "unknown-dependency", + "workspaces": [ + "app-a", + "app-b", + "lib-a", + "lib-b", + "lib-c", + "lib-d" + ] +} diff --git a/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/turbo.json b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/turbo.json new file mode 100644 index 0000000000000..c2391603086a4 --- /dev/null +++ b/turborepo-tests/integration/fixtures/task_dependencies/invalid-dependency/turbo.json @@ -0,0 +1,32 @@ +{ + "tasks": { + "build0": { + "dependsOn": [ + "^build0", + "prepare" + ] + }, + "test": { + "dependsOn": [ + "^build0", + "prepare" + ] + }, + "prepare": {}, + "side-quest": { + "dependsOn": [ + "prepare" + ] + }, + "build1": { + "dependsOn": [ + "^build1" + ] + }, + "build2": { + "dependsOn": [ + "app-a#custom" + ] + } + } +} diff --git a/turborepo-tests/integration/tests/query/validation.t b/turborepo-tests/integration/tests/query/validation.t new file mode 100644 index 0000000000000..424005304fdaf --- /dev/null +++ b/turborepo-tests/integration/tests/query/validation.t @@ -0,0 +1,148 @@ +Setup + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh persistent_dependencies/10-too-many + +Validate that we get an error when we try to run multiple persistent tasks with concurrency 1 + $ ${TURBO} run build --concurrency=1 + x invalid task configuration + + Error: x You have 2 persistent tasks but `turbo` is configured for concurrency of + | 1. Set --concurrency to at least 3 + + [1] + +However on query, we ignore this validation + $ ${TURBO} query "query { packages { items { tasks { items { fullName } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": { + "items": [ + { + "tasks": { + "items": [] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "one#build" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "two#build" + } + ] + } + } + ] + } + } + } + +Setup + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh task_dependencies/invalid-dependency + warning: re-init: ignored --initial-branch=main + +Validate that we get an error when trying to depend on a task that doesn't exist + $ ${TURBO} run build2 + x Could not find "app-a#custom" in root turbo.json or "custom" in package + ,-[turbo.json:27:1] + 27 | "dependsOn": [ + 28 | "app-a#custom" + : ^^^^^^^^^^^^^^ + 29 | ] + `---- + + [1] + +However, we don't get an error when we query + $ ${TURBO} query "query { packages { items { tasks { items { fullName } } } } }" | jq + WARNING query command is experimental and may change in the future + { + "data": { + "packages": { + "items": [ + { + "tasks": { + "items": [] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "app-a#build" + }, + { + "fullName": "app-a#test" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "app-b#build" + }, + { + "fullName": "app-b#test" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "lib-a#build" + }, + { + "fullName": "lib-a#test" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "lib-b#build" + }, + { + "fullName": "lib-b#test" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "lib-c#build" + } + ] + } + }, + { + "tasks": { + "items": [ + { + "fullName": "lib-d#build" + }, + { + "fullName": "lib-d#test" + } + ] + } + } + ] + } + } + } \ No newline at end of file From de75ae33915d197bac5c36df71df3edb1fb623cf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 15:43:31 -0400 Subject: [PATCH 075/218] release(turborepo): 2.1.4-canary.7 (#9272) Co-authored-by: Turbobot Co-authored-by: Nicholas Yang --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 7d230d57114c4..787d3bd6ccda1 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index dc11e273eb0cc..b4201a8faa995 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index b60e223aa06d6..afc61fee1af12 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index a185df278a522..563fb3f1accac 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index a6415b9aaa867..c33c066772c57 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index df61e0bcd48eb..ea2ba4bf01232 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index c7cdc7f893273..2a1ceadf5cc2d 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index ca7097f586975..0e9dee154ddb5 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 03e0ff42599ca..8ae0aa0ab2a18 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.6", + "version": "2.1.4-canary.7", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.6", - "turbo-darwin-arm64": "2.1.4-canary.6", - "turbo-linux-64": "2.1.4-canary.6", - "turbo-linux-arm64": "2.1.4-canary.6", - "turbo-windows-64": "2.1.4-canary.6", - "turbo-windows-arm64": "2.1.4-canary.6" + "turbo-darwin-64": "2.1.4-canary.7", + "turbo-darwin-arm64": "2.1.4-canary.7", + "turbo-linux-64": "2.1.4-canary.7", + "turbo-linux-arm64": "2.1.4-canary.7", + "turbo-windows-64": "2.1.4-canary.7", + "turbo-windows-arm64": "2.1.4-canary.7" } } diff --git a/version.txt b/version.txt index cc0af44980652..d0c8c3d09ac59 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.6 +2.1.4-canary.7 canary From cf6e98cbf5ff5205b76330903429ab30ca5641bd Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 16 Oct 2024 15:57:49 -0400 Subject: [PATCH 076/218] chore(scm): add more information to GHA warning (#9273) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Add what we failed to resolve along with the error message. ### Testing Instructions 👀 --- crates/turborepo-scm/src/git.rs | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index 0c6751a9dffc8..1f8248a07e5ac 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -243,15 +243,18 @@ impl Git { // because at this point we know we're in a GITHUB CI environment // and we should really know by now what the base ref is // so it's better to just error if something went wrong - return if self - .execute_git_command(&["rev-parse", &github_base_ref], "") - .is_ok() - { - eprintln!("Resolved base ref from GitHub Actions event: {github_base_ref}"); - Ok(github_base_ref) - } else { - eprintln!("Failed to resolve base ref from GitHub Actions event"); - Err(Error::UnableToResolveRef) + return match self.execute_git_command(&["rev-parse", &github_base_ref], "") { + Ok(_) => { + eprintln!("Resolved base ref from GitHub Actions event: {github_base_ref}"); + Ok(github_base_ref) + } + Err(e) => { + eprintln!( + "Failed to resolve base ref '{github_base_ref}' from GitHub Actions \ + event: {e}" + ); + Err(Error::UnableToResolveRef) + } }; } From 42696fefcd90f16cbffa0370308e7209273c313a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 11:22:02 -0400 Subject: [PATCH 077/218] release(turborepo): 2.1.4-canary.8 (#9274) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 787d3bd6ccda1..8d7a03804c0cf 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index b4201a8faa995..9826433d9f144 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index afc61fee1af12..e349216a393a8 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 563fb3f1accac..42c46cfe576f6 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index c33c066772c57..f856b1e49312a 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index ea2ba4bf01232..13bca94fd831b 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 2a1ceadf5cc2d..a103ee1665983 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 0e9dee154ddb5..406eaacbfeac0 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 8ae0aa0ab2a18..750a6461a0498 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.7", + "version": "2.1.4-canary.8", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.7", - "turbo-darwin-arm64": "2.1.4-canary.7", - "turbo-linux-64": "2.1.4-canary.7", - "turbo-linux-arm64": "2.1.4-canary.7", - "turbo-windows-64": "2.1.4-canary.7", - "turbo-windows-arm64": "2.1.4-canary.7" + "turbo-darwin-64": "2.1.4-canary.8", + "turbo-darwin-arm64": "2.1.4-canary.8", + "turbo-linux-64": "2.1.4-canary.8", + "turbo-linux-arm64": "2.1.4-canary.8", + "turbo-windows-64": "2.1.4-canary.8", + "turbo-windows-arm64": "2.1.4-canary.8" } } diff --git a/version.txt b/version.txt index d0c8c3d09ac59..ff1c36473113c 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.7 +2.1.4-canary.8 canary From 791a033b00030d031fff677cbd419eda072f1994 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 17 Oct 2024 11:59:46 -0400 Subject: [PATCH 078/218] perf(tui): bring async to tui (#9132) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description This PR makes the driving the TUI async, the actual operation on the state is still completely sync. The primary driver behind this PR is it allows us to make use of [`crossterm::event::EventStream`](https://docs.rs/crossterm/latest/crossterm/event/struct.EventStream.html) which seems to be far more performant than polling for user input. The first commit of the PR just changes types from `std::sync::mpsc` to `tokio::sync::mpsc` (and make use of `tokio::sync::oneshot` for our callbacks instead of a channel of size 1). The second commit removes our usage of `crossterm::event::poll` in favor of a dedicated task that reads and forwards events from `crossterm::event::EventStream`. The final commit moves the production of ticks to it's own task to avoid the need for timing out our reads. ### Testing Instructions Notice large reduction in CPU usage from `turbo` when tasks are not producing output and the TUI is just waiting for user input. Before Screenshot 2024-09-10 at 2 57 45 PM After Screenshot 2024-09-10 at 2 56 17 PM --- Cargo.lock | 2 + crates/turborepo-lib/src/commands/run.rs | 2 +- crates/turborepo-lib/src/run/mod.rs | 6 +- .../turborepo-lib/src/task_graph/visitor.rs | 11 +-- crates/turborepo-ui/Cargo.toml | 4 +- crates/turborepo-ui/src/sender.rs | 8 +-- crates/turborepo-ui/src/tui/app.rs | 71 ++++++++++++------- crates/turborepo-ui/src/tui/event.rs | 5 +- crates/turborepo-ui/src/tui/handle.rs | 39 +++++----- crates/turborepo-ui/src/tui/input.rs | 52 ++++++++------ crates/turborepo-ui/src/tui/mod.rs | 2 +- crates/turborepo-ui/src/tui/search.rs | 10 +-- 12 files changed, 127 insertions(+), 85 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b0731cdba1357..f8c99ea4eb1ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1388,6 +1388,7 @@ checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df" dependencies = [ "bitflags 2.5.0", "crossterm_winapi", + "futures-core", "libc", "mio 0.8.11", "parking_lot", @@ -6569,6 +6570,7 @@ dependencies = [ "console", "crossterm 0.27.0", "dialoguer", + "futures", "indicatif", "indoc", "lazy_static", diff --git a/crates/turborepo-lib/src/commands/run.rs b/crates/turborepo-lib/src/commands/run.rs index 82b3a3debac5c..b3b6e5dada7c9 100644 --- a/crates/turborepo-lib/src/commands/run.rs +++ b/crates/turborepo-lib/src/commands/run.rs @@ -57,7 +57,7 @@ pub async fn run(base: CommandBase, telemetry: CommandEventBuilder) -> Result Visitor<'a> { // Once we have the full picture we will go about grouping these pieces of data // together #[allow(clippy::too_many_arguments)] - pub fn new( + pub async fn new( package_graph: Arc, run_cache: Arc, run_tracker: RunTracker, @@ -133,8 +133,11 @@ impl<'a> Visitor<'a> { let sink = Self::sink(run_opts); let color_cache = ColorSelector::default(); // Set up correct size for underlying pty - if let Some(pane_size) = ui_sender.as_ref().and_then(|sender| sender.pane_size()) { - manager.set_pty_size(pane_size.rows, pane_size.cols); + + if let Some(app) = ui_sender.as_ref() { + if let Some(pane_size) = app.pane_size().await { + manager.set_pty_size(pane_size.rows, pane_size.cols); + } } Self { @@ -330,7 +333,7 @@ impl<'a> Visitor<'a> { if !self.is_watch { if let Some(handle) = &self.ui_sender { - handle.stop(); + handle.stop().await; } } diff --git a/crates/turborepo-ui/Cargo.toml b/crates/turborepo-ui/Cargo.toml index a75108233c79f..9c0a0caf35c5b 100644 --- a/crates/turborepo-ui/Cargo.toml +++ b/crates/turborepo-ui/Cargo.toml @@ -24,8 +24,9 @@ axum-server = { workspace = true } base64 = "0.22" chrono = { workspace = true } console = { workspace = true } -crossterm = "0.27.0" +crossterm = { version = "0.27.0", features = ["event-stream"] } dialoguer = { workspace = true } +futures = { workspace = true } indicatif = { workspace = true } lazy_static = { workspace = true } nix = { version = "0.26.2", features = ["signal"] } @@ -34,7 +35,6 @@ serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } - tracing = { workspace = true } tui-term = { workspace = true } turbopath = { workspace = true } diff --git a/crates/turborepo-ui/src/sender.rs b/crates/turborepo-ui/src/sender.rs index a7b3c11d39be1..0fd6f84690bb6 100644 --- a/crates/turborepo-ui/src/sender.rs +++ b/crates/turborepo-ui/src/sender.rs @@ -62,9 +62,9 @@ impl UISender { UISender::Wui(sender) => sender.task(task), } } - pub fn stop(&self) { + pub async fn stop(&self) { match self { - UISender::Tui(sender) => sender.stop(), + UISender::Tui(sender) => sender.stop().await, UISender::Wui(sender) => sender.stop(), } } @@ -75,9 +75,9 @@ impl UISender { } } - pub fn pane_size(&self) -> Option { + pub async fn pane_size(&self) -> Option { match self { - UISender::Tui(sender) => sender.pane_size(), + UISender::Tui(sender) => sender.pane_size().await, // Not applicable to the web UI UISender::Wui(_) => None, } diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 4d83a65d10a87..8ba6e9a8d2539 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -2,8 +2,7 @@ use std::{ collections::BTreeMap, io::{self, Stdout, Write}, mem, - sync::mpsc, - time::{Duration, Instant}, + time::Duration, }; use ratatui::{ @@ -12,9 +11,13 @@ use ratatui::{ widgets::TableState, Frame, Terminal, }; +use tokio::{ + sync::{mpsc, oneshot}, + time::Instant, +}; use tracing::{debug, trace}; -const FRAMERATE: Duration = Duration::from_millis(3); +pub const FRAMERATE: Duration = Duration::from_millis(3); const RESIZE_DEBOUNCE_DELAY: Duration = Duration::from_millis(10); use super::{ @@ -43,7 +46,6 @@ pub struct App { tasks: BTreeMap>, tasks_by_status: TasksByStatus, focus: LayoutSections, - tty_stdin: bool, scroll: TableState, selected_task_index: usize, has_user_scrolled: bool, @@ -78,8 +80,6 @@ impl App { size, done: false, focus: LayoutSections::TaskList, - // Check if stdin is a tty that we should read input from - tty_stdin: atty::is(atty::Stream::Stdin), tasks: tasks_by_status .task_names_in_displayed_order() .map(|task_name| { @@ -112,7 +112,6 @@ impl App { let has_selection = self.get_full_task()?.has_selection(); Ok(InputOptions { focus: &self.focus, - tty_stdin: self.tty_stdin, has_selection, }) } @@ -558,16 +557,19 @@ impl App { /// Handle the rendering of the `App` widget based on events received by /// `receiver` -pub fn run_app(tasks: Vec, receiver: AppReceiver) -> Result<(), Error> { +pub async fn run_app(tasks: Vec, receiver: AppReceiver) -> Result<(), Error> { let mut terminal = startup()?; let size = terminal.size()?; let mut app: App> = App::new(size.height, size.width, tasks); + let (crossterm_tx, crossterm_rx) = mpsc::channel(1024); + input::start_crossterm_stream(crossterm_tx); - let (result, callback) = match run_app_inner(&mut terminal, &mut app, receiver) { - Ok(callback) => (Ok(()), callback), - Err(err) => (Err(err), None), - }; + let (result, callback) = + match run_app_inner(&mut terminal, &mut app, receiver, crossterm_rx).await { + Ok(callback) => (Ok(()), callback), + Err(err) => (Err(err), None), + }; cleanup(terminal, app, callback)?; @@ -576,18 +578,19 @@ pub fn run_app(tasks: Vec, receiver: AppReceiver) -> Result<(), Error> { // Break out inner loop so we can use `?` without worrying about cleaning up the // terminal. -fn run_app_inner( +async fn run_app_inner( terminal: &mut Terminal, app: &mut App>, - receiver: AppReceiver, -) -> Result>, Error> { + mut receiver: AppReceiver, + mut crossterm_rx: mpsc::Receiver, +) -> Result>, Error> { // Render initial state to paint the screen terminal.draw(|f| view(app, f))?; let mut last_render = Instant::now(); let mut resize_debouncer = Debouncer::new(RESIZE_DEBOUNCE_DELAY); let mut callback = None; let mut needs_rerender = true; - while let Some(event) = poll(app.input_options()?, &receiver, last_render + FRAMERATE) { + while let Some(event) = poll(app.input_options()?, &mut receiver, &mut crossterm_rx).await { // If we only receive ticks, then there's been no state change so no update // needed if !matches!(event, Event::Tick) { @@ -625,13 +628,31 @@ fn run_app_inner( /// Blocking poll for events, will only return None if app handle has been /// dropped -fn poll(input_options: InputOptions, receiver: &AppReceiver, deadline: Instant) -> Option { - match input(input_options) { - Ok(Some(event)) => Some(event), - Ok(None) => receiver.recv(deadline).ok(), - // Unable to read from stdin, shut down and attempt to clean up - Err(_) => Some(Event::InternalStop), - } +async fn poll<'a>( + input_options: InputOptions<'a>, + receiver: &mut AppReceiver, + crossterm_rx: &mut mpsc::Receiver, +) -> Option { + let input_closed = crossterm_rx.is_closed(); + let input_fut = async { + crossterm_rx + .recv() + .await + .and_then(|event| input_options.handle_crossterm_event(event)) + }; + let receiver_fut = async { receiver.recv().await }; + let event_fut = async move { + if input_closed { + receiver_fut.await + } else { + tokio::select! { + e = input_fut => e, + e = receiver_fut => e, + } + } + }; + + event_fut.await } const MIN_HEIGHT: u16 = 10; @@ -672,7 +693,7 @@ fn startup() -> io::Result>> { fn cleanup( mut terminal: Terminal, mut app: App>, - callback: Option>, + callback: Option>, ) -> io::Result<()> { terminal.clear()?; crossterm::execute!( @@ -692,7 +713,7 @@ fn cleanup( fn update( app: &mut App>, event: Event, -) -> Result>, Error> { +) -> Result>, Error> { match event { Event::StartTask { task, output_logs } => { app.start_task(&task, output_logs)?; diff --git a/crates/turborepo-ui/src/tui/event.rs b/crates/turborepo-ui/src/tui/event.rs index 4e6365b9b1cc2..4f609f9a59028 100644 --- a/crates/turborepo-ui/src/tui/event.rs +++ b/crates/turborepo-ui/src/tui/event.rs @@ -1,5 +1,6 @@ use async_graphql::Enum; use serde::Serialize; +use tokio::sync::oneshot; pub enum Event { StartTask { @@ -19,8 +20,8 @@ pub enum Event { status: String, result: CacheResult, }, - PaneSizeQuery(std::sync::mpsc::SyncSender), - Stop(std::sync::mpsc::SyncSender<()>), + PaneSizeQuery(oneshot::Sender), + Stop(oneshot::Sender<()>), // Stop initiated by the TUI itself InternalStop, Tick, diff --git a/crates/turborepo-ui/src/tui/handle.rs b/crates/turborepo-ui/src/tui/handle.rs index 2b8eccff3cc44..f69c913cf0713 100644 --- a/crates/turborepo-ui/src/tui/handle.rs +++ b/crates/turborepo-ui/src/tui/handle.rs @@ -1,6 +1,7 @@ -use std::{sync::mpsc, time::Instant}; +use tokio::sync::{mpsc, oneshot}; use super::{ + app::FRAMERATE, event::{CacheResult, OutputLogs, PaneSize}, Error, Event, TaskResult, }; @@ -9,12 +10,12 @@ use crate::sender::{TaskSender, UISender}; /// Struct for sending app events to TUI rendering #[derive(Debug, Clone)] pub struct TuiSender { - primary: mpsc::Sender, + primary: mpsc::UnboundedSender, } /// Struct for receiving app events pub struct AppReceiver { - primary: mpsc::Receiver, + primary: mpsc::UnboundedReceiver, } impl TuiSender { @@ -23,7 +24,17 @@ impl TuiSender { /// AppSender is meant to be held by the actual task runner /// AppReceiver should be passed to `crate::tui::run_app` pub fn new() -> (Self, AppReceiver) { - let (primary_tx, primary_rx) = mpsc::channel(); + let (primary_tx, primary_rx) = mpsc::unbounded_channel(); + let tick_sender = primary_tx.clone(); + tokio::spawn(async move { + let mut interval = tokio::time::interval(FRAMERATE); + loop { + interval.tick().await; + if tick_sender.send(Event::Tick).is_err() { + break; + } + } + }); ( Self { primary: primary_tx, @@ -70,13 +81,13 @@ impl TuiSender { } /// Stop rendering TUI and restore terminal to default configuration - pub fn stop(&self) { - let (callback_tx, callback_rx) = mpsc::sync_channel(1); + pub async fn stop(&self) { + let (callback_tx, callback_rx) = oneshot::channel(); // Send stop event, if receiver has dropped ignore error as // it'll be a no-op. self.primary.send(Event::Stop(callback_tx)).ok(); // Wait for callback to be sent or the channel closed. - callback_rx.recv().ok(); + callback_rx.await.ok(); } /// Update the list of tasks displayed in the TUI @@ -103,23 +114,19 @@ impl TuiSender { } /// Fetches the size of the terminal pane - pub fn pane_size(&self) -> Option { - let (callback_tx, callback_rx) = mpsc::sync_channel(1); + pub async fn pane_size(&self) -> Option { + let (callback_tx, callback_rx) = oneshot::channel(); // Send query, if no receiver to handle the request return None self.primary.send(Event::PaneSizeQuery(callback_tx)).ok()?; // Wait for callback to be sent - callback_rx.recv().ok() + callback_rx.await.ok() } } impl AppReceiver { /// Receive an event, producing a tick event if no events are rec eived by /// the deadline. - pub fn recv(&self, deadline: Instant) -> Result { - match self.primary.recv_deadline(deadline) { - Ok(event) => Ok(event), - Err(mpsc::RecvTimeoutError::Timeout) => Ok(Event::Tick), - Err(mpsc::RecvTimeoutError::Disconnected) => Err(mpsc::RecvError), - } + pub async fn recv(&mut self) -> Option { + self.primary.recv().await } } diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index 0dcc585bf00c3..6fca06a13505c 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -1,45 +1,51 @@ -use std::time::Duration; - -use crossterm::event::{KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; +use crossterm::event::{EventStream, KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; +use futures::StreamExt; +use tokio::{sync::mpsc, task::JoinHandle}; use super::{ app::LayoutSections, event::{Direction, Event}, - Error, }; #[derive(Debug, Clone, Copy)] pub struct InputOptions<'a> { pub focus: &'a LayoutSections, - pub tty_stdin: bool, pub has_selection: bool, } -/// Return any immediately available event -pub fn input(options: InputOptions) -> Result, Error> { - // If stdin is not a tty, then we do not attempt to read from it - if !options.tty_stdin { - return Ok(None); +pub fn start_crossterm_stream(tx: mpsc::Sender) -> Option> { + // quick check if stdin is tty + if !atty::is(atty::Stream::Stdin) { + return None; } - // poll with 0 duration will only return true if event::read won't need to wait - // for input - if crossterm::event::poll(Duration::from_millis(0))? { - match crossterm::event::read()? { - crossterm::event::Event::Key(k) => Ok(translate_key_event(options, k)), + + let mut events = EventStream::new(); + Some(tokio::spawn(async move { + while let Some(Ok(event)) = events.next().await { + if tx.send(event).await.is_err() { + break; + } + } + })) +} + +impl<'a> InputOptions<'a> { + /// Maps a crossterm::event::Event to a tui::Event + pub fn handle_crossterm_event(self, event: crossterm::event::Event) -> Option { + match event { + crossterm::event::Event::Key(k) => translate_key_event(self, k), crossterm::event::Event::Mouse(m) => match m.kind { - crossterm::event::MouseEventKind::ScrollDown => Ok(Some(Event::ScrollDown)), - crossterm::event::MouseEventKind::ScrollUp => Ok(Some(Event::ScrollUp)), + crossterm::event::MouseEventKind::ScrollDown => Some(Event::ScrollDown), + crossterm::event::MouseEventKind::ScrollUp => Some(Event::ScrollUp), crossterm::event::MouseEventKind::Down(crossterm::event::MouseButton::Left) | crossterm::event::MouseEventKind::Drag(crossterm::event::MouseButton::Left) => { - Ok(Some(Event::Mouse(m))) + Some(Event::Mouse(m)) } - _ => Ok(None), + _ => None, }, - crossterm::event::Event::Resize(cols, rows) => Ok(Some(Event::Resize { rows, cols })), - _ => Ok(None), + crossterm::event::Event::Resize(cols, rows) => Some(Event::Resize { rows, cols }), + _ => None, } - } else { - Ok(None) } } diff --git a/crates/turborepo-ui/src/tui/mod.rs b/crates/turborepo-ui/src/tui/mod.rs index 6b0ce05538777..5e0995829d507 100644 --- a/crates/turborepo-ui/src/tui/mod.rs +++ b/crates/turborepo-ui/src/tui/mod.rs @@ -17,7 +17,7 @@ use clipboard::copy_to_clipboard; use debouncer::Debouncer; use event::{Event, TaskResult}; pub use handle::{AppReceiver, TuiSender}; -use input::{input, InputOptions}; +use input::InputOptions; pub use pane::TerminalPane; use size::SizeInfo; pub use table::TaskTable; diff --git a/crates/turborepo-ui/src/tui/search.rs b/crates/turborepo-ui/src/tui/search.rs index eabced60bc0e5..23044a5bc09b9 100644 --- a/crates/turborepo-ui/src/tui/search.rs +++ b/crates/turborepo-ui/src/tui/search.rs @@ -1,4 +1,4 @@ -use std::{collections::HashSet, rc::Rc}; +use std::{collections::HashSet, sync::Arc}; use super::task::TasksByStatus; @@ -9,8 +9,8 @@ pub struct SearchResults { // - Rc for cheap clones since elements in `matches` will always be in `tasks` as well // - Rc implements Borrow meaning we can query a `HashSet>` using a `&str` // We do not modify the provided task names so we do not need the capabilities of String. - tasks: Vec>, - matches: HashSet>, + tasks: Vec>, + matches: HashSet>, } impl SearchResults { @@ -18,7 +18,7 @@ impl SearchResults { Self { tasks: tasks .task_names_in_displayed_order() - .map(Rc::from) + .map(Arc::from) .collect(), query: String::new(), matches: HashSet::new(), @@ -29,7 +29,7 @@ impl SearchResults { pub fn update_tasks(&mut self, tasks: &TasksByStatus) { self.tasks.clear(); self.tasks - .extend(tasks.task_names_in_displayed_order().map(Rc::from)); + .extend(tasks.task_names_in_displayed_order().map(Arc::from)); self.update_matches(); } From 1866d7ea2f5ce14a666a090c82eedaa4140f259d Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 17 Oct 2024 12:22:55 -0400 Subject: [PATCH 079/218] chore: fix flakey log stream integration test (#9279) ### Description I've noticed this integration test has been flakey lately: - https://github.com/vercel/turborepo/actions/runs/11387765428/job/31683165527 - https://github.com/vercel/turborepo/actions/runs/11386983833/job/31680539914 - https://github.com/vercel/turborepo/actions/runs/11356438462/job/31587646091 Partially reverts changes from #9236 for the cases that I've seen fail. I don't remember this test being flakey before, so I'm changing it back. I'm assuming we're now capturing [some lines](https://github.com/vercel/turborepo/blob/ef2dc90030c6103393d42bdd5fb7f3584f1466a8/turborepo-tests/integration/tests/run-logging/log-order-stream.t#L47) that aren't deterministic in ordering. ### Testing Instructions Ran the test a few times and didn't get any failures. Hopefully CI is green. --- .../integration/tests/run-logging/log-order-stream.t | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/turborepo-tests/integration/tests/run-logging/log-order-stream.t b/turborepo-tests/integration/tests/run-logging/log-order-stream.t index c3d3ef9b9a1cc..0921b6db9c5b4 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-stream.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-stream.t @@ -35,6 +35,7 @@ it just guarantees setting this env var won't crash. \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) + (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) .* (re) .* (re) .* (re) @@ -44,7 +45,6 @@ it just guarantees setting this env var won't crash. .* (re) .* (re) .* (re) - my-app:build: building util:build: building my-app:build: done util:build: completed @@ -61,6 +61,8 @@ The flag wins over the env var \xe2\x80\xa2 Packages in scope: my-app, util (esc) \xe2\x80\xa2 Running build in 2 packages (esc) \xe2\x80\xa2 Remote caching disabled (esc) + (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) + (my-app|util):build: cache bypass, force executing [0-9a-f]+ (re) .* (re) .* (re) .* (re) @@ -70,8 +72,6 @@ The flag wins over the env var .* (re) .* (re) .* (re) - (my-app|util):build: (re) - (my-app:build): building (re) util:build: building my-app:build: done util:build: completed From eae5582de316ebce686f91f92be14252d0fe3629 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 12:44:22 -0400 Subject: [PATCH 080/218] release(turborepo): 2.1.4-canary.9 (#9280) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 8d7a03804c0cf..5f460daf53257 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 9826433d9f144..90db1d9acb83b 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index e349216a393a8..cc4e1e105b63c 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 42c46cfe576f6..b2e7eedf89559 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index f856b1e49312a..bd2a28af67cd5 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 13bca94fd831b..8968b09775ef1 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index a103ee1665983..73133e3aee5f0 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 406eaacbfeac0..2376f68a15a42 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 750a6461a0498..7f22a9ec4ae46 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.8", + "version": "2.1.4-canary.9", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.8", - "turbo-darwin-arm64": "2.1.4-canary.8", - "turbo-linux-64": "2.1.4-canary.8", - "turbo-linux-arm64": "2.1.4-canary.8", - "turbo-windows-64": "2.1.4-canary.8", - "turbo-windows-arm64": "2.1.4-canary.8" + "turbo-darwin-64": "2.1.4-canary.9", + "turbo-darwin-arm64": "2.1.4-canary.9", + "turbo-linux-64": "2.1.4-canary.9", + "turbo-linux-arm64": "2.1.4-canary.9", + "turbo-windows-64": "2.1.4-canary.9", + "turbo-windows-arm64": "2.1.4-canary.9" } } diff --git a/version.txt b/version.txt index ff1c36473113c..ad277bc1a4f8a 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.8 +2.1.4-canary.9 canary From ae18f263e69cc456d7f9f9eda54f999ee44f68d4 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 17 Oct 2024 14:49:16 -0400 Subject: [PATCH 081/218] feat(query): variables (#9260) ### Description Inject variables into a query using a json file. ### Testing Instructions Added tests to `tests/query/variables.t` --- crates/turborepo-lib/src/cli/mod.rs | 9 +++- crates/turborepo-lib/src/commands/query.rs | 17 ++++++- .../integration/tests/query/variables.t | 44 +++++++++++++++++++ 3 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 turborepo-tests/integration/tests/query/variables.t diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index fc14a368e0d2d..56a939d9a45e2 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -606,6 +606,9 @@ pub enum Command { /// GraphQL server with GraphiQL. #[clap(hide = true)] Query { + /// Pass variables to the query via a JSON file + #[clap(short = 'V', long, requires = "query")] + variables: Option, /// The query to run, either a file path or a query string query: Option, }, @@ -1343,14 +1346,16 @@ pub async fn run( })?; Ok(exit_code) } - Command::Query { query } => { + Command::Query { query, variables } => { warn!("query command is experimental and may change in the future"); let query = query.clone(); + let variables = variables.clone(); let event = CommandEventBuilder::new("query").with_parent(&root_telemetry); event.track_call(); + let base = CommandBase::new(cli_args, repo_root, version, color_config); - let query = query::run(base, event, query).await?; + let query = query::run(base, event, query, variables.as_deref()).await?; Ok(query) } diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index 6d367bd562688..24fac3e27e66c 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -1,6 +1,7 @@ use std::{fs, sync::Arc}; -use async_graphql::{EmptyMutation, EmptySubscription, Schema, ServerError}; +use async_graphql::{EmptyMutation, EmptySubscription, Request, Schema, ServerError, Variables}; +use camino::Utf8Path; use miette::{Diagnostic, Report, SourceSpan}; use thiserror::Error; use turbopath::AbsoluteSystemPathBuf; @@ -58,6 +59,7 @@ pub async fn run( mut base: CommandBase, telemetry: CommandEventBuilder, query: Option, + variables_path: Option<&Utf8Path>, ) -> Result { let signal = get_signal()?; let handler = SignalHandler::new(signal); @@ -92,7 +94,18 @@ pub async fn run( EmptySubscription, ); - let result = schema.execute(&query).await; + let variables: Variables = variables_path + .map(AbsoluteSystemPathBuf::from_cwd) + .transpose()? + .map(|path| path.read_to_string()) + .transpose()? + .map(|content| serde_json::from_str(&content)) + .transpose()? + .unwrap_or_default(); + + let request = Request::new(&query).variables(variables); + + let result = schema.execute(request).await; if result.errors.is_empty() { println!("{}", serde_json::to_string_pretty(&result)?); } else { diff --git a/turborepo-tests/integration/tests/query/variables.t b/turborepo-tests/integration/tests/query/variables.t new file mode 100644 index 0000000000000..c51caeb9a34c6 --- /dev/null +++ b/turborepo-tests/integration/tests/query/variables.t @@ -0,0 +1,44 @@ +Setup + $ . ${TESTDIR}/../../../helpers/setup_integration_test.sh + +Create a variables file + $ echo '{ "name": "my-app" }' > vars.json + +Query packages + $ ${TURBO} query 'query($name: String) { package(name: $name) { name } }' --variables vars.json | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "name": "my-app" + } + } + } + +Write query to file + $ echo 'query($name: String) { package(name: $name) { name } }' > query.gql + +Run the query + $ ${TURBO} query query.gql --variables vars.json | jq + WARNING query command is experimental and may change in the future + { + "data": { + "package": { + "name": "my-app" + } + } + } + +Make sure we can't pass variables without a query + $ ${TURBO} query --variables vars.json + ERROR the following required arguments were not provided: + + + Usage: turbo(.exe)? query --variables (re) + + For more information, try '--help'. + + [1] + + + From 4a1f5fc04c9b3af1e18cdee27e18e26e5558a55f Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 17 Oct 2024 14:56:26 -0400 Subject: [PATCH 082/218] docs: query documentation (#9258) ### Description Documenting the new `turbo query` command. Also includes some fixes for previously hidden parts and a general guide on understanding your repository. ### Testing Instructions --------- Co-authored-by: Dimitri Mitropoulos --- .../crafting-your-repository/index.mdx | 124 +++++----- .../crafting-your-repository/meta.json | 3 +- .../understanding-your-repository.mdx | 145 ++++++++++++ docs/repo-docs/reference/index.mdx | 224 ++++++++++-------- docs/repo-docs/reference/meta.json | 1 + docs/repo-docs/reference/query.mdx | 32 +++ 6 files changed, 364 insertions(+), 165 deletions(-) create mode 100644 docs/repo-docs/crafting-your-repository/understanding-your-repository.mdx create mode 100644 docs/repo-docs/reference/query.mdx diff --git a/docs/repo-docs/crafting-your-repository/index.mdx b/docs/repo-docs/crafting-your-repository/index.mdx index dbfb19515ad8e..67b7cfe872a56 100644 --- a/docs/repo-docs/crafting-your-repository/index.mdx +++ b/docs/repo-docs/crafting-your-repository/index.mdx @@ -21,65 +21,71 @@ By the time you've read through all of this section, you should have a good unde ## From zero to `turbo` - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + ## More guides diff --git a/docs/repo-docs/crafting-your-repository/meta.json b/docs/repo-docs/crafting-your-repository/meta.json index d31bed8b9df28..b6c39902c0b6e 100644 --- a/docs/repo-docs/crafting-your-repository/meta.json +++ b/docs/repo-docs/crafting-your-repository/meta.json @@ -10,6 +10,7 @@ "developing-applications", "using-environment-variables", "constructing-ci", - "upgrading" + "upgrading", + "understanding-your-repository" ] } diff --git a/docs/repo-docs/crafting-your-repository/understanding-your-repository.mdx b/docs/repo-docs/crafting-your-repository/understanding-your-repository.mdx new file mode 100644 index 0000000000000..b126547e29316 --- /dev/null +++ b/docs/repo-docs/crafting-your-repository/understanding-your-repository.mdx @@ -0,0 +1,145 @@ +--- +title: Understanding your repository +description: Learn how to understand your repository structure using Turborepo. +--- + +Turborepo includes tools for understanding your repository structure, that can help you use and optimize your codebase. + +## `turbo ls` + +To list your packages, you can run `turbo ls`. This will show the packages in your repository and where they're located. + +```bash title="Terminal" +> turbo ls +turbo 2.1.3 + + WARNING ls command is experimental and may change in the future +5 packages (pnpm9) + + @repo/eslint-config packages/eslint-config + @repo/typescript-config packages/typescript-config + @repo/ui packages/ui + docs apps/docs + web apps/web +``` + +You can [apply filters](/repo/docs/crafting-your-repository/running-tasks#using-filters) to `ls`, just like `run`: + +```bash title="Terminal" +> turbo ls --filter ...ui +3 packages (pnpm9) + + @repo/ui packages/ui + docs apps/docs + web apps/web +``` + +## `turbo run` + +To determine which tasks can be run in your monorepo, simply call `turbo run` without any tasks. You will get a list of +tasks and the packages in which they are defined: + +```bash title="Terminal" +> turbo run +No tasks provided, here are some potential ones to run + + lint + @repo/ui, docs, web + build + docs, web + dev + docs, web + start + docs, web + generate:component + @repo/ui +``` + +## `turbo query` + +If you wish to dig into your repository structure, since `2.2.0`, Turbo provides a GraphQL interface into your repository +via `turbo query`. You can execute queries such as finding all packages that have a `test` task: + +```bash title="Terminal" +> turbo query "query { packages(filter: { has: { field: TASK_NAME, value: \"build\"}}) { items { name } } }" +{ + "data": { + "packages": { + "items": [ + { + "name": "//" + }, + { + "name": "docs" + }, + { + "name": "web" + } + ] + } + } +} +``` + +This can be helpful for diagnosing potential problems in your package or task dependency graph. For instance, let's say +you're getting a lot of cache misses in your builds. This could be because there's a package that keeps getting changed +and is imported throughout your codebase. + +To do this, we can run a query to find packages that are directly imported more than 10 times in your monorepo: + +```bash title="Terminal" +> turbo query "query { packages(filter: { greaterThan: { field: DIRECT_DEPENDENT_COUNT, value: 10 } }) { items { name } } }" +{ + "data": { + "packages": { + "items": [ + { + "name": "utils" + } + ] + } + } +} +``` + +Now that we've found this package, we can try to split it up into smaller packages so that a small change won't +invalidate the whole dependency graph. + +Or let's say you're using our new `--affected` flag, but you're still running more tasks than you'd like. +With `turbo query`, you can find all the packages and the reason why they were invalidated: + +```bash title="Terminal" +> turbo query "query { affectedPackages(base: \"HEAD^\", head: \"HEAD\") { items { reason { __typename } } } }" +{ + "data": { + "affectedPackages": { + "items": [ + { + "name": "utils", + "reason": { + "__typename": "FileChanged" + } + }, + { + "name": "web", + "reason": { + "__typename": "DependencyChanged" + } + }, + { + "name": "docs", + "reason": { + "__typename": "DependencyChanged" + } + }, + { + "name": "cli", + "reason": { + "__typename": "DependencyChanged" + } + }, + ] + } + } +} +``` diff --git a/docs/repo-docs/reference/index.mdx b/docs/repo-docs/reference/index.mdx index 7559f46d7dd60..b822e76cb3e9c 100644 --- a/docs/repo-docs/reference/index.mdx +++ b/docs/repo-docs/reference/index.mdx @@ -10,121 +10,135 @@ Turborepo's API reference is broken up into the following sections: ## Configuration - - - - - - - + + + + + + + + ## Commands - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + ## Packages - - - - - - - + + + + + + + + ## Flag syntax diff --git a/docs/repo-docs/reference/meta.json b/docs/repo-docs/reference/meta.json index ecb08ff021a14..05d3e5dd8c3b1 100644 --- a/docs/repo-docs/reference/meta.json +++ b/docs/repo-docs/reference/meta.json @@ -11,6 +11,7 @@ "watch", "prune", "ls", + "query", "generate", "scan", "login", diff --git a/docs/repo-docs/reference/query.mdx b/docs/repo-docs/reference/query.mdx new file mode 100644 index 0000000000000..4c64347d941a4 --- /dev/null +++ b/docs/repo-docs/reference/query.mdx @@ -0,0 +1,32 @@ +--- +title: query +description: API reference for the `turbo query` command +--- + +import { ExperimentalBadge } from '#/components/experimental-badge'; + + + +Run GraphQL queries against your monorepo. + +```bash title="Terminal" +turbo query [query] [flags] +``` + +When no arguments are passed, the command will open a GraphiQL playground to run queries. + +```bash title="Terminal" +turbo query +``` + +When passed a query string, the command will run the query and output the results. + +```bash title="Terminal" +turbo query "query { packages { items { name } } }" +``` + +When passed a file path, the command will read the file and run the query. + +```bash title="Terminal" +turbo query query.gql +``` From 6ac04568074c6d2a8df63fbc6ae13c71ad36a890 Mon Sep 17 00:00:00 2001 From: Mehul Kar Date: Fri, 18 Oct 2024 08:53:12 -0500 Subject: [PATCH 083/218] chore(ci): enable corepack for npm in integration tests (#9233) --- turborepo-tests/helpers/setup_package_manager.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/turborepo-tests/helpers/setup_package_manager.sh b/turborepo-tests/helpers/setup_package_manager.sh index a860d4302c379..829e67478dc4b 100755 --- a/turborepo-tests/helpers/setup_package_manager.sh +++ b/turborepo-tests/helpers/setup_package_manager.sh @@ -33,5 +33,10 @@ else COREPACK_INSTALL_DIR_CMD="--install-directory=${COREPACK_INSTALL_DIR}" fi +# get just the packageManager name, without the version +# We pass the name to corepack enable so that it will work for npm also. +# `corepack enable` with no specified packageManager does not work for npm. +pkgManagerName="${pkgManager%%@*}" + # Enable corepack so that the packageManager setting in package.json is respected. -corepack enable "${COREPACK_INSTALL_DIR_CMD}" +corepack enable $pkgManagerName "${COREPACK_INSTALL_DIR_CMD}" From 108d53212eefd529c1f160399eaa4dcb7f4432ec Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Fri, 18 Oct 2024 13:07:31 -0400 Subject: [PATCH 084/218] docs for `--affected` on GitHub (#9283) ### Description see: https://github.com/vercel/turborepo/pull/9169 for context on the implementing code. --- .../crafting-your-repository/constructing-ci.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/repo-docs/crafting-your-repository/constructing-ci.mdx b/docs/repo-docs/crafting-your-repository/constructing-ci.mdx index a55f348ede4e6..2640ada4eb145 100644 --- a/docs/repo-docs/crafting-your-repository/constructing-ci.mdx +++ b/docs/repo-docs/crafting-your-repository/constructing-ci.mdx @@ -72,6 +72,14 @@ You'll want to use this flag in situations like: - You’re already using [advanced filtering techniques](/repo/docs/reference/run#advanced-filtering-examples) or [`turbo-ignore`](/repo/docs/reference/turbo-ignore) to create the same or similar behavior as `--affected`. You likely have the opportunity to simplify your scripting using this new flag. - `--affected` will can handle shallow clones more gracefully than bespoke filtering because it falls back to running all tasks. +#### Using `--affected` in GitHub Actions + +CI/CD pipelines are a perfect place to use `--affected`. With `--affected`, Turborepo can automatically detect that you're running in GitHub Actions by inspecting environment variables set by GitHub, like `GITHUB_BASE_REF`. + +In the context of a PR, this means that Turborepo can determine which packages have changed between the PR's base branch and the PR's head branch. This allows you to run only the tasks that are affected by the changes in the PR. + +While `GITHUB_BASE_REF` works well in `pull_request` and `pull_request_target` events, it is not available during regular push events. In those cases, we use `GITHUB_EVENT_PATH` to determine the base branch to compare your commit to. In force pushes and pushing branch with no additionals commits, we compare to the parent of the first commit on the branch. + ### Using `turbo-ignore` As your codebase and CI grow, you may start to look for more ways to get even faster. While hitting cache is useful, you also may be able to skip work entirely. Using `turbo-ignore`, you can skip lengthy container preparation steps like dependency installation that will end up resulting in a cache hit, anyway. From 36a0f1e0775139da64deee62ae9140a7e7b51cc3 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 18 Oct 2024 13:08:15 -0400 Subject: [PATCH 085/218] docs: interruptible (#9282) ### Description Docs for `interruptible` in watch mode ### Testing Instructions --- docs/repo-docs/reference/configuration.mdx | 13 ++++++++++++- docs/repo-docs/reference/watch.mdx | 6 +++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/repo-docs/reference/configuration.mdx b/docs/repo-docs/reference/configuration.mdx index e441112d01f99..4d3a7553c00a0 100644 --- a/docs/repo-docs/reference/configuration.mdx +++ b/docs/repo-docs/reference/configuration.mdx @@ -142,7 +142,8 @@ Turborepo runs a background process to pre-calculate some expensive operations. ``` - When running in a CI environment the daemon is always disabled regardless of this setting. + When running in a CI environment the daemon is always disabled regardless of + this setting. ### `envMode` @@ -481,6 +482,16 @@ This task is most useful for scripts that can be manipulated while they are runn } ``` +### `interruptible` + +Default: `false` + +Label a `persistent` task as `interruptible` to allow it to be restarted by `turbo watch`. + +`turbo watch` watches for changes to your packages and automatically restarts tasks +that are affected. However, if a task is persistent, it will not be restarted by default. +To enable restarting persistent tasks, set `interruptible` to `true`. + ## Remote caching The global `remoteCache` option has a variety of fields for configuring remote cache usage diff --git a/docs/repo-docs/reference/watch.mdx b/docs/repo-docs/reference/watch.mdx index 487161a6404b3..fdf254323c3df 100644 --- a/docs/repo-docs/reference/watch.mdx +++ b/docs/repo-docs/reference/watch.mdx @@ -23,9 +23,9 @@ When your script has a built-in watcher (like `next dev`) capable of detecting c ### Persistent tasks without dependency awareness -Some tools aren't monorepo-friendly, and do not hot-reload modules in dependencies. While you may be tempted to use `turbo watch` with these tasks, they still won't be able to pick up on changes to dependencies. - -Instead, you should make the task non-persistent and have `turbo watch` restart the task when changes to dependencies are detected. +Some tools aren't monorepo-friendly, and do not hot-reload modules in dependencies. In those cases, you should +mark the task as [`interruptible: true`](/repo/docs/reference/configuration#interruptible) to have `turbo watch` +restart the task when relevant changes are detected. ## Limitations From 01bddab08937ce437e9bd8a0f17c129211012cbe Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 18 Oct 2024 14:07:36 -0400 Subject: [PATCH 086/218] chore: unhide query (#9286) ### Description Pretty self explanatory ### Testing Instructions --- crates/turborepo-lib/src/cli/mod.rs | 1 - turborepo-tests/integration/tests/no-args.t | 1 + turborepo-tests/integration/tests/turbo-help.t | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 56a939d9a45e2..318bf6759a4dd 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -604,7 +604,6 @@ pub enum Command { }, /// Query your monorepo using GraphQL. If no query is provided, spins up a /// GraphQL server with GraphiQL. - #[clap(hide = true)] Query { /// Pass variables to the query via a JSON file #[clap(short = 'V', long, requires = "query")] diff --git a/turborepo-tests/integration/tests/no-args.t b/turborepo-tests/integration/tests/no-args.t index a508040296d85..72848871ce25c 100644 --- a/turborepo-tests/integration/tests/no-args.t +++ b/turborepo-tests/integration/tests/no-args.t @@ -20,6 +20,7 @@ Make sure exit code is 2 when no args are passed logout Logout to your Vercel account prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo + query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL watch Arguments used in run and watch unlink Unlink the current directory from your Vercel organization and disable Remote Caching diff --git a/turborepo-tests/integration/tests/turbo-help.t b/turborepo-tests/integration/tests/turbo-help.t index 0ea98403d9752..0fd66d1c3d7be 100644 --- a/turborepo-tests/integration/tests/turbo-help.t +++ b/turborepo-tests/integration/tests/turbo-help.t @@ -20,6 +20,7 @@ Test help flag logout Logout to your Vercel account prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo + query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL watch Arguments used in run and watch unlink Unlink the current directory from your Vercel organization and disable Remote Caching @@ -140,6 +141,7 @@ Test help flag logout Logout to your Vercel account prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo + query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL watch Arguments used in run and watch unlink Unlink the current directory from your Vercel organization and disable Remote Caching From 7f157ce2514dd2e3baa34b49a3887fb4473f827f Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Fri, 18 Oct 2024 14:52:50 -0400 Subject: [PATCH 087/218] feat(docs): platform env docs (#9281) --- .../using-environment-variables.mdx | 11 +++- .../system-environment-variables.mdx | 56 ++++++++++--------- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx index fec308e2430bd..ea3d1d6f01dc1 100644 --- a/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx +++ b/docs/repo-docs/crafting-your-repository/using-environment-variables.mdx @@ -63,7 +63,9 @@ Turborepo automatically adds prefix wildcards to your [`env`](/repo/docs/referen Framework - env wildcards + + env wildcards + @@ -147,6 +149,13 @@ You then build your application using a value for `MY_API_URL` that targets your When you're using Loose Mode, `MY_API_URL` is available in the task runtime **even though it isn't accounted for in the task hash**. To make this task more likely to fail and protect you from this misconfiguration, we encourage you to opt for [Strict Mode](#strict-mode). +### Platform Environment Variables + +When deploying your application to [Vercel](https://vercel.com/new?ref=turborepo), you likely already have [environment variables](https://vercel.com/docs/projects/environment-variables) configured on your project. Turborepo will automatically check these variables against your `turbo.json` configuration to ensure that you've [accounted for them](/repo/docs/crafting-your-repository/using-environment-variables#adding-environment-variables-to-task-hashes), +and will warn you about any missing variables. + +This functionality can be disabled by setting `TURBO_PLATFORM_ENV_DISABLED=false` + ## Handling `.env` files `.env` files are great for working on an application locally. **Turborepo does not load .env files into your task's runtime**, leaving them to be handled by your framework, or tools like [`dotenv`](https://www.npmjs.com/package/dotenv). diff --git a/docs/repo-docs/reference/system-environment-variables.mdx b/docs/repo-docs/reference/system-environment-variables.mdx index b6ffc11671217..b0cd9c9069474 100644 --- a/docs/repo-docs/reference/system-environment-variables.mdx +++ b/docs/repo-docs/reference/system-environment-variables.mdx @@ -9,33 +9,35 @@ By setting certain environment variables, you can change Turborepo's behavior. T System environment variables are always overridden by flag values provided directly to your `turbo` commands. -| Variable | Description | -| ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `TURBO_API` | Set the base URL for [Remote Cache](/repo/docs/core-concepts/remote-caching). | -| `TURBO_BINARY_PATH` | Manually set the path to the `turbo` binary. By default, `turbo` will automatically discover the binary so you should only use this in rare circumstances. | -| `TURBO_CACHE_DIR` | Sets the cache directory, similar to using [`--cache-dir`](/repo/docs/reference/run#--cache-dir-path) flag | -| `TURBO_CI_VENDOR_ENV_KEY` | Set a prefix for environment variables that you want **excluded** from [Framework Inference](/repo/docs/crafting-your-repository/using-environment-variables#framework-inference). | -| `TURBO_DANGEROUSLY_DISABLE_PACKAGE_MANAGER_CHECK` | Disable checking the `packageManager` field in `package.json`. You may run into [errors and unexpected caching behavior](/repo/docs/reference/run#--dangerously-disable-package-manager-check) when disabling this check. Use `true` or `1` to disable. | -| `TURBO_DOWNLOAD_LOCAL_ENABLED` | Enables global `turbo` to install the correct local version if one is not found. | -| `TURBO_FORCE` | Always force all tasks to run in full, opting out of all caching. | -| `TURBO_GLOBAL_WARNING_DISABLED` | Disable warning when global `turbo` cannot find a local version to use. | -| `TURBO_PRINT_VERSION_DISABLED` | Disable printing the version of `turbo` that is being executed. | -| `TURBO_LOG_ORDER` | Set the [log order](/repo/docs/reference/run#--log-order-option). Allowed values are `grouped` and `default`. | -| `TURBO_LOGIN` | Set the URL used to log in to [Remote Cache](/repo/docs/core-concepts/remote-caching). | -| `TURBO_NO_UPDATE_NOTIFIER` | Remove the update notifier that appears when a new version of `turbo` is available. You can also use `NO_UPDATE_NOTIFIER` per ecosystem convention. | -| `TURBO_PREFLIGHT` | Enables sending a preflight request before every cache artifact and analytics request. The follow-up upload and download will follow redirects. Only applicable when [Remote Caching](/repo/docs/core-concepts/remote-caching) is configured. | -| `TURBO_REMOTE_CACHE_READ_ONLY` | Prevent writing to the [Remote Cache](/repo/docs/core-concepts/remote-caching) - but still allow reading. | -| `TURBO_REMOTE_CACHE_SIGNATURE_KEY` | Sign artifacts with a secret key. For more information, visit [the Artifact Integrity section](/repo/docs/core-concepts/remote-caching#artifact-integrity-and-authenticity-verification). | -| `TURBO_REMOTE_CACHE_TIMEOUT` | Set a timeout in seconds for `turbo` to get artifacts from [Remote Cache](/repo/docs/core-concepts/remote-caching). | -| `TURBO_REMOTE_ONLY` | Always ignore the local filesystem cache for all tasks. | -| `TURBO_RUN_SUMMARY` | Generate a [Run Summary](/repo/docs/reference/run#--summarize) when you run tasks. | -| `TURBO_SCM_BASE` | Base used by `--affected` when calculating what has changed from `base...head` | -| `TURBO_SCM_HEAD` | Head used by `-affected` when calculating what has changed from `base...head` | -| `TURBO_TEAM` | The account name associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's slug. | -| `TURBO_TEAMID` | The account identifier associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's ID. | -| `TURBO_TELEMETRY_MESSAGE_DISABLED` | Disable the message notifying you that [Telemetry](/repo/docs/telemetry) is enabled. | -| `TURBO_TOKEN` | The Bearer token for authentication to access [Remote Cache](/repo/docs/core-concepts/remote-caching). | -| `TURBO_UI` | Enables TUI when passed true or 1, disables when passed false or 0. | +| Variable | Description | +| ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `TURBO_API` | Set the base URL for [Remote Cache](/repo/docs/core-concepts/remote-caching). | +| `TURBO_BINARY_PATH` | Manually set the path to the `turbo` binary. By default, `turbo` will automatically discover the binary so you should only use this in rare circumstances. | +| `TURBO_CACHE_DIR` | Sets the cache directory, similar to using [`--cache-dir`](/repo/docs/reference/run#--cache-dir-path) flag | +| `TURBO_CI_VENDOR_ENV_KEY` | Set a prefix for environment variables that you want **excluded** from [Framework Inference](/repo/docs/crafting-your-repository/using-environment-variables#framework-inference). **NOTE**: This does not need to be set by the user and should be configured automatically by supported platforms. | +| `TURBO_DANGEROUSLY_DISABLE_PACKAGE_MANAGER_CHECK` | Disable checking the `packageManager` field in `package.json`. You may run into [errors and unexpected caching behavior](/repo/docs/reference/run#--dangerously-disable-package-manager-check) when disabling this check. Use `true` or `1` to disable. | +| `TURBO_DOWNLOAD_LOCAL_ENABLED` | Enables global `turbo` to install the correct local version if one is not found. | +| `TURBO_FORCE` | Always force all tasks to run in full, opting out of all caching. | +| `TURBO_GLOBAL_WARNING_DISABLED` | Disable warning when global `turbo` cannot find a local version to use. | +| `TURBO_PRINT_VERSION_DISABLED` | Disable printing the version of `turbo` that is being executed. | +| `TURBO_LOG_ORDER` | Set the [log order](/repo/docs/reference/run#--log-order-option). Allowed values are `grouped` and `default`. | +| `TURBO_LOGIN` | Set the URL used to log in to [Remote Cache](/repo/docs/core-concepts/remote-caching). | +| `TURBO_NO_UPDATE_NOTIFIER` | Remove the update notifier that appears when a new version of `turbo` is available. You can also use `NO_UPDATE_NOTIFIER` per ecosystem convention. | +| `TURBO_PLATFORM_ENV` | A CSV of environment variable keys that are configured in a supported CI environment (Vercel). **NOTE**: This does not need to be set by the user and should be configured automatically by supported platforms. | +| `TURBO_PLATFORM_ENV_DISABLED` | Disable checking environment variables configured in your `turbo.json` against those set on your supported platform | +| `TURBO_PREFLIGHT` | Enables sending a preflight request before every cache artifact and analytics request. The follow-up upload and download will follow redirects. Only applicable when [Remote Caching](/repo/docs/core-concepts/remote-caching) is configured. | +| `TURBO_REMOTE_CACHE_READ_ONLY` | Prevent writing to the [Remote Cache](/repo/docs/core-concepts/remote-caching) - but still allow reading. | +| `TURBO_REMOTE_CACHE_SIGNATURE_KEY` | Sign artifacts with a secret key. For more information, visit [the Artifact Integrity section](/repo/docs/core-concepts/remote-caching#artifact-integrity-and-authenticity-verification). | +| `TURBO_REMOTE_CACHE_TIMEOUT` | Set a timeout in seconds for `turbo` to get artifacts from [Remote Cache](/repo/docs/core-concepts/remote-caching). | +| `TURBO_REMOTE_ONLY` | Always ignore the local filesystem cache for all tasks. | +| `TURBO_RUN_SUMMARY` | Generate a [Run Summary](/repo/docs/reference/run#--summarize) when you run tasks. | +| `TURBO_SCM_BASE` | Base used by `--affected` when calculating what has changed from `base...head` | +| `TURBO_SCM_HEAD` | Head used by `-affected` when calculating what has changed from `base...head` | +| `TURBO_TEAM` | The account name associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's slug. | +| `TURBO_TEAMID` | The account identifier associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's ID. | +| `TURBO_TELEMETRY_MESSAGE_DISABLED` | Disable the message notifying you that [Telemetry](/repo/docs/telemetry) is enabled. | +| `TURBO_TOKEN` | The Bearer token for authentication to access [Remote Cache](/repo/docs/core-concepts/remote-caching). | +| `TURBO_UI` | Enables TUI when passed true or 1, disables when passed false or 0. | ## Environment variables in tasks From 5c36b0b451428c62a42deaeb82ca02130fb1d8c1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 15:26:02 -0400 Subject: [PATCH 088/218] release(turborepo): 2.2.0 (#9287) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 5f460daf53257..c485e799ec6fe 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 90db1d9acb83b..622d4c8c84e16 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index cc4e1e105b63c..6a3998955dbf8 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b2e7eedf89559..1f8b85e6e6431 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index bd2a28af67cd5..e98f1849d9c03 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 8968b09775ef1..ffe80d94a60b1 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 73133e3aee5f0..dc77102699473 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 2376f68a15a42..cfce59ca1c94b 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 7f22a9ec4ae46..8ede5acf7dc06 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.1.4-canary.9", + "version": "2.2.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.1.4-canary.9", - "turbo-darwin-arm64": "2.1.4-canary.9", - "turbo-linux-64": "2.1.4-canary.9", - "turbo-linux-arm64": "2.1.4-canary.9", - "turbo-windows-64": "2.1.4-canary.9", - "turbo-windows-arm64": "2.1.4-canary.9" + "turbo-darwin-64": "2.2.0", + "turbo-darwin-arm64": "2.2.0", + "turbo-linux-64": "2.2.0", + "turbo-linux-arm64": "2.2.0", + "turbo-windows-64": "2.2.0", + "turbo-windows-arm64": "2.2.0" } } diff --git a/version.txt b/version.txt index ad277bc1a4f8a..35cc2de15bffc 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.1.4-canary.9 -canary +2.2.0 +latest From 9375ef90aaecf2fdb6260af4d808de8c4c476533 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Fri, 18 Oct 2024 16:24:47 -0400 Subject: [PATCH 089/218] handle VERCEL_ARTIFACTS_* env vars override (#9249) ### Description The prior intended state of EnvVars overrides looked like this:
`VERCEL_ARTIFACTS_*` always wins



But we've realized this is not good enough. We want to better handle the scenario where users have provided custom remote cache - even if they deploy on Vercel. After this PR, the precedence works like this. 1. if both `TURBO_TEAMID`+`TURBO_TOKEN` are set we use those. if `TURBO_TEAM` is also set, we pass that along, too. 1. if both `TURBO_TEAM`+`TURBO_TOKEN` are set we use those. if `TURBO_TEAMID` is also set we pass that along, too. 1. if both `VERCEL_ARTIFACTS_OWNER`+`VERCEL_ARTIFACTS_TOKEN` are set, we use those (all else is ignored). 1. if both `TURBO_TEAMID`+`TURBO_TEAM`, we pass those along. 1. if just `TURBO_TEAMID` is set, we pass that along. 1. if just `TURBO_TEAM` is set, we pass that along. 1. if both `TURBO_TEAM` and `VERCEL_ARTIFACTS_OWNER` are set, we pass those along 1. if just `VERCEL_ARTIFACTS_OWNER` is set, we pass that along 1. we do not support or consider partial configurations. For example if only `VERCEL_ARTIFACTS_TOKEN` and `TURBO_TEAMID` are set, this is considered undefined/unsupported behavior. The reasons are that: - this shouldn't ever happen - Vercel sets both or none of the `VERCEL_ARTIFACTS_*` family - we tried doing this, but the combinatorial explosion that results is pretty major, and some of the cases are very strange to reason about, considering the above point that we don't expect there to be any genuine scenario where this happens, anyway. ### Testing Instructions Take a look at the newly added tests in `override_env.rs`. You could run turbo while manually setting those same env vars. --------- Co-authored-by: Chris Olszewski --- crates/turborepo-lib/src/config/env.rs | 87 +--- crates/turborepo-lib/src/config/mod.rs | 21 +- .../turborepo-lib/src/config/override_env.rs | 446 ++++++++++++++++++ 3 files changed, 463 insertions(+), 91 deletions(-) create mode 100644 crates/turborepo-lib/src/config/override_env.rs diff --git a/crates/turborepo-lib/src/config/env.rs b/crates/turborepo-lib/src/config/env.rs index 84601bf9f1da8..1f81dba3b0640 100644 --- a/crates/turborepo-lib/src/config/env.rs +++ b/crates/turborepo-lib/src/config/env.rs @@ -189,60 +189,7 @@ impl ResolvedConfigurationOptions for EnvVars { } } -const VERCEL_ARTIFACTS_MAPPING: &[(&str, &str)] = [ - ("vercel_artifacts_token", "token"), - ("vercel_artifacts_owner", "team_id"), -] -.as_slice(); - -pub struct OverrideEnvVars<'a> { - environment: &'a HashMap, - output_map: HashMap<&'static str, String>, -} - -impl<'a> OverrideEnvVars<'a> { - pub fn new(environment: &'a HashMap) -> Result { - let vercel_artifacts_mapping: HashMap<_, _> = - VERCEL_ARTIFACTS_MAPPING.iter().copied().collect(); - - let output_map = map_environment(vercel_artifacts_mapping, environment)?; - Ok(Self { - environment, - output_map, - }) - } - - fn ui(&self) -> Option { - let value = self - .environment - .get(OsStr::new("ci")) - .or_else(|| self.environment.get(OsStr::new("no_color")))?; - match truth_env_var(value.to_str()?)? { - true => Some(UIMode::Stream), - false => None, - } - } -} - -impl<'a> ResolvedConfigurationOptions for OverrideEnvVars<'a> { - fn get_configuration_options( - &self, - _existing_config: &ConfigurationOptions, - ) -> Result { - let ui = self.ui(); - let output = ConfigurationOptions { - team_id: self.output_map.get("team_id").cloned(), - token: self.output_map.get("token").cloned(), - api_url: None, - ui, - ..Default::default() - }; - - Ok(output) - } -} - -fn truth_env_var(s: &str) -> Option { +pub fn truth_env_var(s: &str) -> Option { match s { "true" | "1" => Some(true), "false" | "0" => Some(false), @@ -251,7 +198,13 @@ fn truth_env_var(s: &str) -> Option { } fn map_environment<'a>( + // keys are environment variable names + // values are properties of ConfigurationOptions we want to store the + // values in mapping: HashMap<&str, &'a str>, + + // keys are environment variable names + // values are the values of those environment variables environment: &HashMap, ) -> Result, Error> { let mut output_map = HashMap::new(); @@ -395,30 +348,4 @@ mod test { assert!(!config.run_summary()); assert!(!config.allow_no_turbo_json()); } - - #[test] - fn test_override_env_setting() { - let mut env: HashMap = HashMap::new(); - - let vercel_artifacts_token = "correct-horse-battery-staple"; - let vercel_artifacts_owner = "bobby_tables"; - - env.insert( - "vercel_artifacts_token".into(), - vercel_artifacts_token.into(), - ); - env.insert( - "vercel_artifacts_owner".into(), - vercel_artifacts_owner.into(), - ); - env.insert("ci".into(), "1".into()); - - let config = OverrideEnvVars::new(&env) - .unwrap() - .get_configuration_options(&ConfigurationOptions::default()) - .unwrap(); - assert_eq!(vercel_artifacts_token, config.token.unwrap()); - assert_eq!(vercel_artifacts_owner, config.team_id.unwrap()); - assert_eq!(Some(UIMode::Stream), config.ui); - } } diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index c7ad713ef48ed..a32b592d7eb24 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -1,5 +1,6 @@ mod env; mod file; +mod override_env; mod turbo_json; use std::{collections::HashMap, ffi::OsString, io}; @@ -7,10 +8,11 @@ use std::{collections::HashMap, ffi::OsString, io}; use camino::{Utf8Path, Utf8PathBuf}; use convert_case::{Case, Casing}; use derive_setters::Setters; -use env::{EnvVars, OverrideEnvVars}; +use env::EnvVars; use file::{AuthFile, ConfigFile}; use merge::Merge; use miette::{Diagnostic, NamedSource, SourceSpan}; +use override_env::OverrideEnvVars; use serde::Deserialize; use struct_iterable::Iterable; use thiserror::Error; @@ -219,11 +221,14 @@ pub struct ConfigurationOptions { #[serde(alias = "teamslug")] #[serde(alias = "TeamSlug")] #[serde(alias = "TEAMSLUG")] + /// corresponds to env var TURBO_TEAM pub(crate) team_slug: Option, #[serde(alias = "teamid")] #[serde(alias = "TeamId")] #[serde(alias = "TEAMID")] + /// corresponds to env var TURBO_TEAMID pub(crate) team_id: Option, + /// corresponds to env var TURBO_TOKEN pub(crate) token: Option, pub(crate) signature: Option, pub(crate) preflight: Option, @@ -467,9 +472,9 @@ impl TurborepoConfigBuilder { // These are ordered from highest to lowest priority let sources: [Box; 7] = [ - Box::new(override_env_var_config), Box::new(&self.override_config), Box::new(env_var_config), + Box::new(override_env_var_config), Box::new(local_config), Box::new(global_auth), Box::new(global_config), @@ -561,22 +566,16 @@ mod test { vercel_artifacts_owner.into(), ); - let override_config = ConfigurationOptions { - token: Some("unseen".into()), - team_id: Some("unseen".into()), - ..Default::default() - }; - let builder = TurborepoConfigBuilder { repo_root, - override_config, + override_config: Default::default(), global_config_path: Some(global_config_path), environment: Some(env), }; let config = builder.build().unwrap(); - assert_eq!(config.team_id().unwrap(), vercel_artifacts_owner); - assert_eq!(config.token().unwrap(), vercel_artifacts_token); + assert_eq!(config.team_id().unwrap(), turbo_teamid); + assert_eq!(config.token().unwrap(), turbo_token); assert_eq!(config.spaces_id().unwrap(), "my-spaces-id"); } diff --git a/crates/turborepo-lib/src/config/override_env.rs b/crates/turborepo-lib/src/config/override_env.rs new file mode 100644 index 0000000000000..9ae4f1f0b3b54 --- /dev/null +++ b/crates/turborepo-lib/src/config/override_env.rs @@ -0,0 +1,446 @@ +use std::{ + collections::HashMap, + ffi::{OsStr, OsString}, +}; + +use super::{env::truth_env_var, ConfigurationOptions, Error, ResolvedConfigurationOptions}; +use crate::turbo_json::UIMode; + +/* +Hi! If you're new here: +1. The general pattern is that: + - ConfigurationOptions.token corresponds to TURBO_TOKEN or VERCEL_ARTIFACTS_TOKEN + - ConfigurationOptions.team_id corresponds to TURBO_TEAMID or VERCEL_ARTIFACTS_OWNER + - ConfigurationOptions.team_slug corresponds to TURBO_TEAM +1. We're ultimately poking around the env vars looking for _pairs_ that make sense. + Since we presume that users are the only ones sending TURBO_* and Vercel is the only one sending VERCEL_*, we can make some assumptions. Namely, we assume that if we have one of VERCEL_ARTIFACTS_OWNER or VERCEL_ARTIFACTS_TOKEN we will always have both. +1. Watch out for mixing up `TURBO_TEAM` and `TURBO_TEAMID`. Same for ConfigurationOptions.team_id and ConfigurationOptions.team_slug. +*/ + +/// these correspond directly to the environment variables that this module +/// needs to do it's work +#[allow(non_snake_case)] +#[derive(Default, Debug, PartialEq)] +struct Input { + TURBO_TEAM: Option, + TURBO_TEAMID: Option, + TURBO_TOKEN: Option, + VERCEL_ARTIFACTS_OWNER: Option, + VERCEL_ARTIFACTS_TOKEN: Option, +} + +impl Input { + fn new() -> Self { + Self::default() + } +} + +impl<'a> TryFrom<&'a HashMap> for Input { + type Error = Error; + + fn try_from(environment: &'a HashMap) -> Result { + let get_value = |key: &str| -> Result, Error> { + let Some(value) = environment.get(OsStr::new(key)) else { + return Ok(None); + }; + let value = value + .to_str() + .ok_or_else(|| Error::Encoding(key.to_ascii_uppercase()))?; + Ok(Some(value.to_string())) + }; + Ok(Self { + TURBO_TEAM: get_value("turbo_team")?, + TURBO_TEAMID: get_value("turbo_teamid")?, + TURBO_TOKEN: get_value("turbo_token")?, + VERCEL_ARTIFACTS_OWNER: get_value("vercel_artifacts_owner")?, + VERCEL_ARTIFACTS_TOKEN: get_value("vercel_artifacts_token")?, + }) + } +} + +// this is an internal structure (that's a partial of ConfigurationOptions) that +// we use to store +struct Output { + /// maps to ConfigurationOptions.team_id + team_id: Option, + // maps to ConfigurationOptions.team_slug + team_slug: Option, + // maps to ConfigurationOptions.token + token: Option, +} + +impl Output { + fn new() -> Self { + Self { + team_id: None, + team_slug: None, + token: None, + } + } +} + +impl From for Output { + fn from(input: Input) -> Self { + // TURBO_TEAMID+TURBO_TOKEN or TURBO_TEAM+TURBO_TOKEN + if input.TURBO_TOKEN.is_some() + && (input.TURBO_TEAMID.is_some() || input.TURBO_TEAM.is_some()) + { + Output { + team_id: input.TURBO_TEAMID, + team_slug: input.TURBO_TEAM, + token: input.TURBO_TOKEN, + } + } + // if there's both Vercel items, we use those next + else if input.VERCEL_ARTIFACTS_TOKEN.is_some() && input.VERCEL_ARTIFACTS_OWNER.is_some() { + Output { + team_id: input.VERCEL_ARTIFACTS_OWNER, + team_slug: input.TURBO_TEAM, /* this may or may not be Some, but if it is we can + * pass it along too */ + token: input.VERCEL_ARTIFACTS_TOKEN, + } + } + // from this point below, there's no token we can do anything with + // ------------------------------------------------ + else { + Output { + // prefer TURBO_TEAMID to VERCEL_ARTIFACTS_OWNER + team_id: input.TURBO_TEAMID.or(input.VERCEL_ARTIFACTS_OWNER), + // No alternative source for team_slug so always use TURBO_TEAM + team_slug: input.TURBO_TEAM, + token: None, + } + } + } +} + +pub struct OverrideEnvVars<'a> { + environment: &'a HashMap, + output: Output, +} + +impl<'a> OverrideEnvVars<'a> { + pub fn new(environment: &'a HashMap) -> Result { + let input = Input::try_from(environment)?; + let output = Output::from(input); + + Ok(Self { + environment, + output, + }) + } + + fn ui(&self) -> Option { + let value = self + .environment + .get(OsStr::new("ci")) + .or_else(|| self.environment.get(OsStr::new("no_color")))?; + truth_env_var(value.to_str()?)?.then_some(UIMode::Stream) + } +} + +impl<'a> ResolvedConfigurationOptions for OverrideEnvVars<'a> { + fn get_configuration_options( + &self, + _existing_config: &ConfigurationOptions, + ) -> Result { + let output = ConfigurationOptions { + team_id: self.output.team_id.clone(), + token: self.output.token.clone(), + team_slug: self.output.team_slug.clone(), + ui: self.ui(), + ..Default::default() + }; + Ok(output) + } +} + +#[cfg(test)] +mod test { + use super::*; + + const VERCEL_ARTIFACTS_OWNER: &str = "valueof:VERCEL_ARTIFACTS_OWNER"; + const VERCEL_ARTIFACTS_TOKEN: &str = "valueof:VERCEL_ARTIFACTS_TOKEN"; + const TURBO_TEAMID: &str = "valueof:TURBO_TEAMID"; + const TURBO_TEAM: &str = "valueof:TURBO_TEAM"; + const TURBO_TOKEN: &str = "valueof:TURBO_TOKEN"; + + struct TestCase { + input: Input, + output: Output, + reason: &'static str, + } + + impl TestCase { + fn new() -> Self { + Self { + input: Input::new(), + output: Output::new(), + reason: "missing", + } + } + + fn reason(mut self, reason: &'static str) -> Self { + self.reason = reason; + self + } + + #[allow(non_snake_case)] + fn VERCEL_ARTIFACTS_OWNER(mut self) -> Self { + self.input.VERCEL_ARTIFACTS_OWNER = Some(VERCEL_ARTIFACTS_OWNER.into()); + self + } + + #[allow(non_snake_case)] + fn VERCEL_ARTIFACTS_TOKEN(mut self) -> Self { + self.input.VERCEL_ARTIFACTS_TOKEN = Some(VERCEL_ARTIFACTS_TOKEN.into()); + self + } + + #[allow(non_snake_case)] + fn TURBO_TEAMID(mut self) -> Self { + self.input.TURBO_TEAMID = Some(TURBO_TEAMID.into()); + self + } + + #[allow(non_snake_case)] + fn TURBO_TEAM(mut self) -> Self { + self.input.TURBO_TEAM = Some(TURBO_TEAM.into()); + self + } + + #[allow(non_snake_case)] + fn TURBO_TOKEN(mut self) -> Self { + self.input.TURBO_TOKEN = Some(TURBO_TOKEN.into()); + self + } + + fn team_id(mut self, value: &str) -> Self { + self.output.team_id = Some(value.into()); + self + } + + fn team_slug(mut self, value: &str) -> Self { + self.output.team_slug = Some(value.into()); + self + } + + fn token(mut self, value: &str) -> Self { + self.output.token = Some(value.into()); + self + } + } + + #[test] + fn test_all_the_combos() { + let cases: &[TestCase] = &[ + // + // Get nothing back + // ------------------------------ + TestCase::new().reason("no env vars set"), + TestCase::new() + .reason("just VERCEL_ARTIFACTS_TOKEN") + .VERCEL_ARTIFACTS_TOKEN(), + TestCase::new().reason("just TURBO_TOKEN").TURBO_TOKEN(), + // + // When 3rd Party Wins with all three + // ------------------------------ + TestCase::new() + .reason("we can use all of TURBO_TEAM, TURBO_TEAMID, and TURBO_TOKEN") + .TURBO_TEAM() + .TURBO_TEAMID() + .TURBO_TOKEN() + .team_id(TURBO_TEAMID) + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + TestCase::new() + .reason("if we have a 3rd party trifecta, that wins, even against a Vercel Pair") + .TURBO_TEAM() + .TURBO_TEAMID() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(TURBO_TEAMID) + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + TestCase::new() + .reason("a 3rd party trifecta wins against a partial Vercel (just artifacts token)") + .TURBO_TEAM() + .TURBO_TEAMID() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(TURBO_TEAMID) + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + TestCase::new() + .reason("a 3rd party trifecta wins against a partial Vercel (just artifacts owner)") + .TURBO_TEAM() + .TURBO_TEAMID() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_OWNER() + .team_id(TURBO_TEAMID) + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + // + // When 3rd Party Wins with team_slug + // ------------------------------ + TestCase::new() + .reason("golden path for 3rd party, not deployed on Vercel") + .TURBO_TEAM() + .TURBO_TOKEN() + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + TestCase::new() + .reason( + "a TURBO_TEAM+TURBO_TOKEN pair wins against an incomplete Vercel (just \ + artifacts token)", + ) + .TURBO_TEAM() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_TOKEN() // disregarded + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + TestCase::new() + .reason("golden path for 3rd party, deployed on Vercel") + .TURBO_TEAM() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_OWNER() // normally this would map to team_id, but not with a complete 3rd party pair + .VERCEL_ARTIFACTS_TOKEN() + .team_slug(TURBO_TEAM) + .token(TURBO_TOKEN), + // + // When 3rd Party Wins with team_id + // ------------------------------ + TestCase::new() + .reason("if they pass a TURBO_TEAMID and a TURBO_TOKEN, we use them") + .TURBO_TEAMID() + .TURBO_TOKEN() + .team_id(TURBO_TEAMID) + .token(TURBO_TOKEN), + TestCase::new() + .reason("a TURBO_TEAMID+TURBO_TOKEN pair will also win against a Vercel pair") + .TURBO_TEAMID() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(TURBO_TEAMID) + .token(TURBO_TOKEN), + TestCase::new() + .reason( + "a TURBO_TEAMID+TURBO_TOKEN pair wins against an incomplete Vercel (just \ + artifacts token)", + ) + .TURBO_TEAMID() + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(TURBO_TEAMID) + .token(TURBO_TOKEN), + // + // When Vercel Wins + // ------------------------------ + TestCase::new() + .reason("golden path on Vercel zero config") + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(VERCEL_ARTIFACTS_OWNER) + .token(VERCEL_ARTIFACTS_TOKEN), + TestCase::new() + .reason("Vercel wins: disregard just TURBO_TOKEN") + .TURBO_TOKEN() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(VERCEL_ARTIFACTS_OWNER) + .token(VERCEL_ARTIFACTS_TOKEN), + TestCase::new() + .reason("Vercel wins: TURBO_TEAM can join in the fun if it wants") + .TURBO_TEAM() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(VERCEL_ARTIFACTS_OWNER) + .team_slug(TURBO_TEAM) + .token(VERCEL_ARTIFACTS_TOKEN), + TestCase::new() + .reason("Vercel wins: disregard just TURBO_TEAMID") + .TURBO_TEAMID() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(VERCEL_ARTIFACTS_OWNER) + .token(VERCEL_ARTIFACTS_TOKEN), + TestCase::new() + .reason("Vercel wins if TURBO_TOKEN is missing") + .TURBO_TEAM() + .TURBO_TEAMID() + .VERCEL_ARTIFACTS_OWNER() + .VERCEL_ARTIFACTS_TOKEN() + .team_id(VERCEL_ARTIFACTS_OWNER) + .team_slug(TURBO_TEAM) + .token(VERCEL_ARTIFACTS_TOKEN), + // + // Just get a team_id + // ------------------------------ + TestCase::new() + .reason("just VERCEL_ARTIFACTS_OWNER") + .VERCEL_ARTIFACTS_OWNER() + .team_id(VERCEL_ARTIFACTS_OWNER), + TestCase::new() + .reason("just TURBO_TEAMID") + .TURBO_TEAMID() + .team_id(TURBO_TEAMID), + // + // Just get a team_slug + // ------------------------------ + TestCase::new() + .reason("just TURBO_TEAM") + .TURBO_TEAM() + .team_slug(TURBO_TEAM), + // + // just team_slug and team_id + // ------------------------------ + TestCase::new() + .reason("if we just have TURBO_TEAM+TURBO_TEAMID, that's ok") + .TURBO_TEAM() + .TURBO_TEAMID() + .team_slug(TURBO_TEAM) + .team_id(TURBO_TEAMID), + // + // just set team_id and team_slug + // ------------------------------ + TestCase::new() + .reason("if we just have a TURBO_TEAM and TURBO_TEAMID we can use them both") + .TURBO_TEAM() + .TURBO_TEAMID() + .team_id(TURBO_TEAMID) + .team_slug(TURBO_TEAM), + ]; + + for case in cases { + let mut env: HashMap = HashMap::new(); + + if let Some(value) = &case.input.TURBO_TEAM { + env.insert("turbo_team".into(), value.into()); + } + if let Some(value) = &case.input.TURBO_TEAMID { + env.insert("turbo_teamid".into(), value.into()); + } + if let Some(value) = &case.input.TURBO_TOKEN { + env.insert("turbo_token".into(), value.into()); + } + if let Some(value) = &case.input.VERCEL_ARTIFACTS_OWNER { + env.insert("vercel_artifacts_owner".into(), value.into()); + } + if let Some(value) = &case.input.VERCEL_ARTIFACTS_TOKEN { + env.insert("vercel_artifacts_token".into(), value.into()); + } + + let actual_input = Input::try_from(&env).unwrap(); + assert_eq!(case.input, actual_input); + + let config = OverrideEnvVars::new(&env).unwrap(); + let reason = case.reason; + + assert_eq!(case.output.team_id, config.output.team_id, "{reason}"); + assert_eq!(case.output.team_slug, config.output.team_slug, "{reason}"); + assert_eq!(case.output.token, config.output.token, "{reason}"); + } + } +} From c2190a3fd242eba43668c17d4170a46e16f36a29 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Sat, 19 Oct 2024 08:00:40 -0400 Subject: [PATCH 090/218] fix(tui): avoid tui shutdown on unrecognized input (#9289) ### Description This PR does 3 things: - Fix run summary from being printed out during watch mode which corrupts the TUI - Adds additional debug logs recording the reason for the TUI shutting down - Fixes bug where `poll` could now return `None` even if input streams were still available The bug came down to: - A crossterm event was received - Translating the crossterm event via `input_options.handle_crossterm_event` returned `None` (This makes total sense, not every terminal event requires a response from the TUI) - This `None` was returned instead of waiting for more input or a tick event - The `while let Some(event) = poll(...)` loop would exit which triggers a TUI shut down ### Testing Instructions `npx create-turbo@latest` and then start up the TUI `turbo dev --ui=tui`, without hitting `Enter` to focus the task hit `q` multiple times and you should see the TUI shut down. Use `turbo` built from this PR and try the same thing. The TUI should not shut down on the press of `q`. --- crates/turborepo-lib/src/run/summary/mod.rs | 27 ++++++++----- crates/turborepo-lib/src/run/watch.rs | 6 +-- crates/turborepo-ui/src/tui/app.rs | 42 ++++++++++++--------- crates/turborepo-ui/src/tui/input.rs | 7 +++- 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/crates/turborepo-lib/src/run/summary/mod.rs b/crates/turborepo-lib/src/run/summary/mod.rs index cb67963c7d72a..56647162af92c 100644 --- a/crates/turborepo-lib/src/run/summary/mod.rs +++ b/crates/turborepo-lib/src/run/summary/mod.rs @@ -382,7 +382,7 @@ impl<'a> RunSummary<'a> { } if let Some(spaces_client_handle) = self.spaces_client_handle.take() { - self.send_to_space(spaces_client_handle, end_time, exit_code) + self.send_to_space(spaces_client_handle, end_time, exit_code, is_watch) .await; } @@ -395,26 +395,35 @@ impl<'a> RunSummary<'a> { spaces_client_handle: SpacesClientHandle, ended_at: DateTime, exit_code: i32, + is_watch: bool, ) { - let spinner = tokio::spawn(async { - tokio::time::sleep(std::time::Duration::from_millis(1000)).await; - turborepo_ui::start_spinner("...sending run summary..."); + let spinner = (!is_watch).then(|| { + tokio::spawn(async { + tokio::time::sleep(std::time::Duration::from_millis(1000)).await; + turborepo_ui::start_spinner("...sending run summary..."); + }) }); // We log the error here but don't fail because // failing to send the space shouldn't fail the run. if let Err(err) = spaces_client_handle.finish_run(exit_code, ended_at).await { - warn!("Error sending to space: {}", err); + if !is_watch { + warn!("Error sending to space: {}", err); + } }; let result = spaces_client_handle.close().await; - spinner.abort(); + if let Some(spinner) = spinner { + spinner.abort(); + } - Self::print_errors(&result.errors); + if !is_watch { + Self::print_errors(&result.errors); - if let Some(run) = result.run { - println!("Run: {}\n", run.url); + if let Some(run) = result.run { + println!("Run: {}\n", run.url); + } } } diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index 5a721abc49ed9..ca115532898d1 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -101,7 +101,7 @@ pub enum Error { PackageChange(#[from] tonic::Status), #[error(transparent)] UI(#[from] turborepo_ui::Error), - #[error("could not connect to UI thread")] + #[error("could not connect to UI thread: {0}")] UISend(String), #[error("cannot use root turbo.json at {0} with watch mode")] NonStandardTurboJsonPath(String), @@ -317,7 +317,7 @@ impl WatchClient { let task_names = run.engine.tasks_with_command(&run.pkg_dep_graph); sender .restart_tasks(task_names) - .map_err(|err| Error::UISend(err.to_string()))?; + .map_err(|err| Error::UISend(format!("some packages changed: {err}")))?; } let ui_sender = self.ui_sender.clone(); @@ -371,7 +371,7 @@ impl WatchClient { let task_names = self.run.engine.tasks_with_command(&self.run.pkg_dep_graph); sender .update_tasks(task_names) - .map_err(|err| Error::UISend(err.to_string()))?; + .map_err(|err| Error::UISend(format!("all packages changed {err}")))?; } if self.run.has_non_interruptible_tasks() { diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 8ba6e9a8d2539..99fc06c0d8c39 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -568,7 +568,10 @@ pub async fn run_app(tasks: Vec, receiver: AppReceiver) -> Result<(), Er let (result, callback) = match run_app_inner(&mut terminal, &mut app, receiver, crossterm_rx).await { Ok(callback) => (Ok(()), callback), - Err(err) => (Err(err), None), + Err(err) => { + debug!("tui shutting down: {err}"); + (Err(err), None) + } }; cleanup(terminal, app, callback)?; @@ -634,25 +637,28 @@ async fn poll<'a>( crossterm_rx: &mut mpsc::Receiver, ) -> Option { let input_closed = crossterm_rx.is_closed(); - let input_fut = async { - crossterm_rx - .recv() - .await - .and_then(|event| input_options.handle_crossterm_event(event)) - }; - let receiver_fut = async { receiver.recv().await }; - let event_fut = async move { - if input_closed { - receiver_fut.await - } else { + + if input_closed { + receiver.recv().await + } else { + // tokio::select is messing with variable read detection + #[allow(unused_assignments)] + let mut event = None; + loop { tokio::select! { - e = input_fut => e, - e = receiver_fut => e, + e = crossterm_rx.recv() => { + event = e.and_then(|e| input_options.handle_crossterm_event(e)); + } + e = receiver.recv() => { + event = e; + } + } + if event.is_some() { + break; } } - }; - - event_fut.await + event + } } const MIN_HEIGHT: u16 = 10; @@ -729,9 +735,11 @@ fn update( app.set_status(task, status, result)?; } Event::InternalStop => { + debug!("shutting down due to internal failure"); app.done = true; } Event::Stop(callback) => { + debug!("shutting down due to message"); app.done = true; return Ok(Some(callback)); } diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index 6fca06a13505c..039fa7f6c7456 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -1,6 +1,7 @@ use crossterm::event::{EventStream, KeyCode, KeyEvent, KeyEventKind, KeyModifiers}; use futures::StreamExt; use tokio::{sync::mpsc, task::JoinHandle}; +use tracing::debug; use super::{ app::LayoutSections, @@ -122,7 +123,10 @@ fn ctrl_c() -> Option { match signal::raise(signal::SIGINT) { Ok(_) => None, // We're unable to send the signal, stop rendering to force shutdown - Err(_) => Some(Event::InternalStop), + Err(_) => { + debug!("unable to send sigint, shutting down"); + Some(Event::InternalStop) + } } } @@ -146,6 +150,7 @@ fn ctrl_c() -> Option { None } else { // We're unable to send the Ctrl-C event, stop rendering to force shutdown + debug!("unable to send sigint, shutting down"); Some(Event::InternalStop) } } From 37dfb6181d44612368d22148487a87acae6d1fdf Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sun, 20 Oct 2024 15:17:17 -0400 Subject: [PATCH 091/218] release(turborepo): 2.2.1 (#9292) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index c485e799ec6fe..3068dccb5d8ae 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.0", + "version": "2.2.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 622d4c8c84e16..e3e2c41425939 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.0", + "version": "2.2.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6a3998955dbf8..589ea384df29a 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.0", + "version": "2.2.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 1f8b85e6e6431..8175d17d97ecd 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.0", + "version": "2.2.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index e98f1849d9c03..70681ef38163f 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.0", + "version": "2.2.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index ffe80d94a60b1..626a2f51c0c53 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.0", + "version": "2.2.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index dc77102699473..0061b6a0811f7 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.0", + "version": "2.2.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index cfce59ca1c94b..f741d7ba577ff 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.0", + "version": "2.2.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 8ede5acf7dc06..32e7e2f5adb56 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.0", + "version": "2.2.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.0", - "turbo-darwin-arm64": "2.2.0", - "turbo-linux-64": "2.2.0", - "turbo-linux-arm64": "2.2.0", - "turbo-windows-64": "2.2.0", - "turbo-windows-arm64": "2.2.0" + "turbo-darwin-64": "2.2.1", + "turbo-darwin-arm64": "2.2.1", + "turbo-linux-64": "2.2.1", + "turbo-linux-arm64": "2.2.1", + "turbo-windows-64": "2.2.1", + "turbo-windows-arm64": "2.2.1" } } diff --git a/version.txt b/version.txt index 35cc2de15bffc..409e6377fedff 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.0 +2.2.1 latest From bd7d23539fb4644da5779b0e8f48f1d487408572 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Sun, 20 Oct 2024 19:58:57 -0400 Subject: [PATCH 092/218] fix(tui): generate stop event on ctrl c (#9296) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Previously we had used a `None` return from the input handler as a signal that the TUI should shut down. We no longer do this so we need to explicitly return `Event::InternalStop` to signal that we should shut down the TUI. ### Testing Instructions Start up a dev task with 2.2.1 and observe that on Ctrl-C the terminal is left in raw mode: Screenshot 2024-10-20 at 3 31 40 PM With the build from the PR you should note that the on Ctrl-C the terminal is returned to a cooked mode: Screenshot 2024-10-20 at 3 32 14 PM --- crates/turborepo-ui/src/tui/input.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index 039fa7f6c7456..7ae9fb55dbb88 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -61,7 +61,8 @@ fn translate_key_event(options: InputOptions, key_event: KeyEvent) -> Option { - ctrl_c() + ctrl_c(); + Some(Event::InternalStop) } KeyCode::Char('c') if options.has_selection => Some(Event::CopySelection), // Interactive branches From cc718aa3612170bc723bd48beba9aac64903c48f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:07:54 -0400 Subject: [PATCH 093/218] release(turborepo): 2.2.2-canary.0 (#9297) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 3068dccb5d8ae..dd1a3c2f89048 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index e3e2c41425939..cdeccec82e2e0 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 589ea384df29a..4f0dff9b430d5 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 8175d17d97ecd..abffbaa166b3d 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 70681ef38163f..ba697e8ad15ce 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 626a2f51c0c53..971478878166c 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 0061b6a0811f7..796675f553323 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index f741d7ba577ff..3e82a03d96e00 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 32e7e2f5adb56..201c0b23bf3d7 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.1", + "version": "2.2.2-canary.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.1", - "turbo-darwin-arm64": "2.2.1", - "turbo-linux-64": "2.2.1", - "turbo-linux-arm64": "2.2.1", - "turbo-windows-64": "2.2.1", - "turbo-windows-arm64": "2.2.1" + "turbo-darwin-64": "2.2.2-canary.0", + "turbo-darwin-arm64": "2.2.2-canary.0", + "turbo-linux-64": "2.2.2-canary.0", + "turbo-linux-arm64": "2.2.2-canary.0", + "turbo-windows-64": "2.2.2-canary.0", + "turbo-windows-arm64": "2.2.2-canary.0" } } diff --git a/version.txt b/version.txt index 409e6377fedff..933500347fc7a 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.1 -latest +2.2.2-canary.0 +canary From 567cd772d1055cc7809c1b6b7025c3f7e0528d2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 21 Oct 2024 09:57:34 -0400 Subject: [PATCH 094/218] release(turborepo): 2.2.2 (#9299) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index dd1a3c2f89048..d2c21ca24757b 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index cdeccec82e2e0..6ce3ade69bb95 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 4f0dff9b430d5..183e04092a26d 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index abffbaa166b3d..7fdda23ec358e 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index ba697e8ad15ce..98399e7a6d6d6 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 971478878166c..282740ff25176 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 796675f553323..715187e1d54f1 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 3e82a03d96e00..00f4b0f26505d 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 201c0b23bf3d7..96bcfdec315a6 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.2-canary.0", + "version": "2.2.2", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.2-canary.0", - "turbo-darwin-arm64": "2.2.2-canary.0", - "turbo-linux-64": "2.2.2-canary.0", - "turbo-linux-arm64": "2.2.2-canary.0", - "turbo-windows-64": "2.2.2-canary.0", - "turbo-windows-arm64": "2.2.2-canary.0" + "turbo-darwin-64": "2.2.2", + "turbo-darwin-arm64": "2.2.2", + "turbo-linux-64": "2.2.2", + "turbo-linux-arm64": "2.2.2", + "turbo-windows-64": "2.2.2", + "turbo-windows-arm64": "2.2.2" } } diff --git a/version.txt b/version.txt index 933500347fc7a..bcf0d2f00a4c2 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.2-canary.0 -canary +2.2.2 +latest From bf8fa90dbb69a292ff7bb47f0836258ce9530e29 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 21 Oct 2024 10:54:00 -0400 Subject: [PATCH 095/218] feat(query): provide ast for files and depth for dependencies (#9285) ### Description Some more requests. Add the serialized AST from SWC and a depth limit for dependency tracing. ### Testing Instructions Added some tests to `turbo-trace.t` --- Cargo.lock | 4 + Cargo.toml | 4 + crates/turbo-trace/Cargo.toml | 8 +- crates/turbo-trace/src/main.rs | 6 +- crates/turbo-trace/src/tracer.rs | 37 +- crates/turborepo-lib/Cargo.toml | 3 + crates/turborepo-lib/src/query/file.rs | 65 +++- crates/turborepo-lib/src/query/mod.rs | 2 + .../integration/fixtures/turbo_trace/bar.js | 3 + .../integration/fixtures/turbo_trace/foo.js | 2 + .../integration/tests/turbo-trace.t | 337 ++++++++++++++++++ 11 files changed, 448 insertions(+), 23 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/bar.js diff --git a/Cargo.lock b/Cargo.lock index f8c99ea4eb1ea..ff29fd4c24957 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5182,6 +5182,7 @@ dependencies = [ "num-bigint", "phf", "scoped-tls", + "serde", "string_enum", "swc_atoms", "swc_common", @@ -6361,6 +6362,9 @@ dependencies = [ "shared_child", "struct_iterable", "svix-ksuid", + "swc_common", + "swc_ecma_ast", + "swc_ecma_parser", "sysinfo", "tabwriter", "tempfile", diff --git a/Cargo.toml b/Cargo.toml index 80484ff05f4b2..ad2590030e909 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -146,6 +146,10 @@ smallvec = { version = "1.13.1", features = [ "union", "const_new", ] } +swc_common = "0.37.5" +swc_ecma_ast = "0.118.2" +swc_ecma_parser = "0.149.1" +swc_ecma_visit = "0.104.8" syn = "1.0.107" tempfile = "3.3.0" test-case = "3.0.0" diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml index 5eeb45bfc5c34..08e15986dca9a 100644 --- a/crates/turbo-trace/Cargo.toml +++ b/crates/turbo-trace/Cargo.toml @@ -9,10 +9,10 @@ camino.workspace = true clap = { version = "4.5.17", features = ["derive"] } miette = { workspace = true, features = ["fancy"] } oxc_resolver = "1.11.0" -swc_common = "0.37.5" -swc_ecma_ast = "0.118.2" -swc_ecma_parser = "0.149.1" -swc_ecma_visit = "0.104.8" +swc_common = { workspace = true } +swc_ecma_ast = { workspace = true } +swc_ecma_parser = { workspace = true } +swc_ecma_visit = { workspace = true } thiserror = { workspace = true } turbopath = { workspace = true } diff --git a/crates/turbo-trace/src/main.rs b/crates/turbo-trace/src/main.rs index 5c5f10473ede9..f9b13a344a5c8 100644 --- a/crates/turbo-trace/src/main.rs +++ b/crates/turbo-trace/src/main.rs @@ -13,6 +13,8 @@ struct Args { #[clap(long)] ts_config: Option, files: Vec, + #[clap(long)] + depth: Option, } fn main() -> Result<(), PathError> { @@ -32,7 +34,7 @@ fn main() -> Result<(), PathError> { let tracer = Tracer::new(abs_cwd, files, args.ts_config); - let result = tracer.trace(); + let result = tracer.trace(args.depth); if !result.errors.is_empty() { for error in &result.errors { @@ -40,7 +42,7 @@ fn main() -> Result<(), PathError> { } std::process::exit(1); } else { - for file in &result.files { + for file in result.files.keys() { println!("{}", file); } } diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index bab720d6261de..f94e085ebdb6d 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -1,4 +1,4 @@ -use std::{collections::HashSet, fs, rc::Rc}; +use std::{collections::HashMap, fs, rc::Rc}; use camino::Utf8PathBuf; use miette::{Diagnostic, NamedSource, SourceSpan}; @@ -14,9 +14,13 @@ use turbopath::{AbsoluteSystemPathBuf, PathError}; use crate::import_finder::ImportFinder; +#[derive(Default)] +pub struct SeenFile { + pub ast: Option, +} + pub struct Tracer { - files: Vec, - seen: HashSet, + files: Vec<(AbsoluteSystemPathBuf, usize)>, ts_config: Option, source_map: Rc, } @@ -40,7 +44,7 @@ pub enum TraceError { pub struct TraceResult { pub errors: Vec, - pub files: HashSet, + pub files: HashMap, } impl Tracer { @@ -52,22 +56,22 @@ impl Tracer { let ts_config = ts_config.map(|ts_config| AbsoluteSystemPathBuf::from_unknown(&cwd, ts_config)); - let seen = HashSet::new(); + let files = files.into_iter().map(|file| (file, 0)).collect::>(); Self { files, - seen, ts_config, source_map: Rc::new(SourceMap::default()), } } - pub fn trace(mut self) -> TraceResult { + pub fn trace(mut self, max_depth: Option) -> TraceResult { let mut options = ResolveOptions::default() .with_builtin_modules(true) .with_force_extension(EnforceExtension::Disabled) .with_extension(".ts") .with_extension(".tsx"); + if let Some(ts_config) = self.ts_config.take() { options.tsconfig = Some(TsconfigOptions { config_file: ts_config.into(), @@ -77,17 +81,24 @@ impl Tracer { let resolver = Resolver::new(options); let mut errors = vec![]; + let mut seen: HashMap = HashMap::new(); - while let Some(file_path) = self.files.pop() { + while let Some((file_path, file_depth)) = self.files.pop() { if matches!(file_path.extension(), Some("json") | Some("css")) { continue; } - if self.seen.contains(&file_path) { + if seen.contains_key(&file_path) { continue; } - self.seen.insert(file_path.clone()); + if let Some(max_depth) = max_depth { + if file_depth > max_depth { + continue; + } + } + + let entry = seen.entry(file_path.clone()).or_default(); // Read the file content let Ok(file_content) = fs::read_to_string(&file_path) else { @@ -135,6 +146,8 @@ impl Tracer { let mut finder = ImportFinder::default(); module.visit_with(&mut finder); + entry.ast = Some(module); + // Convert found imports/requires to absolute paths and add them to files to // visit for (import, span) in finder.imports() { @@ -144,7 +157,7 @@ impl Tracer { }; match resolver.resolve(file_dir, import) { Ok(resolved) => match resolved.into_path_buf().try_into() { - Ok(path) => self.files.push(path), + Ok(path) => self.files.push((path, file_depth + 1)), Err(err) => { errors.push(TraceError::PathEncoding(err)); } @@ -163,7 +176,7 @@ impl Tracer { } TraceResult { - files: self.seen, + files: seen, errors, } } diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index a88c7cd83d6c3..56816b40a639c 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -99,6 +99,9 @@ sha2 = { workspace = true } shared_child = "1.0.0" struct_iterable = "0.1.1" svix-ksuid = { version = "0.7.0", features = ["serde"] } +swc_common = { workspace = true } +swc_ecma_ast = { workspace = true, features = ["serde-impl"] } +swc_ecma_parser = { workspace = true } sysinfo = "0.27.7" tabwriter = "1.3.0" thiserror = "1.0.38" diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index b24e28508a8a0..78a23965cc748 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -2,6 +2,8 @@ use std::sync::Arc; use async_graphql::{Object, SimpleObject}; use itertools::Itertools; +use swc_ecma_ast::EsVersion; +use swc_ecma_parser::{EsSyntax, Syntax, TsSyntax}; use turbo_trace::Tracer; use turbopath::AbsoluteSystemPathBuf; @@ -13,11 +15,56 @@ use crate::{ pub struct File { run: Arc, path: AbsoluteSystemPathBuf, + ast: Option, } impl File { pub fn new(run: Arc, path: AbsoluteSystemPathBuf) -> Self { - Self { run, path } + Self { + run, + path, + ast: None, + } + } + + pub fn with_ast(mut self, ast: Option) -> Self { + self.ast = ast; + + self + } + + fn parse_file(&self) -> Result { + let contents = self.path.read_to_string()?; + let source_map = swc_common::SourceMap::default(); + let file = source_map.new_source_file( + swc_common::FileName::Custom(self.path.to_string()).into(), + contents.clone(), + ); + let syntax = if self.path.extension() == Some("ts") || self.path.extension() == Some("tsx") + { + Syntax::Typescript(TsSyntax { + tsx: self.path.extension() == Some("tsx"), + decorators: true, + ..Default::default() + }) + } else { + Syntax::Es(EsSyntax { + jsx: self.path.ends_with(".jsx"), + ..Default::default() + }) + }; + let comments = swc_common::comments::SingleThreadedComments::default(); + let mut errors = Vec::new(); + let module = swc_ecma_parser::parse_file_as_module( + &file, + syntax, + EsVersion::EsNext, + Some(&comments), + &mut errors, + ) + .map_err(Error::Parse)?; + + Ok(module) } } @@ -73,8 +120,8 @@ impl TraceResult { files: result .files .into_iter() - .sorted() - .map(|path| File::new(run.clone(), path)) + .sorted_by(|a, b| a.0.cmp(&b.0)) + .map(|(path, file)| File::new(run.clone(), path).with_ast(file.ast)) .collect(), errors: result.errors.into_iter().map(|e| e.into()).collect(), } @@ -100,16 +147,24 @@ impl File { Ok(self.path.to_string()) } - async fn dependencies(&self) -> TraceResult { + async fn dependencies(&self, depth: Option) -> TraceResult { let tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], None, ); - let mut result = tracer.trace(); + let mut result = tracer.trace(depth); // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) } + + async fn ast(&self) -> Option { + if let Some(ast) = &self.ast { + serde_json::to_value(ast).ok() + } else { + serde_json::to_value(&self.parse_file().ok()?).ok() + } + } } diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index fa61ea618014e..f6add1f4dd7ef 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -49,6 +49,8 @@ pub enum Error { #[error(transparent)] #[diagnostic(transparent)] Resolution(#[from] crate::run::scope::filter::ResolutionError), + #[error("failed to parse file: {0:?}")] + Parse(swc_ecma_parser::error::Error), } pub struct RepositoryQuery { diff --git a/turborepo-tests/integration/fixtures/turbo_trace/bar.js b/turborepo-tests/integration/fixtures/turbo_trace/bar.js new file mode 100644 index 0000000000000..a85f7dedb21d8 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/bar.js @@ -0,0 +1,3 @@ +export default function bar() { + console.log("bar"); +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/foo.js b/turborepo-tests/integration/fixtures/turbo_trace/foo.js index de9fc706c8115..6bfab2b18bb17 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace/foo.js +++ b/turborepo-tests/integration/fixtures/turbo_trace/foo.js @@ -1,3 +1,5 @@ +import { bar } from "./bar"; + export default function foo() { if (!process.env.IS_CI) { return "bar"; diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t index 24569c5c761c9..1cced6353923b 100644 --- a/turborepo-tests/integration/tests/turbo-trace.t +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -20,6 +20,9 @@ Setup "dependencies": { "files": { "items": [ + { + "path": "bar.js" + }, { "path": "button.tsx" }, @@ -97,3 +100,337 @@ Trace file with invalid import } } +Get AST from file + $ ${TURBO} query "query { file(path: \"main.ts\") { path ast } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "main.ts", + "ast": { + "type": "Module", + "span": { + "start": 1, + "end": 169 + }, + "body": [ + { + "type": "ImportDeclaration", + "span": { + "start": 1, + "end": 35 + }, + "specifiers": [ + { + "type": "ImportSpecifier", + "span": { + "start": 10, + "end": 16 + }, + "local": { + "type": "Identifier", + "span": { + "start": 10, + "end": 16 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "imported": null, + "isTypeOnly": false + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 24, + "end": 34 + }, + "value": "./button", + "raw": "\"./button\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 36, + "end": 60 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 43, + "end": 46 + }, + "local": { + "type": "Identifier", + "span": { + "start": 43, + "end": 46 + }, + "ctxt": 0, + "value": "foo", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 52, + "end": 59 + }, + "value": "./foo", + "raw": "\"./foo\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 61, + "end": 96 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 68, + "end": 74 + }, + "local": { + "type": "Identifier", + "span": { + "start": 68, + "end": 74 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 80, + "end": 95 + }, + "value": "repeat-string", + "raw": "\"repeat-string\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "VariableDeclaration", + "span": { + "start": 98, + "end": 126 + }, + "ctxt": 0, + "kind": "const", + "declare": false, + "declarations": [ + { + "type": "VariableDeclarator", + "span": { + "start": 104, + "end": 125 + }, + "id": { + "type": "Identifier", + "span": { + "start": 104, + "end": 110 + }, + "ctxt": 0, + "value": "button", + "optional": false, + "typeAnnotation": null + }, + "init": { + "type": "NewExpression", + "span": { + "start": 113, + "end": 125 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 117, + "end": 123 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "arguments": [], + "typeArguments": null + }, + "definite": false + } + ] + }, + { + "type": "ExpressionStatement", + "span": { + "start": 128, + "end": 144 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 128, + "end": 143 + }, + "ctxt": 0, + "callee": { + "type": "MemberExpression", + "span": { + "start": 128, + "end": 141 + }, + "object": { + "type": "Identifier", + "span": { + "start": 128, + "end": 134 + }, + "ctxt": 0, + "value": "button", + "optional": false + }, + "property": { + "type": "Identifier", + "span": { + "start": 135, + "end": 141 + }, + "value": "render" + } + }, + "arguments": [], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 145, + "end": 162 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 145, + "end": 161 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 145, + "end": 151 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "StringLiteral", + "span": { + "start": 152, + "end": 157 + }, + "value": "foo", + "raw": "\"foo\"" + } + }, + { + "spread": null, + "expression": { + "type": "NumericLiteral", + "span": { + "start": 159, + "end": 160 + }, + "value": 5.0, + "raw": "5" + } + } + ], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 163, + "end": 169 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 163, + "end": 168 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 163, + "end": 166 + }, + "ctxt": 0, + "value": "foo", + "optional": false + }, + "arguments": [], + "typeArguments": null + } + } + ], + "interpreter": null + } + } + } + } + +Set depth for dependencies + $ ${TURBO} query "query { file(path: \"main.ts\") { path dependencies(depth: 1) { files { items { path } } } } }" + WARNING query command is experimental and may change in the future + { + "data": { + "file": { + "path": "main.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules(\/|\\\\)repeat-string(\/|\\\\)index.js" (re) + } + ] + } + } + } + } + } \ No newline at end of file From 82f0633f32a7f999754cceb5c3847df941f5b211 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 21 Oct 2024 11:16:59 -0400 Subject: [PATCH 096/218] fix: unnecessary empty cache logs (#9301) ### Description In #9236 I added a check if the task output globs are empty. Turns out we need to check if the output globs only has a single entry for the log file. Fixes #9291 ### Testing Instructions `basic_monorepo` has both a task that has globs and no outputs and a task that has empty globs and no outputs. Note that we warn for one and not the other. --- crates/turborepo-lib/src/task_graph/mod.rs | 6 +++++- turborepo-tests/integration/tests/filter-run.t | 1 - turborepo-tests/integration/tests/global-env.t | 3 --- .../integration/tests/lockfile-aware-caching/berry.t | 5 ----- .../integration/tests/lockfile-aware-caching/npm.t | 5 ----- .../integration/tests/lockfile-aware-caching/pnpm.t | 5 ----- .../integration/tests/lockfile-aware-caching/yarn.t | 5 ----- .../persistent-dependencies/6-topological-unimplemented.t | 1 - turborepo-tests/integration/tests/pkg-inference.t | 1 - .../integration/tests/prune/composable-config.t | 1 - .../integration/tests/run-caching/cache-state.t | 1 - .../integration/tests/run-logging/errors-only.t | 2 -- .../integration/tests/run-logging/log-order-github.t | 3 --- .../integration/tests/run-logging/log-order-grouped.t | 6 ------ .../integration/tests/run-logging/log-order-stream.t | 8 +------- .../integration/tests/run-logging/log-prefix.t | 1 - turborepo-tests/integration/tests/run-logging/verbosity.t | 2 -- turborepo-tests/integration/tests/run-summary/enable.t | 1 - turborepo-tests/integration/tests/run-summary/monorepo.t | 1 - turborepo-tests/integration/tests/run/continue.t | 1 - turborepo-tests/integration/tests/run/gitignored-inputs.t | 2 -- turborepo-tests/integration/tests/run/one-script-error.t | 2 -- turborepo-tests/integration/tests/run/profile.t | 1 - .../integration/tests/run/single-package/with-deps-run.t | 1 - turborepo-tests/integration/tests/run/unnamed-packages.t | 1 - .../integration/tests/task-dependencies/overwriting.t | 3 --- .../integration/tests/task-dependencies/root-workspace.t | 2 -- .../integration/tests/task-dependencies/topological.t | 2 -- .../integration/tests/workspace-configs/add-keys.t | 2 -- .../integration/tests/workspace-configs/cross-workspace.t | 2 -- .../workspace-configs/missing-workspace-config-deps.t | 2 -- .../integration/tests/workspace-configs/omit-keys-deps.t | 2 -- .../tests/workspace-configs/override-values-deps.t | 1 - .../integration/tests/workspace-configs/persistent.t | 2 -- 34 files changed, 6 insertions(+), 78 deletions(-) diff --git a/crates/turborepo-lib/src/task_graph/mod.rs b/crates/turborepo-lib/src/task_graph/mod.rs index e8c9afc4e8b8b..8b8d32aed9f00 100644 --- a/crates/turborepo-lib/src/task_graph/mod.rs +++ b/crates/turborepo-lib/src/task_graph/mod.rs @@ -23,9 +23,13 @@ pub struct TaskOutputs { } impl TaskOutputs { + // We consider an empty outputs to be a log output and nothing else pub fn is_empty(&self) -> bool { - self.inclusions.is_empty() && self.exclusions.is_empty() + self.inclusions.len() == 1 + && self.inclusions[0].ends_with(".log") + && self.exclusions.is_empty() } + pub fn validated_inclusions(&self) -> Result, GlobError> { self.inclusions .iter() diff --git a/turborepo-tests/integration/tests/filter-run.t b/turborepo-tests/integration/tests/filter-run.t index e781a5deff387..5066f610c8d75 100644 --- a/turborepo-tests/integration/tests/filter-run.t +++ b/turborepo-tests/integration/tests/filter-run.t @@ -41,7 +41,6 @@ Setup Time:\s*[\.0-9]+m?s (re) WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Non existent package name should error $ ${TURBO} run build --filter="foo" --output-logs none diff --git a/turborepo-tests/integration/tests/global-env.t b/turborepo-tests/integration/tests/global-env.t index 3d83e1a4af050..a22269cf5b2e9 100644 --- a/turborepo-tests/integration/tests/global-env.t +++ b/turborepo-tests/integration/tests/global-env.t @@ -14,7 +14,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # run again and ensure there's a cache hit $ ${TURBO} run build --filter=util --output-logs=hash-only \xe2\x80\xa2 Packages in scope: util (esc) @@ -37,7 +36,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # set env var with "THASH" and ensure cache miss $ SOMETHING_THASH_YES=hi ${TURBO} run build --filter=util --output-logs=hash-only \xe2\x80\xa2 Packages in scope: util (esc) @@ -60,7 +58,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # THASH deprecation doesn't break --dry=json $ SOMETHING_THASH_YES=hi ${TURBO} run build --filter=util --dry=json | jq -r '.tasks[0].environmentVariables.global[0]' null diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t b/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t index feb86bc7aad19..f8abbee558046 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/berry.t @@ -14,7 +14,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -26,7 +25,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -55,7 +53,6 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -79,7 +76,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -91,7 +87,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t b/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t index e23fbc10c92ec..35efd97e70266 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/npm.t @@ -18,7 +18,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -34,7 +33,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -71,7 +69,6 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -99,7 +96,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -115,7 +111,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t index 45ff462ccf3b8..6df37b1e3aa6a 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/pnpm.t @@ -18,7 +18,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -34,7 +33,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -71,7 +69,6 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump pnpm-lock" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -124,7 +121,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -140,7 +136,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t index 00e687b46999f..71dc9432e8fbd 100644 --- a/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t +++ b/turborepo-tests/integration/tests/lockfile-aware-caching/yarn.t @@ -18,7 +18,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -34,7 +33,6 @@ Populate cache Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Bump dependency for b and rebuild Only b should have a cache miss @@ -71,7 +69,6 @@ Only b should have a cache miss Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "bump lockfile" --quiet Only root and b should be rebuilt since only the deps for b had a version bump @@ -124,7 +121,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task a#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --filter=b \xe2\x80\xa2 Packages in scope: b (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -140,7 +136,6 @@ Bump of root workspace invalidates all packages Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task b#build. Please check your `outputs` key in `turbo.json` Add lockfile changes to a commit $ git add . && git commit -m "global lockfile change" --quiet Everything should be rebuilt as a dependency of the root package got bumped diff --git a/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t b/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t index ac3eaed04e6df..429824d258d25 100644 --- a/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t +++ b/turborepo-tests/integration/tests/persistent-dependencies/6-topological-unimplemented.t @@ -28,4 +28,3 @@ Cached: 0 cached, 1 total Time:\s+[.0-9]+m?s (re) - WARNING no output files found for task app-a#dev. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/pkg-inference.t b/turborepo-tests/integration/tests/pkg-inference.t index f31552432ec1c..51eeadef87124 100644 --- a/turborepo-tests/integration/tests/pkg-inference.t +++ b/turborepo-tests/integration/tests/pkg-inference.t @@ -17,4 +17,3 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/prune/composable-config.t b/turborepo-tests/integration/tests/prune/composable-config.t index 4bd1061db93cb..e9dd448c009b7 100644 --- a/turborepo-tests/integration/tests/prune/composable-config.t +++ b/turborepo-tests/integration/tests/prune/composable-config.t @@ -22,6 +22,5 @@ Make sure that the internal util package is part of the prune output Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task docs#new-task. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run-caching/cache-state.t b/turborepo-tests/integration/tests/run-caching/cache-state.t index 9bda6f5001be3..65f8e08a1b480 100644 --- a/turborepo-tests/integration/tests/run-caching/cache-state.t +++ b/turborepo-tests/integration/tests/run-caching/cache-state.t @@ -12,7 +12,6 @@ Run a build to get a local cache. Time:\s+[.0-9]+m?s (re) WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Do a dry run so we can see the state of the cache diff --git a/turborepo-tests/integration/tests/run-logging/errors-only.t b/turborepo-tests/integration/tests/run-logging/errors-only.t index 86f52be785871..403f3aa02343d 100644 --- a/turborepo-tests/integration/tests/run-logging/errors-only.t +++ b/turborepo-tests/integration/tests/run-logging/errors-only.t @@ -13,7 +13,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task app-a#build. Please check your `outputs` key in `turbo.json` @@ -29,7 +28,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task app-a#buildsuccess. Please check your `outputs` key in `turbo.json` # [x] error exit diff --git a/turborepo-tests/integration/tests/run-logging/log-order-github.t b/turborepo-tests/integration/tests/run-logging/log-order-github.t index ea640a80f9588..791b4c9adef65 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-github.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-github.t @@ -31,8 +31,6 @@ because otherwise prysk interprets them as multiline commands Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # Build as if we are in Github Actions with a task log prefix. $ GITHUB_ACTIONS=1 ${TURBO} run build --force --log-prefix="task" --filter=util \xe2\x80\xa2 Packages in scope: util (esc) @@ -52,7 +50,6 @@ because otherwise prysk interprets them as multiline commands Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Verify that errors are grouped properly $ GITHUB_ACTIONS=1 ${TURBO} run fail diff --git a/turborepo-tests/integration/tests/run-logging/log-order-grouped.t b/turborepo-tests/integration/tests/run-logging/log-order-grouped.t index 029dae1111954..52ba608a31e5b 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-grouped.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-grouped.t @@ -25,8 +25,6 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # We can get the same behavior with an env var @@ -53,8 +51,6 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # The flag wins over the env var $ TURBO_LOG_ORDER=stream ${TURBO} run build --log-order grouped --force @@ -80,6 +76,4 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/run-logging/log-order-stream.t b/turborepo-tests/integration/tests/run-logging/log-order-stream.t index 0921b6db9c5b4..d736b24289e4f 100644 --- a/turborepo-tests/integration/tests/run-logging/log-order-stream.t +++ b/turborepo-tests/integration/tests/run-logging/log-order-stream.t @@ -25,8 +25,6 @@ Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` The env var set to stream works (this is default, so this test doesn't guarantee the env var is "working"), it just guarantees setting this env var won't crash. @@ -53,8 +51,6 @@ it just guarantees setting this env var won't crash. Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` The flag wins over the env var $ TURBO_LOG_ORDER=grouped ${TURBO} run build --log-order stream --force @@ -80,6 +76,4 @@ The flag wins over the env var Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` - + diff --git a/turborepo-tests/integration/tests/run-logging/log-prefix.t b/turborepo-tests/integration/tests/run-logging/log-prefix.t index e9be9e7837d75..d9af3064fe987 100644 --- a/turborepo-tests/integration/tests/run-logging/log-prefix.t +++ b/turborepo-tests/integration/tests/run-logging/log-prefix.t @@ -17,7 +17,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task app-a#build. Please check your `outputs` key in `turbo.json` # Check that the cached logs don't have prefixes $ cat app-a/.turbo/turbo-build.log diff --git a/turborepo-tests/integration/tests/run-logging/verbosity.t b/turborepo-tests/integration/tests/run-logging/verbosity.t index 3f104ff7805ac..3c009b31a4d5f 100644 --- a/turborepo-tests/integration/tests/run-logging/verbosity.t +++ b/turborepo-tests/integration/tests/run-logging/verbosity.t @@ -17,7 +17,6 @@ Verbosity level 1 Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` $ ${TURBO} build --verbosity=1 --filter=util --force \xe2\x80\xa2 Packages in scope: util (esc) \xe2\x80\xa2 Running build in 1 packages (esc) @@ -33,7 +32,6 @@ Verbosity level 1 Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Verbosity level 2 $ ${TURBO} build -vv --filter=util --force 1> VERBOSEVV 2>&1 diff --git a/turborepo-tests/integration/tests/run-summary/enable.t b/turborepo-tests/integration/tests/run-summary/enable.t index 2ab250abcaa0a..ef30fd39f32ad 100644 --- a/turborepo-tests/integration/tests/run-summary/enable.t +++ b/turborepo-tests/integration/tests/run-summary/enable.t @@ -27,7 +27,6 @@ Setup $ rm -rf .turbo/runs $ TURBO_RUN_SUMMARY=true ${TURBO} run build > /dev/null WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` $ /bin/ls .turbo/runs/*.json | wc -l \s*1 (re) # env var=true, --flag=true: yes diff --git a/turborepo-tests/integration/tests/run-summary/monorepo.t b/turborepo-tests/integration/tests/run-summary/monorepo.t index 9d8e0034d1fc4..724cc56f773ac 100644 --- a/turborepo-tests/integration/tests/run-summary/monorepo.t +++ b/turborepo-tests/integration/tests/run-summary/monorepo.t @@ -6,7 +6,6 @@ Setup $ ${TURBO} run build --summarize -- someargs > /dev/null # first run (should be cache miss) WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` # HACK: Generated run summaries are named with a ksuid, which is a time-sorted ID. This _generally_ works # but we're seeing in this test that sometimes a summary file is not sorted (with /bin/ls) in the order we expect diff --git a/turborepo-tests/integration/tests/run/continue.t b/turborepo-tests/integration/tests/run/continue.t index 39a844340f5b9..d35ffac9b2655 100644 --- a/turborepo-tests/integration/tests/run/continue.t +++ b/turborepo-tests/integration/tests/run/continue.t @@ -84,6 +84,5 @@ Run with --continue Time:\s*[\.0-9]+m?s (re) Failed: other-app#build, some-lib#build - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] diff --git a/turborepo-tests/integration/tests/run/gitignored-inputs.t b/turborepo-tests/integration/tests/run/gitignored-inputs.t index 0c4a835f5a153..5c2f835fe4230 100644 --- a/turborepo-tests/integration/tests/run/gitignored-inputs.t +++ b/turborepo-tests/integration/tests/run/gitignored-inputs.t @@ -16,7 +16,6 @@ Some helper functions to parse the summary file Just run the util package, it's simpler $ ${TURBO} run build --filter=util --output-logs=hash-only --summarize | grep "util:build: cache" - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` util:build: cache miss, executing 11cff3dd389fdfed $ FIRST=$(/bin/ls .turbo/runs/*.json | head -n1) @@ -31,7 +30,6 @@ Change the content of internal.txt Hash does not change, because it is gitignored $ ${TURBO} run build --filter=util --output-logs=hash-only --summarize | grep "util:build: cache" - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` util:build: cache miss, executing a489883a3c7cd307 The internal.txt hash should be different from the one before diff --git a/turborepo-tests/integration/tests/run/one-script-error.t b/turborepo-tests/integration/tests/run/one-script-error.t index 005a8aa2e81f8..77de8eff33d5b 100644 --- a/turborepo-tests/integration/tests/run/one-script-error.t +++ b/turborepo-tests/integration/tests/run/one-script-error.t @@ -30,7 +30,6 @@ Note that npm reports any failed script as exit code 1, even though we "exit 2" Time:\s*[\.0-9]+m?s (re) Failed: my-app#error - WARNING no output files found for task my-app#okay. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] @@ -99,6 +98,5 @@ Make sure error code isn't swallowed with continue Time:\s*[\.0-9]+m?s (re) Failed: my-app#error - WARNING no output files found for task my-app#okay2. Please check your `outputs` key in `turbo.json` ERROR run failed: command exited (1) [1] diff --git a/turborepo-tests/integration/tests/run/profile.t b/turborepo-tests/integration/tests/run/profile.t index e0d4d083452db..e559e0d52afc3 100644 --- a/turborepo-tests/integration/tests/run/profile.t +++ b/turborepo-tests/integration/tests/run/profile.t @@ -5,6 +5,5 @@ Run build and record a trace Ignore output since we want to focus on testing the generated profile $ ${TURBO} build --profile=build.trace > turbo.log WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` Make sure the resulting trace is valid JSON $ node -e "require('./build.trace')" diff --git a/turborepo-tests/integration/tests/run/single-package/with-deps-run.t b/turborepo-tests/integration/tests/run/single-package/with-deps-run.t index f11c66174621a..0050f76b42fcf 100644 --- a/turborepo-tests/integration/tests/run/single-package/with-deps-run.t +++ b/turborepo-tests/integration/tests/run/single-package/with-deps-run.t @@ -21,7 +21,6 @@ Check Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task //#test. Please check your `outputs` key in `turbo.json` Run a second time, verify caching works because there is a config $ ${TURBO} run test \xe2\x80\xa2 Running test (esc) diff --git a/turborepo-tests/integration/tests/run/unnamed-packages.t b/turborepo-tests/integration/tests/run/unnamed-packages.t index 8df57aa3e675b..9941be7611711 100644 --- a/turborepo-tests/integration/tests/run/unnamed-packages.t +++ b/turborepo-tests/integration/tests/run/unnamed-packages.t @@ -18,4 +18,3 @@ which does not have a name should be ignored. We should process it but filter. Cached: 0 cached, 1 total Time: (.+) (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/task-dependencies/overwriting.t b/turborepo-tests/integration/tests/task-dependencies/overwriting.t index d3ece94870074..555833f1733f6 100644 --- a/turborepo-tests/integration/tests/task-dependencies/overwriting.t +++ b/turborepo-tests/integration/tests/task-dependencies/overwriting.t @@ -4,9 +4,6 @@ Setup Test $ ${TURBO} run build > tmp.log - WARNING no output files found for task workspace-a#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task workspace-a#generate. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task workspace-b#build. Please check your `outputs` key in `turbo.json` $ cat tmp.log | grep "Packages in scope" -A2 \xe2\x80\xa2 Packages in scope: workspace-a, workspace-b (esc) \xe2\x80\xa2 Running build in 2 packages (esc) diff --git a/turborepo-tests/integration/tests/task-dependencies/root-workspace.t b/turborepo-tests/integration/tests/task-dependencies/root-workspace.t index 4f730794c610d..7ee31d3c99a52 100644 --- a/turborepo-tests/integration/tests/task-dependencies/root-workspace.t +++ b/turborepo-tests/integration/tests/task-dependencies/root-workspace.t @@ -22,5 +22,3 @@ This tests asserts that root tasks can depend on workspace#task Cached: 0 cached, 2 total Time:\s*[\.0-9ms]+ (re) - WARNING no output files found for task //#mytask. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task lib-a#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/task-dependencies/topological.t b/turborepo-tests/integration/tests/task-dependencies/topological.t index f2d862d407a6c..41543406c3ab3 100644 --- a/turborepo-tests/integration/tests/task-dependencies/topological.t +++ b/turborepo-tests/integration/tests/task-dependencies/topological.t @@ -23,8 +23,6 @@ Check my-app#build output Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task my-app#build. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task util#build. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/workspace-configs/add-keys.t b/turborepo-tests/integration/tests/workspace-configs/add-keys.t index 8aacdecc21cad..db2141c3e5d2c 100644 --- a/turborepo-tests/integration/tests/workspace-configs/add-keys.t +++ b/turborepo-tests/integration/tests/workspace-configs/add-keys.t @@ -10,7 +10,6 @@ Setup # 1. First run, assert for `dependsOn` and `outputs` keys $ ${TURBO} run add-keys-task --filter=add-keys > tmp.log - WARNING no output files found for task add-keys#add-keys-underlying-task. Please check your `outputs` key in `turbo.json` $ cat tmp.log \xe2\x80\xa2 Packages in scope: add-keys (esc) \xe2\x80\xa2 Running add-keys-task in 1 packages (esc) @@ -77,7 +76,6 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task add-keys#add-keys-underlying-task. Please check your `outputs` key in `turbo.json` # 4. Set env var and assert cache miss $ SOME_VAR=somevalue ${TURBO} run add-keys-task --filter=add-keys \xe2\x80\xa2 Packages in scope: add-keys (esc) diff --git a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t index c168128425281..17af56d6dabe9 100644 --- a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t +++ b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t @@ -21,5 +21,3 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task blank-pkg#cross-workspace-underlying-task. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task cross-workspace#cross-workspace-task. Please check your `outputs` key in `turbo.json` diff --git a/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t b/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t index bee09fd83e0ac..5f7f521c27028 100644 --- a/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/missing-workspace-config-deps.t @@ -7,8 +7,6 @@ Setup # 1. First run, assert that dependet tasks run `dependsOn` $ ${TURBO} run missing-workspace-config-task-with-deps --filter=missing-workspace-config > tmp.log - WARNING no output files found for task blank-pkg#missing-workspace-config-underlying-topo-task. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task missing-workspace-config#missing-workspace-config-underlying-task. Please check your `outputs` key in `turbo.json` # Validate in pieces. `omit-key` task has two dependsOn values, and those tasks # can run in non-deterministic order. So we need to validate the logs in the pieces. $ cat tmp.log | grep "in scope" -A 2 diff --git a/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t b/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t index 8aebdc9edb07e..1486678c3ab0b 100644 --- a/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/omit-keys-deps.t @@ -8,8 +8,6 @@ Setup # 1. First run, assert for `dependsOn` and `outputs` keys $ ${TURBO} run omit-keys-task-with-deps --filter=omit-keys > tmp.log - WARNING no output files found for task blank-pkg#omit-keys-underlying-topo-task. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task omit-keys#omit-keys-underlying-task. Please check your `outputs` key in `turbo.json` # Validate in pieces. `omit-key` task has two dependsOn values, and those tasks # can run in non-deterministic order. So we need to validatte the logs in pieces. $ cat tmp.log | grep "in scope" -A 1 diff --git a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t index 8d2cdaaf542ce..fb4106d822b6f 100644 --- a/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t +++ b/turborepo-tests/integration/tests/workspace-configs/override-values-deps.t @@ -22,7 +22,6 @@ Setup Cached: 0 cached, 1 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task override-values#override-values-task-with-deps. Please check your `outputs` key in `turbo.json` # This is the same test as above, but with --dry and testing the resolvedTaskDefinition has the same value for dependsOn $ ${TURBO} run override-values-task-with-deps --filter=override-values --dry=json | jq '.tasks | map(select(.taskId == "override-values#override-values-task-with-deps")) | .[0].resolvedTaskDefinition' diff --git a/turborepo-tests/integration/tests/workspace-configs/persistent.t b/turborepo-tests/integration/tests/workspace-configs/persistent.t index c5fecccf0b36c..c6ead0abd6909 100644 --- a/turborepo-tests/integration/tests/workspace-configs/persistent.t +++ b/turborepo-tests/integration/tests/workspace-configs/persistent.t @@ -47,8 +47,6 @@ This test covers: Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) - WARNING no output files found for task persistent#persistent-task-2-parent. Please check your `outputs` key in `turbo.json` - WARNING no output files found for task persistent#persistent-task-2. Please check your `outputs` key in `turbo.json` # persistent-task-3-parent dependsOn persistent-task-3 # persistent-task-3 is persistent:true in the root workspace # persistent-task-3 is defined in workspace, but does NOT have the persistent flag From 19478c9af6659e76490d3fbaca7334a8ecc6d2c2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 22 Oct 2024 09:08:59 -0400 Subject: [PATCH 097/218] release(turborepo): 2.2.3 (#9303) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index d2c21ca24757b..9888bc24810b7 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.2", + "version": "2.2.3", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 6ce3ade69bb95..beb4579e80e61 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.2", + "version": "2.2.3", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 183e04092a26d..049fb9aaf33e0 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.2", + "version": "2.2.3", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 7fdda23ec358e..b7497314dc21e 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.2", + "version": "2.2.3", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 98399e7a6d6d6..d790cfc2d143e 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.2", + "version": "2.2.3", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 282740ff25176..c851dff2421e9 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.2", + "version": "2.2.3", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 715187e1d54f1..eba8db2d0be93 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.2", + "version": "2.2.3", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 00f4b0f26505d..7c08188652d76 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.2", + "version": "2.2.3", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 96bcfdec315a6..f8a9c309790f3 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.2", + "version": "2.2.3", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.2", - "turbo-darwin-arm64": "2.2.2", - "turbo-linux-64": "2.2.2", - "turbo-linux-arm64": "2.2.2", - "turbo-windows-64": "2.2.2", - "turbo-windows-arm64": "2.2.2" + "turbo-darwin-64": "2.2.3", + "turbo-darwin-arm64": "2.2.3", + "turbo-linux-64": "2.2.3", + "turbo-linux-arm64": "2.2.3", + "turbo-windows-64": "2.2.3", + "turbo-windows-arm64": "2.2.3" } } diff --git a/version.txt b/version.txt index bcf0d2f00a4c2..41ad0d0dde9c9 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.2 +2.2.3 latest From 5e47ff6b1b496df0b9d3b4057a0a80043d594c02 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 22 Oct 2024 09:54:06 -0400 Subject: [PATCH 098/218] chore(test): add test for cyclic error (#9305) ### Description As mentioned in https://github.com/vercel/turborepo/issues/9270 we currently output all strongly connected components. This PR just adds a test to display the current behavior where we show the set of nodes and not all cycles that might be contained in the SCC. ### Testing Instructions Test runs and CI is green --- Cargo.lock | 1 + Cargo.toml | 1 + crates/turborepo-graph-utils/Cargo.toml | 3 ++ crates/turborepo-graph-utils/src/lib.rs | 38 +++++++++++++++++++++++++ crates/turborepo-vercel-api/Cargo.toml | 2 +- 5 files changed, 44 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index ff29fd4c24957..32634a5198221 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6279,6 +6279,7 @@ name = "turborepo-graph-utils" version = "0.1.0" dependencies = [ "futures", + "insta", "itertools 0.10.5", "log", "petgraph", diff --git a/Cargo.toml b/Cargo.toml index ad2590030e909..d378b41e4fa7a 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -111,6 +111,7 @@ httpmock = { version = "0.6.8", default-features = false } indexmap = "1.9.2" indicatif = "0.17.3" indoc = "2.0.0" +insta = { version = "1.34.0", features = ["json"] } itertools = "0.10.5" lazy_static = "1.4.0" merge = "0.1.0" diff --git a/crates/turborepo-graph-utils/Cargo.toml b/crates/turborepo-graph-utils/Cargo.toml index e3772127fde4e..cfc319d9e786e 100644 --- a/crates/turborepo-graph-utils/Cargo.toml +++ b/crates/turborepo-graph-utils/Cargo.toml @@ -15,3 +15,6 @@ petgraph = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true, features = ["full", "time"] } tracing = { workspace = true, features = ["log"] } + +[dev-dependencies] +insta = { workspace = true } diff --git a/crates/turborepo-graph-utils/src/lib.rs b/crates/turborepo-graph-utils/src/lib.rs index 9609a208c1c7b..ca78f0ff2cd4a 100644 --- a/crates/turborepo-graph-utils/src/lib.rs +++ b/crates/turborepo-graph-utils/src/lib.rs @@ -70,3 +70,41 @@ pub fn validate_graph(graph: &Graph) -> Result<(), Error> { } pub use walker::{WalkMessage, Walker}; + +#[cfg(test)] +mod test { + use insta::assert_snapshot; + use petgraph::graph::Graph; + + use super::*; + + #[test] + fn test_cycle_err_message() { + /* + a -> b --> c -> d + | |\____/ | + | \_______/ | + \_____________/ + */ + let mut g = Graph::new(); + let a = g.add_node("a"); + let b = g.add_node("b"); + let c = g.add_node("c"); + let d = g.add_node("d"); + + g.add_edge(a, b, ()); + g.add_edge(b, c, ()); + g.add_edge(c, b, ()); + g.add_edge(c, d, ()); + g.add_edge(d, b, ()); + g.add_edge(d, a, ()); + + let result = validate_graph(&g); + assert!(result.is_err()); + let err = result.unwrap_err(); + assert_snapshot!(err.to_string(), @r###" + cyclic dependency detected: + d, c, b, a + "###); + } +} diff --git a/crates/turborepo-vercel-api/Cargo.toml b/crates/turborepo-vercel-api/Cargo.toml index bbfbb807f4a2c..0a398bf56d824 100644 --- a/crates/turborepo-vercel-api/Cargo.toml +++ b/crates/turborepo-vercel-api/Cargo.toml @@ -7,7 +7,7 @@ license = "MIT" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dev-dependencies] -insta = { version = "1.34.0", features = ["json"] } +insta = { workspace = true } serde_json = { workspace = true } test-case = { workspace = true } From 2ee2460ed483943f45a512fbf28dea6063b05cc3 Mon Sep 17 00:00:00 2001 From: Maksim Bondarenkov <119937608+ognevny@users.noreply.github.com> Date: Tue, 22 Oct 2024 17:12:10 +0300 Subject: [PATCH 099/218] feat: Upgrade to Rust 1.82.0 (#9293) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description fix https://rust-lang.github.io/rust-clippy/master/index.html#too_long_first_doc_paragraph and https://rust-lang.github.io/rust-clippy/master/index.html#large_enum_variant clippy lints ### Testing Instructions `cargo t` --- crates/turborepo-auth/src/lib.rs | 4 +++- crates/turborepo-dirs/src/lib.rs | 18 ++++++++++-------- crates/turborepo-filewatch/src/cookies.rs | 4 +++- .../turborepo-filewatch/src/package_watcher.rs | 14 ++++++++------ crates/turborepo-globwalk/src/lib.rs | 4 +++- .../src/change_mapper/package.rs | 5 ++++- .../src/package_graph/mod.rs | 4 +++- crates/turborepo-ui/src/prefixed.rs | 5 +++-- crates/turborepo-ui/src/wui/query.rs | 6 ++++-- rust-toolchain.toml | 2 +- 10 files changed, 42 insertions(+), 24 deletions(-) diff --git a/crates/turborepo-auth/src/lib.rs b/crates/turborepo-auth/src/lib.rs index 732b673c61eaa..72b34dd423e1e 100644 --- a/crates/turborepo-auth/src/lib.rs +++ b/crates/turborepo-auth/src/lib.rs @@ -27,7 +27,9 @@ pub const VERCEL_TOKEN_FILE: &str = "auth.json"; pub const TURBO_TOKEN_DIR: &str = "turborepo"; pub const TURBO_TOKEN_FILE: &str = "config.json"; -/// Token is the result of a successful login or an existing token. This acts as +/// Token. +/// +/// It's the result of a successful login or an existing token. This acts as /// a wrapper for a bunch of token operations, like validation. We explicitly do /// not store any information about the underlying token for a few reasons, like /// having a token invalidated on the web but not locally. diff --git a/crates/turborepo-dirs/src/lib.rs b/crates/turborepo-dirs/src/lib.rs index a72dc4b33005c..cff0645f4b18c 100644 --- a/crates/turborepo-dirs/src/lib.rs +++ b/crates/turborepo-dirs/src/lib.rs @@ -2,10 +2,11 @@ use dirs_next::config_dir as dirs_config_dir; use thiserror::Error; use turbopath::{AbsoluteSystemPathBuf, PathError}; -/// Returns the path to the user's configuration directory. This is a wrapper -/// around `dirs_next::config_dir` that also checks the `TURBO_CONFIG_DIR_PATH` -/// environment variable. If the environment variable is set, it will return -/// that path instead of `dirs_next::config_dir`. +/// Returns the path to the user's configuration directory. +/// +/// This is a wrapper around `dirs_next::config_dir` that also checks the +/// `TURBO_CONFIG_DIR_PATH` environment variable. If the environment variable +/// is set, it will return that path instead of `dirs_next::config_dir`. pub fn config_dir() -> Result, PathError> { if let Ok(dir) = std::env::var("TURBO_CONFIG_DIR_PATH") { return AbsoluteSystemPathBuf::new(dir).map(Some); @@ -16,10 +17,11 @@ pub fn config_dir() -> Result, PathError> { .transpose() } -/// Returns the path to the user's configuration directory. This is a wrapper -/// around `dirs_next::config_dir` that also checks the `VERCEL_CONFIG_DIR_PATH` -/// environment variable. If the environment variable is set, it will return -/// that path instead of `dirs_next::config_dir`. +/// Returns the path to the user's configuration directory. +/// +/// This is a wrapper around `dirs_next::config_dir` that also checks the +/// VERCEL_CONFIG_DIR_PATH` environment variable. If the environment variable +/// is set, it will return that path instead of `dirs_next::config_dir`. pub fn vercel_config_dir() -> Result, PathError> { if let Ok(dir) = std::env::var("VERCEL_CONFIG_DIR_PATH") { return AbsoluteSystemPathBuf::new(dir).map(Some); diff --git a/crates/turborepo-filewatch/src/cookies.rs b/crates/turborepo-filewatch/src/cookies.rs index c8be4481915a2..a1a1c38473bb4 100644 --- a/crates/turborepo-filewatch/src/cookies.rs +++ b/crates/turborepo-filewatch/src/cookies.rs @@ -1,4 +1,6 @@ -//! Cookies are the file watcher's way of synchronizing file system events. They +//! Cookies. +//! +//! They are the file watcher's way of synchronizing file system events. They //! are files that are added to the file system that are named with the format //! `[id].cookie`, where `[id]` is an increasing serial number, e.g. //! `1.cookie`, `2.cookie`, and so on. The daemon can then watch for the diff --git a/crates/turborepo-filewatch/src/package_watcher.rs b/crates/turborepo-filewatch/src/package_watcher.rs index 76fcc974c5799..448b4c6e44879 100644 --- a/crates/turborepo-filewatch/src/package_watcher.rs +++ b/crates/turborepo-filewatch/src/package_watcher.rs @@ -155,7 +155,7 @@ enum PackageState { InvalidGlobs(String), ValidWorkspaces { package_manager: PackageManager, - filter: WorkspaceGlobs, + filter: Box, workspaces: HashMap, }, } @@ -166,7 +166,7 @@ enum State { debouncer: Arc, version: Version, }, - Ready(PackageState), + Ready(Box), } // Because our package manager detection is coupled with the workspace globs, we @@ -289,7 +289,7 @@ impl Subscriber { // ignore this update, as we know it is stale. if package_result.version == *version { self.write_state(&package_result.state); - *state = State::Ready(package_result.state); + *state = State::Ready(Box::new(package_result.state)); } } } @@ -400,8 +400,10 @@ impl Subscriber { // If we don't have a valid package manager and workspace globs, nothing to be // done here let PackageState::ValidWorkspaces { - filter, workspaces, .. - } = package_state + ref filter, + ref mut workspaces, + .. + } = **package_state else { return; }; @@ -550,7 +552,7 @@ async fn discover_packages(repo_root: AbsoluteSystemPathBuf) -> PackageState { .collect::>(); PackageState::ValidWorkspaces { package_manager: initial_discovery.package_manager, - filter, + filter: Box::new(filter), workspaces, } } diff --git a/crates/turborepo-globwalk/src/lib.rs b/crates/turborepo-globwalk/src/lib.rs index f986b9059664c..9854ff793cba8 100644 --- a/crates/turborepo-globwalk/src/lib.rs +++ b/crates/turborepo-globwalk/src/lib.rs @@ -282,7 +282,9 @@ pub struct GlobError { reason: String, } -/// ValidatedGlob represents an input string that we have either validated or +/// ValidatedGlob. +/// +/// Represents an input string that we have either validated or /// modified to fit our constraints. It does not _yet_ validate that the glob is /// a valid glob pattern, just that we have checked for unix format, ':'s, clean /// paths, etc. diff --git a/crates/turborepo-repository/src/change_mapper/package.rs b/crates/turborepo-repository/src/change_mapper/package.rs index fa24e05d8e10e..f6aa3645a2bca 100644 --- a/crates/turborepo-repository/src/change_mapper/package.rs +++ b/crates/turborepo-repository/src/change_mapper/package.rs @@ -24,6 +24,7 @@ pub trait PackageChangeMapper { } /// Detects package by checking if the file is inside the package. +/// /// Does *not* use the `globalDependencies` in turbo.json. /// Since we don't have these dependencies, any file that is /// not in any package will automatically invalidate all @@ -77,7 +78,9 @@ pub enum Error { InvalidFilter(#[from] BuildError), } -/// A package detector that uses a global deps list to determine +/// A package detector. +/// +/// It uses a global deps list to determine /// if a file should cause all packages to be marked as changed. /// This is less conservative than the `DefaultPackageChangeMapper`, /// which assumes that any changed file that is not in a package diff --git a/crates/turborepo-repository/src/package_graph/mod.rs b/crates/turborepo-repository/src/package_graph/mod.rs index 2701c3ec26dfc..bdff72e1d862b 100644 --- a/crates/turborepo-repository/src/package_graph/mod.rs +++ b/crates/turborepo-repository/src/package_graph/mod.rs @@ -36,7 +36,9 @@ pub struct PackageGraph { repo_root: AbsoluteSystemPathBuf, } -/// The WorkspacePackage follows the Vercel glossary of terms where "Workspace" +/// The WorkspacePackage. +/// +/// It follows the Vercel glossary of terms where "Workspace" /// is the collection of packages and "Package" is a single package within the /// workspace. https://vercel.com/docs/vercel-platform/glossary /// There are other structs in this module that have "Workspace" in the name, diff --git a/crates/turborepo-ui/src/prefixed.rs b/crates/turborepo-ui/src/prefixed.rs index a6b577f8d0a63..f2f98a788fec4 100644 --- a/crates/turborepo-ui/src/prefixed.rs +++ b/crates/turborepo-ui/src/prefixed.rs @@ -8,8 +8,9 @@ use tracing::error; use crate::{ColorConfig, LineWriter}; -/// Writes messages with different prefixes, depending on log level. Note that -/// this does output the prefix when message is empty, unlike the Go +/// Writes messages with different prefixes, depending on log level. +/// +/// Note that this does output the prefix when message is empty, unlike the Go /// implementation. We do this because this behavior is what we actually /// want for replaying logs. pub struct PrefixedUI { diff --git a/crates/turborepo-ui/src/wui/query.rs b/crates/turborepo-ui/src/wui/query.rs index 004be8e278b86..51b4a6053db3f 100644 --- a/crates/turborepo-ui/src/wui/query.rs +++ b/crates/turborepo-ui/src/wui/query.rs @@ -37,8 +37,10 @@ impl<'a> CurrentRun<'a> { /// reading it. pub type SharedState = Arc>; -/// The query for actively running tasks (as opposed to the query for general -/// repository state `RepositoryQuery` in `turborepo_lib::query`) +/// The query for actively running tasks. +/// +/// (As opposed to the query for general repository state `RepositoryQuery` +/// in `turborepo_lib::query`) /// This is `None` when we're not actually running a task (e.g. `turbo query`) pub struct RunQuery { state: Option, diff --git a/rust-toolchain.toml b/rust-toolchain.toml index 702e3576d3baa..f540fb88506e7 100644 --- a/rust-toolchain.toml +++ b/rust-toolchain.toml @@ -1,4 +1,4 @@ [toolchain] -channel = "nightly-2024-07-19" +channel = "nightly-2024-08-30" components = ["rustfmt", "clippy"] profile = "minimal" From 39704492a85863d571be9cece9860ac46f30abcb Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Tue, 22 Oct 2024 11:10:24 -0400 Subject: [PATCH 100/218] fix(auth): add missing role (#9307) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Fix CONTRIBUTOR role for remote caching (cc @mrmckeb 👋🏼😄 ) ### Testing Instructions --- crates/turborepo-vercel-api/src/lib.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-vercel-api/src/lib.rs b/crates/turborepo-vercel-api/src/lib.rs index 9521d3a7c40a2..ba151b8d13299 100644 --- a/crates/turborepo-vercel-api/src/lib.rs +++ b/crates/turborepo-vercel-api/src/lib.rs @@ -57,11 +57,14 @@ impl Membership { #[derive(Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "UPPERCASE")] pub enum Role { - Member, + // ordered by access-level Owner, - Viewer, + Admin, + Member, Developer, + Contributor, Billing, + Viewer, } #[derive(Debug, Clone, Serialize, Deserialize)] From fecbf1bb61203f7fc4692b7309ac00262c78e7ab Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 22 Oct 2024 14:04:28 -0400 Subject: [PATCH 101/218] release(turborepo): 2.2.4-canary.0 (#9309) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 9888bc24810b7..8a8be7e5be45b 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index beb4579e80e61..730c7fcdbcf59 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 049fb9aaf33e0..f1ba4812e9d1b 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b7497314dc21e..fa41bb90ce94c 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index d790cfc2d143e..e80ea616395db 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index c851dff2421e9..1666d690a366c 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index eba8db2d0be93..2bb8de0360f4a 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 7c08188652d76..ccf5cd0abc143 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index f8a9c309790f3..a53797eedf251 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.3", + "version": "2.2.4-canary.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.3", - "turbo-darwin-arm64": "2.2.3", - "turbo-linux-64": "2.2.3", - "turbo-linux-arm64": "2.2.3", - "turbo-windows-64": "2.2.3", - "turbo-windows-arm64": "2.2.3" + "turbo-darwin-64": "2.2.4-canary.0", + "turbo-darwin-arm64": "2.2.4-canary.0", + "turbo-linux-64": "2.2.4-canary.0", + "turbo-linux-arm64": "2.2.4-canary.0", + "turbo-windows-64": "2.2.4-canary.0", + "turbo-windows-arm64": "2.2.4-canary.0" } } diff --git a/version.txt b/version.txt index 41ad0d0dde9c9..bec69e2cbbfaa 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.3 -latest +2.2.4-canary.0 +canary From 6b9be421d844d5f7db76032278d89c886a27c8af Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 22 Oct 2024 15:03:06 -0400 Subject: [PATCH 102/218] fix: use oxc-resolver hot fix for symlinks (#9302) ### Description There's a [bug in oxc-resolver](https://github.com/oxc-project/oxc-resolver/issues/263) for symlinks that basically breaks tsconfig resolution with pnpm (in a specific scenario for extending a tsconfig that's a workspace dependency). Until that's fixed, this PR switches us to a fork that has a very dumb hot fix We also add tsconfig loading, either via a parameter or via walking up the path hierarchy for the closest tsconfig ### Testing Instructions Added a test based off of [my repro](https://github.com/nicholaslyang/oxc-repro). Validated that doesn't work with main branch of oxc-resolver, but does work on my fork --- Cargo.lock | 42 ++++++++----- crates/turbo-trace/Cargo.toml | 2 +- crates/turbo-trace/src/tracer.rs | 2 +- crates/turborepo-lib/src/process/child.rs | 3 +- crates/turborepo-lib/src/process/mod.rs | 2 +- crates/turborepo-lib/src/query/file.rs | 49 ++++++++++----- .../scripts/hello_no_line.js | 0 .../scripts/hello_non_utf8.js | 0 .../scripts/hello_world.js | 0 .../scripts/hello_world_hello_moon.js | 0 .../scripts/sleep_5_ignore.js | 0 .../scripts/sleep_5_interruptable.js | 0 .../scripts/stdin_stdout.js | 0 crates/turborepo/Cargo.toml | 5 ++ crates/turborepo/tests/query.rs | 60 +++++++++++++++++++ .../tests/snapshots/query__check_query.snap | 23 +++++++ turborepo-tests/helpers/install_deps.sh | 2 - .../helpers/setup_package_manager.sh | 22 ++++--- .../integration/fixtures/oxc_repro/.gitignore | 3 + .../integration/fixtures/oxc_repro/README.md | 30 ++++++++++ .../oxc_repro/apps/web/nm/@repo/index.js | 1 + .../apps/web/nm/@repo/typescript-config | 1 + .../integration/fixtures/oxc_repro/index.js | 1 + .../fixtures/oxc_repro/nm/index.js | 0 .../fixtures/oxc_repro/package.json | 14 +++++ .../tooling/typescript-config/index.js | 1 + .../integration/fixtures/oxc_repro/turbo.json | 1 + 27 files changed, 219 insertions(+), 45 deletions(-) rename crates/turborepo-lib/{test => test-data}/scripts/hello_no_line.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/hello_non_utf8.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/hello_world.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/hello_world_hello_moon.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/sleep_5_ignore.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/sleep_5_interruptable.js (100%) rename crates/turborepo-lib/{test => test-data}/scripts/stdin_stdout.js (100%) create mode 100644 crates/turborepo/tests/query.rs create mode 100644 crates/turborepo/tests/snapshots/query__check_query.snap create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/.gitignore create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/README.md create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/index.js create mode 120000 turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/typescript-config create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/index.js create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/nm/index.js create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/package.json create mode 120000 turborepo-tests/integration/fixtures/oxc_repro/tooling/typescript-config/index.js create mode 100644 turborepo-tests/integration/fixtures/oxc_repro/turbo.json diff --git a/Cargo.lock b/Cargo.lock index 32634a5198221..45424d4e23596 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -718,7 +718,7 @@ dependencies = [ "biome_text_size", "bitflags 2.5.0", "bpaf", - "oxc_resolver", + "oxc_resolver 1.11.0", "serde", "termcolor", "unicode-width", @@ -2626,16 +2626,15 @@ dependencies = [ [[package]] name = "insta" -version = "1.34.0" +version = "1.40.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d64600be34b2fcfc267740a243fa7744441bb4947a619ac4e5bb6507f35fbfc" +checksum = "6593a41c7a73841868772495db7dc1e8ecab43bb5c0b6da2059246c4b506ab60" dependencies = [ "console", "lazy_static", "linked-hash-map", "serde", "similar", - "yaml-rust", ] [[package]] @@ -3598,6 +3597,26 @@ dependencies = [ "tracing", ] +[[package]] +name = "oxc_resolver" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9cf8bcda84674ae69228a823dcdb81eac9a398d99f1bbc1dbf00623009fc11c1" +dependencies = [ + "cfg-if", + "dashmap 6.1.0", + "dunce", + "indexmap 2.2.6", + "json-strip-comments", + "once_cell", + "rustc-hash 2.0.0", + "serde", + "serde_json", + "simdutf8", + "thiserror", + "tracing", +] + [[package]] name = "parking" version = "2.0.0" @@ -6027,9 +6046,13 @@ dependencies = [ "anyhow", "assert_cmd", "build-target", + "camino", + "insta", "itertools 0.10.5", "miette", "pretty_assertions", + "serde_json", + "tempfile", "turborepo-lib", "winapi", ] @@ -6041,7 +6064,7 @@ dependencies = [ "camino", "clap", "miette", - "oxc_resolver", + "oxc_resolver 2.0.0", "swc_common", "swc_ecma_ast", "swc_ecma_parser", @@ -7430,15 +7453,6 @@ dependencies = [ "rustix 0.38.31", ] -[[package]] -name = "yaml-rust" -version = "0.4.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" -dependencies = [ - "linked-hash-map", -] - [[package]] name = "yansi" version = "0.5.1" diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml index 08e15986dca9a..80526b52ca1b2 100644 --- a/crates/turbo-trace/Cargo.toml +++ b/crates/turbo-trace/Cargo.toml @@ -8,7 +8,7 @@ license = "MIT" camino.workspace = true clap = { version = "4.5.17", features = ["derive"] } miette = { workspace = true, features = ["fancy"] } -oxc_resolver = "1.11.0" +oxc_resolver = { version = "2.0.0" } swc_common = { workspace = true } swc_ecma_ast = { workspace = true } swc_ecma_parser = { workspace = true } diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index f94e085ebdb6d..e1b0e2cbaa39d 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -162,7 +162,7 @@ impl Tracer { errors.push(TraceError::PathEncoding(err)); } }, - Err(ResolveError::Builtin(_)) => {} + Err(ResolveError::Builtin { .. }) => {} Err(_) => { let (start, end) = self.source_map.span_to_char_offset(&source_file, *span); diff --git a/crates/turborepo-lib/src/process/child.rs b/crates/turborepo-lib/src/process/child.rs index a5a4d3c6281e3..59198adc7109e 100644 --- a/crates/turborepo-lib/src/process/child.rs +++ b/crates/turborepo-lib/src/process/child.rs @@ -843,7 +843,8 @@ mod test { while !root.join_component(".git").exists() { root = root.parent().unwrap().to_owned(); } - root.join_components(&["crates", "turborepo-lib", "test", "scripts"]) + println!("root: {root:?}"); + root.join_components(&["crates", "turborepo-lib", "test-data", "scripts"]) } #[test_case(false)] diff --git a/crates/turborepo-lib/src/process/mod.rs b/crates/turborepo-lib/src/process/mod.rs index 5e1751a2be007..c3c6edd4e11e7 100644 --- a/crates/turborepo-lib/src/process/mod.rs +++ b/crates/turborepo-lib/src/process/mod.rs @@ -216,7 +216,7 @@ mod test { fn get_script_command(script_name: &str) -> Command { let mut cmd = Command::new("node"); - cmd.args([format!("./test/scripts/{script_name}")]); + cmd.args([format!("./test-data/scripts/{script_name}")]); cmd } diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 78a23965cc748..8c3e8ac14d2e6 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -1,6 +1,7 @@ use std::sync::Arc; use async_graphql::{Object, SimpleObject}; +use camino::Utf8PathBuf; use itertools::Itertools; use swc_ecma_ast::EsVersion; use swc_ecma_parser::{EsSyntax, Syntax, TsSyntax}; @@ -68,10 +69,11 @@ impl File { } } -#[derive(SimpleObject, Debug)] +#[derive(SimpleObject, Debug, Default)] pub struct TraceError { message: String, path: Option, + import: Option, start: Option, end: Option, } @@ -83,27 +85,32 @@ impl From for TraceError { turbo_trace::TraceError::FileNotFound(file) => TraceError { message, path: Some(file.to_string()), - start: None, - end: None, + ..Default::default() }, turbo_trace::TraceError::PathEncoding(_) => TraceError { message, - path: None, - start: None, - end: None, + ..Default::default() }, turbo_trace::TraceError::RootFile(path) => TraceError { message, path: Some(path.to_string()), - start: None, - end: None, - }, - turbo_trace::TraceError::Resolve { span, text } => TraceError { - message, - path: Some(text.name().to_string()), - start: Some(span.offset()), - end: Some(span.offset() + span.len()), + ..Default::default() }, + turbo_trace::TraceError::Resolve { span, text } => { + let import = text + .inner() + .read_span(&span, 1, 1) + .ok() + .map(|s| String::from_utf8_lossy(s.data()).to_string()); + + TraceError { + message, + import, + path: Some(text.name().to_string()), + start: Some(span.offset()), + end: Some(span.offset() + span.len()), + } + } } } } @@ -147,11 +154,21 @@ impl File { Ok(self.path.to_string()) } - async fn dependencies(&self, depth: Option) -> TraceResult { + async fn dependencies(&self, depth: Option, ts_config: Option) -> TraceResult { + let ts_config = match ts_config { + Some(ts_config) => Some(Utf8PathBuf::from(ts_config)), + None => self + .path + .ancestors() + .skip(1) + .find(|p| p.join_component("tsconfig.json").exists()) + .map(|p| p.as_path().to_owned()), + }; + let tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], - None, + ts_config, ); let mut result = tracer.trace(depth); diff --git a/crates/turborepo-lib/test/scripts/hello_no_line.js b/crates/turborepo-lib/test-data/scripts/hello_no_line.js similarity index 100% rename from crates/turborepo-lib/test/scripts/hello_no_line.js rename to crates/turborepo-lib/test-data/scripts/hello_no_line.js diff --git a/crates/turborepo-lib/test/scripts/hello_non_utf8.js b/crates/turborepo-lib/test-data/scripts/hello_non_utf8.js similarity index 100% rename from crates/turborepo-lib/test/scripts/hello_non_utf8.js rename to crates/turborepo-lib/test-data/scripts/hello_non_utf8.js diff --git a/crates/turborepo-lib/test/scripts/hello_world.js b/crates/turborepo-lib/test-data/scripts/hello_world.js similarity index 100% rename from crates/turborepo-lib/test/scripts/hello_world.js rename to crates/turborepo-lib/test-data/scripts/hello_world.js diff --git a/crates/turborepo-lib/test/scripts/hello_world_hello_moon.js b/crates/turborepo-lib/test-data/scripts/hello_world_hello_moon.js similarity index 100% rename from crates/turborepo-lib/test/scripts/hello_world_hello_moon.js rename to crates/turborepo-lib/test-data/scripts/hello_world_hello_moon.js diff --git a/crates/turborepo-lib/test/scripts/sleep_5_ignore.js b/crates/turborepo-lib/test-data/scripts/sleep_5_ignore.js similarity index 100% rename from crates/turborepo-lib/test/scripts/sleep_5_ignore.js rename to crates/turborepo-lib/test-data/scripts/sleep_5_ignore.js diff --git a/crates/turborepo-lib/test/scripts/sleep_5_interruptable.js b/crates/turborepo-lib/test-data/scripts/sleep_5_interruptable.js similarity index 100% rename from crates/turborepo-lib/test/scripts/sleep_5_interruptable.js rename to crates/turborepo-lib/test-data/scripts/sleep_5_interruptable.js diff --git a/crates/turborepo-lib/test/scripts/stdin_stdout.js b/crates/turborepo-lib/test-data/scripts/stdin_stdout.js similarity index 100% rename from crates/turborepo-lib/test/scripts/stdin_stdout.js rename to crates/turborepo-lib/test-data/scripts/stdin_stdout.js diff --git a/crates/turborepo/Cargo.toml b/crates/turborepo/Cargo.toml index f1331b13fa0ea..3e993d58acbc9 100644 --- a/crates/turborepo/Cargo.toml +++ b/crates/turborepo/Cargo.toml @@ -20,8 +20,13 @@ build-target = "0.4.0" [dev-dependencies] assert_cmd = { workspace = true } +camino = { workspace = true } +insta = { version = "1.40.0", features = ["json"] } itertools = { workspace = true } pretty_assertions = { workspace = true } +serde_json = { workspace = true } +tempfile = { workspace = true } + [lints] workspace = true diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs new file mode 100644 index 0000000000000..99bea9d9573e0 --- /dev/null +++ b/crates/turborepo/tests/query.rs @@ -0,0 +1,60 @@ +use std::{path::Path, process::Command}; + +use camino::Utf8Path; + +fn setup_fixture( + fixture: &str, + package_manager: Option<&str>, + test_dir: &Path, +) -> Result<(), anyhow::Error> { + let script_path = Utf8Path::new(env!("CARGO_MANIFEST_DIR")) + .join("../../turborepo-tests/helpers/setup_integration_test.sh"); + + Command::new("bash") + .arg("-c") + .arg(format!( + "{} {} {}", + script_path, + fixture, + package_manager.unwrap_or("npm@10.5.0") + )) + .current_dir(test_dir) + .spawn()? + .wait()?; + + Ok(()) +} + +fn check_query(fixture: &str, query: &str) -> Result<(), anyhow::Error> { + let tempdir = tempfile::tempdir()?; + setup_fixture(fixture, None, tempdir.path())?; + let output = assert_cmd::Command::cargo_bin("turbo")? + .arg("query") + .arg(query) + .current_dir(tempdir.path()) + .output()?; + + let stdout = String::from_utf8(output.stdout)?; + let query_output: serde_json::Value = serde_json::from_str(&stdout)?; + insta::assert_json_snapshot!(query_output); + + Ok(()) +} + +#[cfg(not(windows))] +#[test] +fn test_double_symlink() -> Result<(), anyhow::Error> { + check_query( + "oxc_repro", + "query { + file(path: \"./index.js\") { + path + dependencies { + files { items { path } } + errors { items { message import } } + } + } + }", + )?; + Ok(()) +} diff --git a/crates/turborepo/tests/snapshots/query__check_query.snap b/crates/turborepo/tests/snapshots/query__check_query.snap new file mode 100644 index 0000000000000..4fbff3206ef3c --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__check_query.snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo-lib/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "index.js", + "dependencies": { + "files": { + "items": [ + { + "path": "nm/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/turborepo-tests/helpers/install_deps.sh b/turborepo-tests/helpers/install_deps.sh index 9b2db4939183b..d35841020633c 100755 --- a/turborepo-tests/helpers/install_deps.sh +++ b/turborepo-tests/helpers/install_deps.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash set -eo pipefail - # TODO: Should we default to pnpm here? PACKAGE_MANAGER="npm" # Check if "@" is present in the argument and remove it if so @@ -11,7 +10,6 @@ elif [[ $1 != "" ]]; then PACKAGE_MANAGER=$1 fi - if [ "$PACKAGE_MANAGER" == "npm" ]; then npm install > /dev/null 2>&1 if [[ "$OSTYPE" == "msys" ]]; then diff --git a/turborepo-tests/helpers/setup_package_manager.sh b/turborepo-tests/helpers/setup_package_manager.sh index 829e67478dc4b..fd0836045476a 100755 --- a/turborepo-tests/helpers/setup_package_manager.sh +++ b/turborepo-tests/helpers/setup_package_manager.sh @@ -22,21 +22,25 @@ if [ "$pkgManager" != "" ]; then fi fi -# If we're in a prysk test, set the corepack install directory to the prysk temp directory. +# get just the packageManager name, without the version +# We pass the name to corepack enable so that it will work for npm also. +# `corepack enable` with no specified packageManager does not work for npm. +pkgManagerName="${pkgManager%%@*}" + +# Set the corepack install directory to a temp directory (either prysk temp or provided dir). # This will help isolate from the rest of the system, especially when running tests on a dev machine. if [ "$PRYSK_TEMP" == "" ]; then - COREPACK_INSTALL_DIR_CMD= + COREPACK_INSTALL_DIR="$dir/corepack" + mkdir -p "${COREPACK_INSTALL_DIR}" + export PATH=${COREPACK_INSTALL_DIR}:$PATH else COREPACK_INSTALL_DIR="${PRYSK_TEMP}/corepack" mkdir -p "${COREPACK_INSTALL_DIR}" export PATH=${COREPACK_INSTALL_DIR}:$PATH - COREPACK_INSTALL_DIR_CMD="--install-directory=${COREPACK_INSTALL_DIR}" fi -# get just the packageManager name, without the version -# We pass the name to corepack enable so that it will work for npm also. -# `corepack enable` with no specified packageManager does not work for npm. -pkgManagerName="${pkgManager%%@*}" - # Enable corepack so that the packageManager setting in package.json is respected. -corepack enable $pkgManagerName "${COREPACK_INSTALL_DIR_CMD}" +corepack enable $pkgManagerName "--install-directory=${COREPACK_INSTALL_DIR}" + + + diff --git a/turborepo-tests/integration/fixtures/oxc_repro/.gitignore b/turborepo-tests/integration/fixtures/oxc_repro/.gitignore new file mode 100644 index 0000000000000..d18ba2ea50998 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/.gitignore @@ -0,0 +1,3 @@ +.idea +/node_modules +.turbo diff --git a/turborepo-tests/integration/fixtures/oxc_repro/README.md b/turborepo-tests/integration/fixtures/oxc_repro/README.md new file mode 100644 index 0000000000000..936acd27084d9 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/README.md @@ -0,0 +1,30 @@ +# oxc symlink bug reproduction + +The bug occurs when a symlink is nested inside a directory that is also symlinked. +This occurs with pnpm since it recreates a conventional node_modules structure using +a content addressed store and symlinks. + +Here's the setup: + +- `apps/web/nm/@repo/typescript-config` is a symlink pointing to `tooling/typescript-config` (imagine `typescript-config` is a workspace package and symlinked into `apps/web`'s node modules) +- `tooling/typescript-config/index.js` is a _relative_ symlink pointing to `../../nm/index.js` +- Therefore, `apps/web/nm/@repo/typescript-config/index.js` is resolved as: + +``` +apps/web/nm/@repo/typescript-config/index.js +-> tooling/typescript-config/index.js +-> tooling/typescript-config/../../nm/index.js +-> nm/index.js +``` + +However, when oxc resolves this, it does not do the first resolution, so we get: + +``` +apps/web/nm/@repo/typescript-config/index.js +-> apps/web/nm/@repo/typescript-config/../../nm/index.js +-> apps/web/nm/nm/index.js +``` + +You can validate this by running `node main.mjs`, which attempts to resolve +both `apps/web/nm/@repo/typescript-config/index.js` and `apps/web/nm/@repo/index.js`. +The first fails while the second succeeds. diff --git a/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/index.js b/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/index.js new file mode 100644 index 0000000000000..7d3ced0fbf6d8 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/index.js @@ -0,0 +1 @@ +export const foo = "10"; diff --git a/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/typescript-config b/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/typescript-config new file mode 120000 index 0000000000000..db36eabbc51ca --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/apps/web/nm/@repo/typescript-config @@ -0,0 +1 @@ +../../../../tooling/typescript-config \ No newline at end of file diff --git a/turborepo-tests/integration/fixtures/oxc_repro/index.js b/turborepo-tests/integration/fixtures/oxc_repro/index.js new file mode 100644 index 0000000000000..21ce0d9effd01 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/index.js @@ -0,0 +1 @@ +import foo from "./apps/web/nm/@repo/typescript-config/index.js"; diff --git a/turborepo-tests/integration/fixtures/oxc_repro/nm/index.js b/turborepo-tests/integration/fixtures/oxc_repro/nm/index.js new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/turborepo-tests/integration/fixtures/oxc_repro/package.json b/turborepo-tests/integration/fixtures/oxc_repro/package.json new file mode 100644 index 0000000000000..92813c28f5196 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/package.json @@ -0,0 +1,14 @@ +{ + "name": "oxc-repro", + "version": "1.0.0", + "description": "", + "workspaces": ["c"], + "packageManager": "npm@10.5.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": {} +} diff --git a/turborepo-tests/integration/fixtures/oxc_repro/tooling/typescript-config/index.js b/turborepo-tests/integration/fixtures/oxc_repro/tooling/typescript-config/index.js new file mode 120000 index 0000000000000..5f339dec36552 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/tooling/typescript-config/index.js @@ -0,0 +1 @@ +../../nm/index.js \ No newline at end of file diff --git a/turborepo-tests/integration/fixtures/oxc_repro/turbo.json b/turborepo-tests/integration/fixtures/oxc_repro/turbo.json new file mode 100644 index 0000000000000..9e26dfeeb6e64 --- /dev/null +++ b/turborepo-tests/integration/fixtures/oxc_repro/turbo.json @@ -0,0 +1 @@ +{} \ No newline at end of file From 54357a9755dc7f1d3307e1560f0d31573ca1f781 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 22 Oct 2024 15:49:50 -0400 Subject: [PATCH 103/218] fix: revert some changes to tests (#9310) ### Description #9302 merged a little too early, so reverting some of the changes. Namely, we don't need the `test` -> `test-data` renaming anymore ### Testing Instructions --- crates/turborepo-lib/src/process/child.rs | 3 +-- crates/turborepo-lib/src/process/mod.rs | 2 +- .../turborepo-lib/{test-data => test}/scripts/hello_no_line.js | 0 .../{test-data => test}/scripts/hello_non_utf8.js | 0 .../turborepo-lib/{test-data => test}/scripts/hello_world.js | 0 .../{test-data => test}/scripts/hello_world_hello_moon.js | 0 .../{test-data => test}/scripts/sleep_5_ignore.js | 0 .../{test-data => test}/scripts/sleep_5_interruptable.js | 0 .../turborepo-lib/{test-data => test}/scripts/stdin_stdout.js | 0 9 files changed, 2 insertions(+), 3 deletions(-) rename crates/turborepo-lib/{test-data => test}/scripts/hello_no_line.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/hello_non_utf8.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/hello_world.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/hello_world_hello_moon.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/sleep_5_ignore.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/sleep_5_interruptable.js (100%) rename crates/turborepo-lib/{test-data => test}/scripts/stdin_stdout.js (100%) diff --git a/crates/turborepo-lib/src/process/child.rs b/crates/turborepo-lib/src/process/child.rs index 59198adc7109e..a5a4d3c6281e3 100644 --- a/crates/turborepo-lib/src/process/child.rs +++ b/crates/turborepo-lib/src/process/child.rs @@ -843,8 +843,7 @@ mod test { while !root.join_component(".git").exists() { root = root.parent().unwrap().to_owned(); } - println!("root: {root:?}"); - root.join_components(&["crates", "turborepo-lib", "test-data", "scripts"]) + root.join_components(&["crates", "turborepo-lib", "test", "scripts"]) } #[test_case(false)] diff --git a/crates/turborepo-lib/src/process/mod.rs b/crates/turborepo-lib/src/process/mod.rs index c3c6edd4e11e7..5e1751a2be007 100644 --- a/crates/turborepo-lib/src/process/mod.rs +++ b/crates/turborepo-lib/src/process/mod.rs @@ -216,7 +216,7 @@ mod test { fn get_script_command(script_name: &str) -> Command { let mut cmd = Command::new("node"); - cmd.args([format!("./test-data/scripts/{script_name}")]); + cmd.args([format!("./test/scripts/{script_name}")]); cmd } diff --git a/crates/turborepo-lib/test-data/scripts/hello_no_line.js b/crates/turborepo-lib/test/scripts/hello_no_line.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/hello_no_line.js rename to crates/turborepo-lib/test/scripts/hello_no_line.js diff --git a/crates/turborepo-lib/test-data/scripts/hello_non_utf8.js b/crates/turborepo-lib/test/scripts/hello_non_utf8.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/hello_non_utf8.js rename to crates/turborepo-lib/test/scripts/hello_non_utf8.js diff --git a/crates/turborepo-lib/test-data/scripts/hello_world.js b/crates/turborepo-lib/test/scripts/hello_world.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/hello_world.js rename to crates/turborepo-lib/test/scripts/hello_world.js diff --git a/crates/turborepo-lib/test-data/scripts/hello_world_hello_moon.js b/crates/turborepo-lib/test/scripts/hello_world_hello_moon.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/hello_world_hello_moon.js rename to crates/turborepo-lib/test/scripts/hello_world_hello_moon.js diff --git a/crates/turborepo-lib/test-data/scripts/sleep_5_ignore.js b/crates/turborepo-lib/test/scripts/sleep_5_ignore.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/sleep_5_ignore.js rename to crates/turborepo-lib/test/scripts/sleep_5_ignore.js diff --git a/crates/turborepo-lib/test-data/scripts/sleep_5_interruptable.js b/crates/turborepo-lib/test/scripts/sleep_5_interruptable.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/sleep_5_interruptable.js rename to crates/turborepo-lib/test/scripts/sleep_5_interruptable.js diff --git a/crates/turborepo-lib/test-data/scripts/stdin_stdout.js b/crates/turborepo-lib/test/scripts/stdin_stdout.js similarity index 100% rename from crates/turborepo-lib/test-data/scripts/stdin_stdout.js rename to crates/turborepo-lib/test/scripts/stdin_stdout.js From 5c4512663852f07657dbbb10fe4eba73fb566226 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 22 Oct 2024 17:46:20 -0400 Subject: [PATCH 104/218] chore(cache): better forbidden error message (#9313) ### Description This PR makes the error message for the case that the provided token does not have [permission to upload an artifact](https://vercel.com/docs/rest-api/endpoints/artifacts#upload-a-cache-artifact-response-codes). Currently this case leads to us printing `WARNING failed to contact remote cache: unknown status forbidden: Not authorized` the PR will change this to `WARNING Insufficient permissions to write to remote cache. Please verify that your role has write access for Remote Cache Artifact at https://vercel.com/docs/accounts/team-members-and-roles/access-roles/team-level-roles` This does not replace the more detailed warnings when we [get a cache status](https://github.com/vercel/turborepo/blob/main/crates/turborepo-api-client/src/lib.rs#L266). These errors get printed as warnings via the [async cache](https://github.com/vercel/turborepo/blob/main/crates/turborepo-cache/src/async_cache.rs#L87) ### Testing Instructions Added unit tests for error messages in this case. --------- Co-authored-by: Thomas Knickman --- Cargo.lock | 3 ++ crates/turborepo-api-client/Cargo.toml | 1 + crates/turborepo-api-client/src/lib.rs | 7 +-- crates/turborepo-cache/Cargo.toml | 2 + crates/turborepo-cache/src/http.rs | 75 ++++++++++++++++++++------ crates/turborepo-cache/src/lib.rs | 2 + 6 files changed, 71 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 45424d4e23596..64c5cacc0eaff 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6131,6 +6131,7 @@ dependencies = [ "chrono", "http 0.2.11", "httpmock", + "insta", "lazy_static", "port_scanner", "regex", @@ -6190,6 +6191,7 @@ dependencies = [ "camino", "futures", "hmac", + "insta", "libc", "os_str_bytes", "path-clean", @@ -6211,6 +6213,7 @@ dependencies = [ "turbopath", "turborepo-analytics", "turborepo-api-client", + "turborepo-vercel-api", "turborepo-vercel-api-mock", "zstd", ] diff --git a/crates/turborepo-api-client/Cargo.toml b/crates/turborepo-api-client/Cargo.toml index c0fff6459900b..2022a5bacc920 100644 --- a/crates/turborepo-api-client/Cargo.toml +++ b/crates/turborepo-api-client/Cargo.toml @@ -13,6 +13,7 @@ rustls-tls = ["reqwest/rustls-tls-native-roots"] anyhow = { workspace = true } http = "0.2.9" httpmock = { workspace = true } +insta = { workspace = true } port_scanner = { workspace = true } test-case = { workspace = true } turborepo-vercel-api-mock = { workspace = true } diff --git a/crates/turborepo-api-client/src/lib.rs b/crates/turborepo-api-client/src/lib.rs index f81e95c820a47..67b3d284e65c2 100644 --- a/crates/turborepo-api-client/src/lib.rs +++ b/crates/turborepo-api-client/src/lib.rs @@ -809,6 +809,7 @@ mod test { use anyhow::Result; use bytes::Bytes; + use insta::assert_snapshot; use turborepo_vercel_api_mock::start_test_server; use url::Url; @@ -886,9 +887,9 @@ mod test { .unwrap(), ); let err = APIClient::handle_403(response).await; - assert_eq!( + assert_snapshot!( err.to_string(), - "unable to parse 'this isn't valid JSON' as JSON: expected ident at line 1 column 2" + @"unable to parse 'this isn't valid JSON' as JSON: expected ident at line 1 column 2" ); } @@ -900,7 +901,7 @@ mod test { .unwrap(), ); let err = APIClient::handle_403(response).await; - assert_eq!(err.to_string(), "unknown status forbidden: Not authorized"); + assert_snapshot!(err.to_string(), @"unknown status forbidden: Not authorized"); } #[tokio::test] diff --git a/crates/turborepo-cache/Cargo.toml b/crates/turborepo-cache/Cargo.toml index 08ea0eed08933..5407fb706a531 100644 --- a/crates/turborepo-cache/Cargo.toml +++ b/crates/turborepo-cache/Cargo.toml @@ -13,10 +13,12 @@ rustls-tls = ["turborepo-api-client/rustls-tls"] [dev-dependencies] anyhow = { workspace = true, features = ["backtrace"] } futures = { workspace = true } +insta = { workspace = true } libc = "0.2.146" port_scanner = { workspace = true } tempfile = { workspace = true } test-case = { workspace = true } +turborepo-vercel-api = { workspace = true } turborepo-vercel-api-mock = { workspace = true } [lints] diff --git a/crates/turborepo-cache/src/http.rs b/crates/turborepo-cache/src/http.rs index c4936526241a9..d8f89973bf568 100644 --- a/crates/turborepo-cache/src/http.rs +++ b/crates/turborepo-cache/src/http.rs @@ -105,8 +105,7 @@ impl HTTPCache { tracing::debug!("uploading {}", hash); - match self - .client + self.client .put_artifact( hash, progress, @@ -118,19 +117,9 @@ impl HTTPCache { self.api_auth.team_slug.as_deref(), ) .await - { - Ok(_) => { - tracing::debug!("uploaded {}", hash); - Ok(()) - } - Err(turborepo_api_client::Error::ReqwestError(e)) if e.is_timeout() => { - Err(CacheError::TimeoutError(hash.to_string())) - } - Err(turborepo_api_client::Error::ReqwestError(e)) if e.is_connect() => { - Err(CacheError::ConnectError) - } - Err(e) => Err(e.into()), - } + .map_err(|err| Self::convert_api_error(hash, err))?; + tracing::debug!("uploaded {}", hash); + Ok(()) } #[tracing::instrument(skip_all)] @@ -278,14 +267,30 @@ impl HTTPCache { let mut cache_reader = CacheReader::from_reader(body, true)?; cache_reader.restore(root) } + + fn convert_api_error(hash: &str, err: turborepo_api_client::Error) -> CacheError { + match err { + turborepo_api_client::Error::ReqwestError(e) if e.is_timeout() => { + CacheError::TimeoutError(hash.to_string()) + } + turborepo_api_client::Error::ReqwestError(e) if e.is_connect() => { + CacheError::ConnectError + } + turborepo_api_client::Error::UnknownStatus { code, .. } if code == "forbidden" => { + CacheError::ForbiddenRemoteCacheWrite + } + e => e.into(), + } + } } #[cfg(test)] mod test { - use std::time::Duration; + use std::{backtrace::Backtrace, time::Duration}; use anyhow::Result; use futures::future::try_join_all; + use insta::assert_snapshot; use tempfile::tempdir; use turbopath::AbsoluteSystemPathBuf; use turborepo_analytics::start_analytics; @@ -381,4 +386,42 @@ mod test { Ok(()) } + + #[test] + fn test_forbidden_error() { + let err = HTTPCache::convert_api_error( + "hash", + turborepo_api_client::Error::UnknownStatus { + code: "forbidden".into(), + message: "Not authorized".into(), + backtrace: Backtrace::capture(), + }, + ); + assert_snapshot!(err.to_string(), @"Insufficient permissions to write to remote cache. Please verify that your role has write access for Remote Cache Artifact at https://vercel.com/docs/accounts/team-members-and-roles/access-roles/team-level-roles?resource=Remote+Cache+Artifact"); + } + + #[test] + fn test_unknown_status() { + let err = HTTPCache::convert_api_error( + "hash", + turborepo_api_client::Error::UnknownStatus { + code: "unknown".into(), + message: "Special message".into(), + backtrace: Backtrace::capture(), + }, + ); + assert_snapshot!(err.to_string(), @"failed to contact remote cache: unknown status unknown: Special message"); + } + + #[test] + fn test_cache_disabled() { + let err = HTTPCache::convert_api_error( + "hash", + turborepo_api_client::Error::CacheDisabled { + status: turborepo_vercel_api::CachingStatus::Disabled, + message: "Cache disabled".into(), + }, + ); + assert_snapshot!(err.to_string(), @"failed to contact remote cache: Cache disabled"); + } } diff --git a/crates/turborepo-cache/src/lib.rs b/crates/turborepo-cache/src/lib.rs index e839ff2608d32..c05f4dcce5edd 100644 --- a/crates/turborepo-cache/src/lib.rs +++ b/crates/turborepo-cache/src/lib.rs @@ -83,6 +83,8 @@ pub enum CacheError { ConfigCacheInvalidBase, #[error("Unable to hash config cache inputs")] ConfigCacheError, + #[error("Insufficient permissions to write to remote cache. Please verify that your role has write access for Remote Cache Artifact at https://vercel.com/docs/accounts/team-members-and-roles/access-roles/team-level-roles?resource=Remote+Cache+Artifact")] + ForbiddenRemoteCacheWrite, } impl From for CacheError { From e54d017e3b6a100b7bcc4810d53ab90061b8695e Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 22 Oct 2024 16:13:43 -0600 Subject: [PATCH 105/218] Add list item in docs about errors in internal TypeScript dependencies. (#9315) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description A few folks have asked about this. Good to add to our tradeoffs notes! ### Testing Instructions 👀 --- docs/repo-docs/core-concepts/internal-packages.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/repo-docs/core-concepts/internal-packages.mdx b/docs/repo-docs/core-concepts/internal-packages.mdx index 95835e6a2edbd..15935784c2bb6 100644 --- a/docs/repo-docs/core-concepts/internal-packages.mdx +++ b/docs/repo-docs/core-concepts/internal-packages.mdx @@ -97,6 +97,7 @@ There are a few important things to notice in this `package.json`: - **Only applicable when consumers do transpiling**: This strategy can only be used when the package is going to be used in tooling that uses a bundler or natively understands TypeScript. The consumer's bundler is responsible for transpiling the TypeScript packages to JavaScript. If your builds or other usages of the package are not able to consume TypeScript, you will need to move to the [Compiled Packages](#compiled-packages) strategy. - **No TypeScript `paths`**: A library that is being transpiled by its consumer cannot use the `compilerOptions.paths` configuration because TypeScript assumes that source code is being transpiled in the package where it is written. If you're using TypeScript 5.4 or later, we recommend [using Node.js subpath imports](https://devblogs.microsoft.com/typescript/announcing-typescript-5-4/#auto-import-support-for-subpath-imports). To learn how, visit [our TypeScript page](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths). - **Turborepo cannot cache a build for a Just-in-Time Package**: Because the package doesn't have its own `build` step, it can't be cached by Turborepo. This tradeoff may make sense for you if you want to keep configuration to a minimum and are okay with the build times for your applications. +- **Errors in internal dependencies will be reported**: When directly exporting TypeScript, type-checking in a dependent package will fail if code in an internal dependency has TypeScript errors. You may find this confusing or problematic in some situations. ### Compiled Packages From 85a1d7de1879a02ac57f9e073a9c83a18792e049 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 22 Oct 2024 18:36:35 -0400 Subject: [PATCH 106/218] docs: document MSVC requirement (#9308) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Closes https://github.com/vercel/turborepo/issues/8878 by documenting that `turbo` requires the Microsoft C Runtime Libraries. ### Testing Instructions Tested out docs site and made sure the footnote links and back reference links worked. ![Screenshot 2024-10-22 at 10 49 23 AM](https://github.com/user-attachments/assets/ea6cb6a9-d2bd-48ba-9c37-c9e3caed0e28) ![Screenshot 2024-10-22 at 10 50 50 AM](https://github.com/user-attachments/assets/7cb9aa5c-3405-4205-9fb5-dd37924782b5) --- docs/repo-docs/getting-started/support-policy.mdx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/getting-started/support-policy.mdx b/docs/repo-docs/getting-started/support-policy.mdx index 761679027fb4b..b22df415586c7 100644 --- a/docs/repo-docs/getting-started/support-policy.mdx +++ b/docs/repo-docs/getting-started/support-policy.mdx @@ -33,8 +33,10 @@ the following binaries via npm: - `turbo-darwin-arm64` (macOS with Apple Silicon) - `turbo-linux-64` - `turbo-linux-arm64` -- `turbo-windows-64` -- `turbo-windows-arm64` +- `turbo-windows-64` [^1] +- `turbo-windows-arm64` [^1] + +[^1]: Requires [Windows C Runtime Libraries](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) ## Node.js From 08d1493acf5b619b1ed43f2335a6dcd13fda712d Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 23 Oct 2024 09:18:06 -0400 Subject: [PATCH 107/218] chore(ci): fix remote caching for js lint (#9316) ### Description Hetzner for some reason sets `TURBO_API` to a different server. This causes [remote cache failures](https://github.com/vercel/turborepo/actions/runs/11468352625/job/31913289850?pr=9311#step:6:31). In [other places](https://github.com/vercel/turborepo/blob/main/.github/workflows/test-js-packages.yml#L111) we use remote caching we unset `TURBO_API` we just weren't doing it here. ### Testing Instructions JS Lint should no longer include `WARNING failed to contact remote cache: unable to parse 'Forbidden' as JSON: expected value at line 1 column 1` --- .github/workflows/lint.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 8d0362b3cbeda..82613b78c2469 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -116,8 +116,9 @@ jobs: uses: ./.github/actions/install-global-turbo - name: Lint + # Manually set TURBO_API to an empty string to override Hetzner env run: | - turbo run lint --env-mode=strict + TURBO_API= turbo run lint --env-mode=strict cleanup: name: Cleanup From 7d9ccae2e8e8ff72e39d84e527a8acb3a2f58655 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 23 Oct 2024 10:10:40 -0400 Subject: [PATCH 108/218] release(turborepo): 2.2.4-canary.1 (#9318) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 8a8be7e5be45b..9f6bcb8ac5d30 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 730c7fcdbcf59..bae3c0630771f 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index f1ba4812e9d1b..fd7d69b141d2b 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index fa41bb90ce94c..73285f3fdbec9 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index e80ea616395db..c61e3ed4e6746 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 1666d690a366c..8979cfec48dae 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 2bb8de0360f4a..9edc6ce3b92c6 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index ccf5cd0abc143..066f5fc83e4fd 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index a53797eedf251..9207574e216c4 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.0", + "version": "2.2.4-canary.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.0", - "turbo-darwin-arm64": "2.2.4-canary.0", - "turbo-linux-64": "2.2.4-canary.0", - "turbo-linux-arm64": "2.2.4-canary.0", - "turbo-windows-64": "2.2.4-canary.0", - "turbo-windows-arm64": "2.2.4-canary.0" + "turbo-darwin-64": "2.2.4-canary.1", + "turbo-darwin-arm64": "2.2.4-canary.1", + "turbo-linux-64": "2.2.4-canary.1", + "turbo-linux-arm64": "2.2.4-canary.1", + "turbo-windows-64": "2.2.4-canary.1", + "turbo-windows-arm64": "2.2.4-canary.1" } } diff --git a/version.txt b/version.txt index bec69e2cbbfaa..accec923c9a8f 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.0 +2.2.4-canary.1 canary From cff75296891226cb13d93567622f6bb866b17fd2 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 23 Oct 2024 10:14:30 -0400 Subject: [PATCH 109/218] chore(visitor): break up visitor to multiple modules (#9306) ### Description This is a prefactor to break up `visitor.rs` into multiple files. This is primarily just moving code around, but there are a few more in depth changes: - https://github.com/vercel/turborepo/commit/2873556750540878056509a019fd2f601cac9f64 changes `TaskWarning` to only be constructed if there are missing envs, removing the need to check later on - https://github.com/vercel/turborepo/commit/88e98c5422a869768e9a860031b828c95aa5fd4a changes so we no longer call `which` for every task to find the package manager binary. We instead call this on construction, but will only handle the error case on actual command creation. I highly recommend reviewing each commit on it's own. All commits that move code do only that so hopefully that makes it easier to review. ### Testing Instructions Integration tests and some basic manual testing. --- crates/turborepo-lib/src/opts.rs | 21 +- crates/turborepo-lib/src/process/command.rs | 1 + crates/turborepo-lib/src/run/mod.rs | 1 - .../turborepo-lib/src/task_graph/visitor.rs | 1243 ----------------- .../src/task_graph/visitor/command.rs | 78 ++ .../src/task_graph/visitor/error.rs | 110 ++ .../src/task_graph/visitor/exec.rs | 524 +++++++ .../src/task_graph/visitor/mod.rs | 526 +++++++ .../src/task_graph/visitor/output.rs | 146 ++ 9 files changed, 1404 insertions(+), 1246 deletions(-) delete mode 100644 crates/turborepo-lib/src/task_graph/visitor.rs create mode 100644 crates/turborepo-lib/src/task_graph/visitor/command.rs create mode 100644 crates/turborepo-lib/src/task_graph/visitor/error.rs create mode 100644 crates/turborepo-lib/src/task_graph/visitor/exec.rs create mode 100644 crates/turborepo-lib/src/task_graph/visitor/mod.rs create mode 100644 crates/turborepo-lib/src/task_graph/visitor/output.rs diff --git a/crates/turborepo-lib/src/opts.rs b/crates/turborepo-lib/src/opts.rs index 2442ba3c78326..9b58a2996cd29 100644 --- a/crates/turborepo-lib/src/opts.rs +++ b/crates/turborepo-lib/src/opts.rs @@ -170,15 +170,32 @@ pub struct RunOpts { pub ui_mode: UIMode, } +/// Projection of `RunOpts` that only includes information necessary to compute +/// pass through args. +#[derive(Debug)] +pub struct TaskArgs<'a> { + pass_through_args: &'a [String], + tasks: &'a [String], +} + impl RunOpts { - pub fn args_for_task(&self, task_id: &TaskId) -> Option> { + pub fn task_args(&self) -> TaskArgs { + TaskArgs { + pass_through_args: &self.pass_through_args, + tasks: &self.tasks, + } + } +} + +impl<'a> TaskArgs<'a> { + pub fn args_for_task(&self, task_id: &TaskId) -> Option<&'a [String]> { if !self.pass_through_args.is_empty() && self .tasks .iter() .any(|task| task.as_str() == task_id.task()) { - Some(self.pass_through_args.clone()) + Some(self.pass_through_args) } else { None } diff --git a/crates/turborepo-lib/src/process/command.rs b/crates/turborepo-lib/src/process/command.rs index 55be566c63183..1bf0a8f1b92b2 100644 --- a/crates/turborepo-lib/src/process/command.rs +++ b/crates/turborepo-lib/src/process/command.rs @@ -9,6 +9,7 @@ use turbopath::AbsoluteSystemPathBuf; /// A command builder that can be used to build both regular /// child processes and ones spawned hooked up to a PTY +#[derive(Debug, Clone)] pub struct Command { program: OsString, args: Vec, diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index a3c520877d4d6..4ae3d2c85e085 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -448,7 +448,6 @@ impl Run { package_inputs_hashes, &self.env_at_execution_start, &global_hash, - self.opts.run_opts.env_mode, self.color_config, self.processes.clone(), &self.repo_root, diff --git a/crates/turborepo-lib/src/task_graph/visitor.rs b/crates/turborepo-lib/src/task_graph/visitor.rs deleted file mode 100644 index 4c58e8fdc71e9..0000000000000 --- a/crates/turborepo-lib/src/task_graph/visitor.rs +++ /dev/null @@ -1,1243 +0,0 @@ -use std::{ - borrow::Cow, - collections::HashSet, - io::Write, - sync::{Arc, Mutex, OnceLock}, - time::{Duration, Instant}, -}; - -use console::{Style, StyledObject}; -use either::Either; -use futures::{stream::FuturesUnordered, StreamExt}; -use itertools::Itertools; -use miette::{Diagnostic, NamedSource, SourceSpan}; -use regex::Regex; -use tokio::sync::{mpsc, oneshot}; -use tracing::{debug, error, warn, Instrument, Span}; -use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPath}; -use turborepo_ci::{Vendor, VendorBehavior}; -use turborepo_env::{platform::PlatformEnv, EnvironmentVariableMap}; -use turborepo_repository::{ - package_graph::{PackageGraph, PackageName, ROOT_PKG_NAME}, - package_manager::PackageManager, -}; -use turborepo_telemetry::events::{ - generic::GenericEventBuilder, task::PackageTaskEventBuilder, EventBuilder, TrackedErrors, -}; -use turborepo_ui::{ - sender::{TaskSender, UISender}, - tui::event::CacheResult, - ColorConfig, ColorSelector, OutputClient, OutputSink, OutputWriter, PrefixedUI, -}; -use which::which; - -use crate::{ - cli::EnvMode, - config::UIMode, - engine::{Engine, ExecutionOptions, StopExecution}, - opts::RunOpts, - process::{ChildExit, Command, ProcessManager}, - run::{ - global_hash::GlobalHashableInputs, - summary::{ - self, GlobalHashSummary, RunTracker, SpacesTaskClient, SpacesTaskInformation, - TaskExecutionSummary, TaskTracker, - }, - task_access::TaskAccess, - task_id::TaskId, - CacheOutput, RunCache, TaskCache, - }, - task_hash::{self, PackageInputsHashes, TaskHashTracker, TaskHashTrackerState, TaskHasher}, -}; - -// This holds the whole world -pub struct Visitor<'a> { - color_cache: ColorSelector, - dry: bool, - global_env: EnvironmentVariableMap, - global_env_mode: EnvMode, - manager: ProcessManager, - run_opts: &'a RunOpts, - package_graph: Arc, - repo_root: &'a AbsoluteSystemPath, - run_cache: Arc, - run_tracker: RunTracker, - task_access: &'a TaskAccess, - sink: OutputSink, - task_hasher: TaskHasher<'a>, - color_config: ColorConfig, - is_watch: bool, - ui_sender: Option, - warnings: Arc>>, -} - -#[derive(Debug, thiserror::Error, Diagnostic)] -pub enum Error { - #[error("cannot find package {package_name} for task {task_id}")] - MissingPackage { - package_name: PackageName, - task_id: TaskId<'static>, - }, - #[error( - "root task {task_name} ({command}) looks like it invokes turbo and might cause a loop" - )] - RecursiveTurbo { - task_name: String, - command: String, - #[label("task found here")] - span: Option, - #[source_code] - text: NamedSource, - }, - #[error("Could not find definition for task")] - MissingDefinition, - #[error("error while executing engine: {0}")] - Engine(#[from] crate::engine::ExecuteError), - #[error(transparent)] - TaskHash(#[from] task_hash::Error), - #[error(transparent)] - RunSummary(#[from] summary::Error), - #[error("internal errors encountered: {0}")] - InternalErrors(String), -} - -impl<'a> Visitor<'a> { - // Disabling this lint until we stop adding state to the visitor. - // Once we have the full picture we will go about grouping these pieces of data - // together - #[allow(clippy::too_many_arguments)] - pub async fn new( - package_graph: Arc, - run_cache: Arc, - run_tracker: RunTracker, - task_access: &'a TaskAccess, - run_opts: &'a RunOpts, - package_inputs_hashes: PackageInputsHashes, - env_at_execution_start: &'a EnvironmentVariableMap, - global_hash: &'a str, - global_env_mode: EnvMode, - color_config: ColorConfig, - manager: ProcessManager, - repo_root: &'a AbsoluteSystemPath, - global_env: EnvironmentVariableMap, - ui_sender: Option, - is_watch: bool, - ) -> Self { - let task_hasher = TaskHasher::new( - package_inputs_hashes, - run_opts, - env_at_execution_start, - global_hash, - ); - - let sink = Self::sink(run_opts); - let color_cache = ColorSelector::default(); - // Set up correct size for underlying pty - - if let Some(app) = ui_sender.as_ref() { - if let Some(pane_size) = app.pane_size().await { - manager.set_pty_size(pane_size.rows, pane_size.cols); - } - } - - Self { - color_cache, - dry: false, - global_env_mode, - manager, - run_opts, - package_graph, - repo_root, - run_cache, - run_tracker, - task_access, - sink, - task_hasher, - color_config, - global_env, - ui_sender, - is_watch, - warnings: Default::default(), - } - } - - #[tracing::instrument(skip_all)] - pub async fn visit( - &self, - engine: Arc, - telemetry: &GenericEventBuilder, - ) -> Result, Error> { - for task in engine.tasks().sorted() { - self.color_cache.color_for_key(&task.to_string()); - } - - let concurrency = self.run_opts.concurrency as usize; - let (node_sender, mut node_stream) = mpsc::channel(concurrency); - - let engine_handle = { - let engine = engine.clone(); - tokio::spawn(engine.execute(ExecutionOptions::new(false, concurrency), node_sender)) - }; - let mut tasks = FuturesUnordered::new(); - let errors = Arc::new(Mutex::new(Vec::new())); - let span = Span::current(); - - let factory = ExecContextFactory::new(self, errors.clone(), self.manager.clone(), &engine); - - while let Some(message) = node_stream.recv().await { - let span = tracing::debug_span!(parent: &span, "queue_task", task = %message.info); - let _enter = span.enter(); - let crate::engine::Message { info, callback } = message; - let package_name = PackageName::from(info.package()); - - let workspace_info = - self.package_graph - .package_info(&package_name) - .ok_or_else(|| Error::MissingPackage { - package_name: package_name.clone(), - task_id: info.clone(), - })?; - - let package_task_event = - PackageTaskEventBuilder::new(info.package(), info.task()).with_parent(telemetry); - let command = workspace_info - .package_json - .scripts - .get(info.task()) - .cloned(); - - match command { - Some(cmd) if info.package() == ROOT_PKG_NAME && turbo_regex().is_match(&cmd) => { - package_task_event.track_error(TrackedErrors::RecursiveError); - let (span, text) = cmd.span_and_text("package.json"); - return Err(Error::RecursiveTurbo { - task_name: info.to_string(), - command: cmd.to_string(), - span, - text, - }); - } - _ => (), - } - - let task_definition = engine - .task_definition(&info) - .ok_or(Error::MissingDefinition)?; - - let task_env_mode = task_definition.env_mode.unwrap_or(self.global_env_mode); - package_task_event.track_env_mode(&task_env_mode.to_string()); - - let dependency_set = engine.dependencies(&info).ok_or(Error::MissingDefinition)?; - - let task_hash_telemetry = package_task_event.child(); - let task_hash = self.task_hasher.calculate_task_hash( - &info, - task_definition, - task_env_mode, - workspace_info, - dependency_set, - task_hash_telemetry, - )?; - - debug!("task {} hash is {}", info, task_hash); - // We do this calculation earlier than we do in Go due to the `task_hasher` - // being !Send. In the future we can look at doing this right before - // task execution instead. - let execution_env = - self.task_hasher - .env(&info, task_env_mode, task_definition, &self.global_env)?; - - let task_cache = self.run_cache.task_cache( - task_definition, - workspace_info, - info.clone(), - &task_hash, - ); - - // Drop to avoid holding the span across an await - drop(_enter); - - // here is where we do the logic split - match self.dry { - true => { - let dry_run_exec_context = - factory.dry_run_exec_context(info.clone(), task_cache); - let tracker = self.run_tracker.track_task(info.into_owned()); - tasks.push(tokio::spawn(async move { - dry_run_exec_context.execute_dry_run(tracker).await - })); - } - false => { - // TODO(gsoltis): if/when we fix https://github.com/vercel/turborepo/issues/937 - // the following block should never get hit. In the meantime, keep it after - // hashing so that downstream tasks can count on the hash existing - // - // bail if the script doesn't exist or is empty - if command.map_or(true, |s| s.is_empty()) { - continue; - } - - let workspace_directory = self.repo_root.resolve(workspace_info.package_path()); - - let takes_input = task_definition.interactive || task_definition.persistent; - let mut exec_context = factory.exec_context( - info.clone(), - task_hash, - task_cache, - workspace_directory, - execution_env, - takes_input, - self.task_access.clone(), - ); - - let vendor_behavior = - Vendor::infer().and_then(|vendor| vendor.behavior.as_ref()); - - let output_client = if let Some(handle) = &self.ui_sender { - TaskOutput::UI(handle.task(info.to_string())) - } else { - TaskOutput::Direct(self.output_client(&info, vendor_behavior)) - }; - - let tracker = self.run_tracker.track_task(info.clone().into_owned()); - let spaces_client = self.run_tracker.spaces_task_client(); - let parent_span = Span::current(); - let execution_telemetry = package_task_event.child(); - - tasks.push(tokio::spawn(async move { - exec_context - .execute( - parent_span.id(), - tracker, - output_client, - callback, - spaces_client, - &execution_telemetry, - ) - .await - })); - } - } - } - - // Wait for the engine task to finish and for all of our tasks to finish - engine_handle.await.expect("engine execution panicked")?; - // This will poll the futures until they are all completed - let mut internal_errors = Vec::new(); - while let Some(result) = tasks.next().await { - if let Err(e) = result.unwrap_or_else(|e| panic!("task executor panicked: {e}")) { - internal_errors.push(e); - } - } - drop(factory); - - if !self.is_watch { - if let Some(handle) = &self.ui_sender { - handle.stop().await; - } - } - - if !internal_errors.is_empty() { - return Err(Error::InternalErrors( - internal_errors.into_iter().map(|e| e.to_string()).join(","), - )); - } - - // Write out the traced-config.json file if we have one - self.task_access.save().await; - - let errors = Arc::into_inner(errors) - .expect("only one strong reference to errors should remain") - .into_inner() - .expect("mutex poisoned"); - - Ok(errors) - } - - /// Finishes visiting the tasks, creates the run summary, and either - /// prints, saves, or sends it to spaces. - - #[allow(clippy::too_many_arguments)] - #[tracing::instrument(skip( - self, - packages, - global_hash_inputs, - engine, - env_at_execution_start - ))] - pub(crate) async fn finish( - self, - exit_code: i32, - packages: &HashSet, - global_hash_inputs: GlobalHashableInputs<'_>, - engine: &Engine, - env_at_execution_start: &EnvironmentVariableMap, - pkg_inference_root: Option<&AnchoredSystemPath>, - ) -> Result<(), Error> { - let Self { - package_graph, - color_config: ui, - run_opts, - repo_root, - global_env_mode, - task_hasher, - is_watch, - .. - } = self; - - let global_hash_summary = GlobalHashSummary::try_from(global_hash_inputs)?; - - // output any warnings that we collected while running tasks - if let Ok(warnings) = self.warnings.lock() { - if !warnings.is_empty() { - eprintln!(); - warn!("finished with warnings"); - eprintln!(); - - let has_missing_platform_env: bool = warnings - .iter() - .any(|warning| !warning.missing_platform_env.is_empty()); - if has_missing_platform_env { - PlatformEnv::output_header( - global_env_mode == EnvMode::Strict, - self.color_config, - ); - - for warning in warnings.iter() { - if !warning.missing_platform_env.is_empty() { - PlatformEnv::output_for_task( - warning.missing_platform_env.clone(), - &warning.task_id, - self.color_config, - ) - } - } - } - } - } - - Ok(self - .run_tracker - .finish( - exit_code, - &package_graph, - ui, - repo_root, - pkg_inference_root, - run_opts, - packages, - global_hash_summary, - global_env_mode, - engine, - task_hasher.task_hash_tracker(), - env_at_execution_start, - is_watch, - ) - .await?) - } - - fn sink(run_opts: &RunOpts) -> OutputSink { - let (out, err) = if run_opts.should_redirect_stderr_to_stdout() { - (std::io::stdout().into(), std::io::stdout().into()) - } else { - (std::io::stdout().into(), std::io::stderr().into()) - }; - OutputSink::new(out, err) - } - - fn output_client( - &self, - task_id: &TaskId, - vendor_behavior: Option<&VendorBehavior>, - ) -> OutputClient { - let behavior = match self.run_opts.log_order { - crate::opts::ResolvedLogOrder::Stream if self.run_tracker.spaces_enabled() => { - turborepo_ui::OutputClientBehavior::InMemoryBuffer - } - crate::opts::ResolvedLogOrder::Stream => { - turborepo_ui::OutputClientBehavior::Passthrough - } - crate::opts::ResolvedLogOrder::Grouped => turborepo_ui::OutputClientBehavior::Grouped, - }; - - let mut logger = self.sink.logger(behavior); - if let Some(vendor_behavior) = vendor_behavior { - let group_name = if self.run_opts.single_package { - task_id.task().to_string() - } else { - format!("{}:{}", task_id.package(), task_id.task()) - }; - - let header_factory = (vendor_behavior.group_prefix)(group_name.to_owned()); - let footer_factory = (vendor_behavior.group_suffix)(group_name.to_owned()); - - logger.with_header_footer(Some(header_factory), Some(footer_factory)); - - let (error_header, error_footer) = ( - vendor_behavior - .error_group_prefix - .map(|f| f(group_name.to_owned())), - vendor_behavior - .error_group_suffix - .map(|f| f(group_name.to_owned())), - ); - logger.with_error_header_footer(error_header, error_footer); - } - logger - } - - fn prefix<'b>(&self, task_id: &'b TaskId) -> Cow<'b, str> { - match self.run_opts.log_prefix { - crate::opts::ResolvedLogPrefix::Task if self.run_opts.single_package => { - task_id.task().into() - } - crate::opts::ResolvedLogPrefix::Task => { - format!("{}:{}", task_id.package(), task_id.task()).into() - } - crate::opts::ResolvedLogPrefix::None => "".into(), - } - } - - // Task ID as displayed in error messages - fn display_task_id(&self, task_id: &TaskId) -> String { - match self.run_opts.single_package { - true => task_id.task().to_string(), - false => task_id.to_string(), - } - } - - fn prefixed_ui( - color_config: ColorConfig, - is_github_actions: bool, - stdout: W, - stderr: W, - prefix: StyledObject, - ) -> PrefixedUI { - let mut prefixed_ui = PrefixedUI::new(color_config, stdout, stderr) - .with_output_prefix(prefix.clone()) - // TODO: we can probably come up with a more ergonomic way to achieve this - .with_error_prefix( - Style::new().apply_to(format!("{}ERROR: ", color_config.apply(prefix.clone()))), - ) - .with_warn_prefix(prefix); - if is_github_actions { - prefixed_ui = prefixed_ui - .with_error_prefix(Style::new().apply_to("[ERROR] ".to_string())) - .with_warn_prefix(Style::new().apply_to("[WARN] ".to_string())); - } - prefixed_ui - } - - /// Only used for the hashing comparison between Rust and Go. After port, - /// should delete - pub fn into_task_hash_tracker(self) -> TaskHashTrackerState { - self.task_hasher.into_task_hash_tracker_state() - } - - pub fn dry_run(&mut self) { - self.dry = true; - // No need to start a UI on dry run - self.ui_sender = None; - } -} - -// A tiny enum that allows us to use the same type for stdout and stderr without -// the use of Box -enum StdWriter { - Out(std::io::Stdout), - Err(std::io::Stderr), - Null(std::io::Sink), -} - -impl StdWriter { - fn writer(&mut self) -> &mut dyn std::io::Write { - match self { - StdWriter::Out(out) => out, - StdWriter::Err(err) => err, - StdWriter::Null(null) => null, - } - } -} - -impl From for StdWriter { - fn from(value: std::io::Stdout) -> Self { - Self::Out(value) - } -} - -impl From for StdWriter { - fn from(value: std::io::Stderr) -> Self { - Self::Err(value) - } -} - -impl From for StdWriter { - fn from(value: std::io::Sink) -> Self { - Self::Null(value) - } -} - -impl std::io::Write for StdWriter { - fn write(&mut self, buf: &[u8]) -> std::io::Result { - self.writer().write(buf) - } - - fn flush(&mut self) -> std::io::Result<()> { - self.writer().flush() - } -} - -/// Small wrapper over our two output types that defines a shared interface for -/// interacting with them. -enum TaskOutput { - Direct(OutputClient), - UI(TaskSender), -} - -fn turbo_regex() -> &'static Regex { - static RE: OnceLock = OnceLock::new(); - RE.get_or_init(|| Regex::new(r"(?:^|\s)turbo(?:$|\s)").unwrap()) -} - -// Warning that comes from the execution of the task -#[derive(Debug, Clone)] -pub struct TaskWarning { - task_id: String, - missing_platform_env: Vec, -} - -// Error that comes from the execution of the task -#[derive(Debug, thiserror::Error, Clone)] -#[error("{task_id}: {cause}")] -pub struct TaskError { - task_id: String, - cause: TaskErrorCause, -} - -#[derive(Debug, thiserror::Error, Clone)] -enum TaskErrorCause { - #[error("unable to spawn child process: {msg}")] - // We eagerly serialize this in order to allow us to implement clone - Spawn { msg: String }, - #[error("command {command} exited ({exit_code})")] - Exit { command: String, exit_code: i32 }, - #[error("turbo has internal error processing task")] - Internal, -} - -#[derive(Debug, thiserror::Error)] -pub enum InternalError { - #[error(transparent)] - Io(#[from] std::io::Error), - #[error("unable to determine why task exited")] - UnknownChildExit, - #[error("unable to find package manager binary: {0}")] - Which(#[from] which::Error), - #[error("external process killed a task")] - ExternalKill, - #[error("error writing logs: {0}")] - Logs(#[from] crate::run::CacheError), -} - -impl TaskError { - pub fn exit_code(&self) -> Option { - match self.cause { - TaskErrorCause::Exit { exit_code, .. } => Some(exit_code), - _ => None, - } - } - - fn from_spawn(task_id: String, err: std::io::Error) -> Self { - Self { - task_id, - cause: TaskErrorCause::Spawn { - msg: err.to_string(), - }, - } - } - - fn from_execution(task_id: String, command: String, exit_code: i32) -> Self { - Self { - task_id, - cause: TaskErrorCause::Exit { command, exit_code }, - } - } -} - -impl TaskErrorCause { - fn from_spawn(err: std::io::Error) -> Self { - TaskErrorCause::Spawn { - msg: err.to_string(), - } - } - - fn from_execution(command: String, exit_code: i32) -> Self { - TaskErrorCause::Exit { command, exit_code } - } -} - -struct ExecContextFactory<'a> { - visitor: &'a Visitor<'a>, - errors: Arc>>, - manager: ProcessManager, - engine: &'a Arc, -} - -impl<'a> ExecContextFactory<'a> { - pub fn new( - visitor: &'a Visitor<'a>, - errors: Arc>>, - manager: ProcessManager, - engine: &'a Arc, - ) -> Self { - Self { - visitor, - errors, - manager, - engine, - } - } - - #[allow(clippy::too_many_arguments)] - pub fn exec_context( - &self, - task_id: TaskId<'static>, - task_hash: String, - task_cache: TaskCache, - workspace_directory: AbsoluteSystemPathBuf, - execution_env: EnvironmentVariableMap, - takes_input: bool, - task_access: TaskAccess, - ) -> ExecContext { - let task_id_for_display = self.visitor.display_task_id(&task_id); - let pass_through_args = self.visitor.run_opts.args_for_task(&task_id); - let task_id_string = &task_id.to_string(); - ExecContext { - engine: self.engine.clone(), - ui_mode: self.visitor.run_opts.ui_mode, - color_config: self.visitor.color_config, - is_github_actions: self.visitor.run_opts.is_github_actions, - pretty_prefix: self - .visitor - .color_cache - .prefix_with_color(task_id_string, &self.visitor.prefix(&task_id)), - task_id, - task_id_for_display, - task_cache, - hash_tracker: self.visitor.task_hasher.task_hash_tracker(), - package_manager: *self.visitor.package_graph.package_manager(), - workspace_directory, - manager: self.manager.clone(), - task_hash, - execution_env, - continue_on_error: self.visitor.run_opts.continue_on_error, - pass_through_args, - errors: self.errors.clone(), - warnings: self.visitor.warnings.clone(), - takes_input, - task_access, - platform_env: PlatformEnv::new(), - } - } - - pub fn dry_run_exec_context( - &self, - task_id: TaskId<'static>, - task_cache: TaskCache, - ) -> DryRunExecContext { - DryRunExecContext { - task_id, - task_cache, - hash_tracker: self.visitor.task_hasher.task_hash_tracker(), - } - } -} - -struct ExecContext { - engine: Arc, - color_config: ColorConfig, - ui_mode: UIMode, - is_github_actions: bool, - pretty_prefix: StyledObject, - task_id: TaskId<'static>, - task_id_for_display: String, - task_cache: TaskCache, - hash_tracker: TaskHashTracker, - package_manager: PackageManager, - workspace_directory: AbsoluteSystemPathBuf, - manager: ProcessManager, - task_hash: String, - execution_env: EnvironmentVariableMap, - continue_on_error: bool, - pass_through_args: Option>, - errors: Arc>>, - warnings: Arc>>, - takes_input: bool, - task_access: TaskAccess, - platform_env: PlatformEnv, -} - -enum ExecOutcome { - // All operations during execution succeeded - Success(SuccessOutcome), - // An error with the task execution - Task { - exit_code: Option, - message: String, - }, - // Task didn't execute normally due to a shutdown being initiated by another task - Shutdown, -} - -enum SuccessOutcome { - CacheHit, - Run, -} - -impl ExecContext { - pub async fn execute_dry_run(&mut self, tracker: TaskTracker<()>) { - if let Ok(Some(status)) = self.task_cache.exists().await { - self.hash_tracker - .insert_cache_status(self.task_id.clone(), status); - } - - tracker.dry_run().await; - } - pub async fn execute( - &mut self, - parent_span_id: Option, - tracker: TaskTracker<()>, - output_client: TaskOutput, - callback: oneshot::Sender>, - spaces_client: Option, - telemetry: &PackageTaskEventBuilder, - ) -> Result<(), InternalError> { - let tracker = tracker.start().await; - let span = tracing::debug_span!("execute_task", task = %self.task_id.task()); - span.follows_from(parent_span_id); - let mut result = self - .execute_inner(&output_client, telemetry) - .instrument(span) - .await; - - // If the task resulted in an error, do not group in order to better highlight - // the error. - let is_error = matches!(result, Ok(ExecOutcome::Task { .. })); - let is_cache_hit = matches!(result, Ok(ExecOutcome::Success(SuccessOutcome::CacheHit))); - let logs = match output_client.finish(is_error, is_cache_hit) { - Ok(logs) => logs, - Err(e) => { - telemetry.track_error(TrackedErrors::DaemonFailedToMarkOutputsAsCached); - error!("unable to flush output client: {e}"); - result = Err(InternalError::Io(e)); - None - } - }; - - match result { - Ok(ExecOutcome::Success(outcome)) => { - let task_summary = match outcome { - SuccessOutcome::CacheHit => tracker.cached().await, - SuccessOutcome::Run => tracker.build_succeeded(0).await, - }; - callback.send(Ok(())).ok(); - if let Some(client) = spaces_client { - let logs = logs.expect("spaces enabled logs should be collected"); - let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); - client.finish_task(info).await.ok(); - } - } - Ok(ExecOutcome::Task { exit_code, message }) => { - let task_summary = tracker.build_failed(exit_code, message).await; - callback - .send(match self.continue_on_error { - true => Ok(()), - false => Err(StopExecution), - }) - .ok(); - - match (spaces_client, self.continue_on_error) { - // Nothing to do - (None, true) => (), - // Shut down manager - (None, false) => self.manager.stop().await, - // Send task - (Some(client), true) => { - let logs = logs.expect("spaced enabled logs should be collected"); - let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); - client.finish_task(info).await.ok(); - } - // Send task and shut down manager - (Some(client), false) => { - let logs = logs.unwrap_or_default(); - let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); - // Ignore spaces result as that indicates handler is shut down and we are - // unable to send information to spaces - let (_spaces_result, _) = - tokio::join!(client.finish_task(info), self.manager.stop()); - } - } - } - Ok(ExecOutcome::Shutdown) => { - tracker.cancel(); - callback.send(Err(StopExecution)).ok(); - // Probably overkill here, but we should make sure the process manager is - // stopped if we think we're shutting down. - self.manager.stop().await; - } - Err(e) => { - tracker.cancel(); - callback.send(Err(StopExecution)).ok(); - self.manager.stop().await; - return Err(e); - } - } - - Ok(()) - } - - fn prefixed_ui<'a, W: Write>( - &self, - output_client: &'a TaskOutput, - ) -> TaskCacheOutput> { - match output_client { - TaskOutput::Direct(client) => TaskCacheOutput::Direct(Visitor::prefixed_ui( - self.color_config, - self.is_github_actions, - client.stdout(), - client.stderr(), - self.pretty_prefix.clone(), - )), - TaskOutput::UI(task) => TaskCacheOutput::UI(task.clone()), - } - } - - async fn execute_inner( - &mut self, - output_client: &TaskOutput, - telemetry: &PackageTaskEventBuilder, - ) -> Result { - let task_start = Instant::now(); - let mut prefixed_ui = self.prefixed_ui(output_client); - - if self.ui_mode.has_sender() { - if let TaskOutput::UI(task) = output_client { - let output_logs = self.task_cache.output_logs().into(); - task.start(output_logs); - } - } - - if !self.task_cache.is_caching_disabled() { - let missing_platform_env = self.platform_env.validate(&self.execution_env); - if !missing_platform_env.is_empty() { - self.warnings - .lock() - .expect("warnings lock poisoned") - .push(TaskWarning { - task_id: self.task_id_for_display.clone(), - missing_platform_env, - }); - } - } - - match self - .task_cache - .restore_outputs(&mut prefixed_ui, telemetry) - .await - { - Ok(Some(status)) => { - // we need to set expanded outputs - self.hash_tracker.insert_expanded_outputs( - self.task_id.clone(), - self.task_cache.expanded_outputs().to_vec(), - ); - self.hash_tracker - .insert_cache_status(self.task_id.clone(), status); - return Ok(ExecOutcome::Success(SuccessOutcome::CacheHit)); - } - Ok(None) => (), - Err(e) => { - telemetry.track_error(TrackedErrors::ErrorFetchingFromCache); - prefixed_ui.error(&format!("error fetching from cache: {e}")); - } - } - - let package_manager_binary = which(self.package_manager.command())?; - - let mut cmd = Command::new(package_manager_binary); - let mut args = vec!["run".to_string(), self.task_id.task().to_string()]; - if let Some(pass_through_args) = &self.pass_through_args { - args.extend( - self.package_manager - .arg_separator(pass_through_args.as_slice()) - .map(|s| s.to_string()), - ); - args.extend(pass_through_args.iter().cloned()); - } - cmd.args(args); - cmd.current_dir(self.workspace_directory.clone()); - - // We clear the env before populating it with variables we expect - cmd.env_clear(); - cmd.envs(self.execution_env.iter()); - // Always last to make sure it overwrites any user configured env var. - cmd.env("TURBO_HASH", &self.task_hash); - - // Allow downstream tools to detect if the task is being ran with TUI - if self.ui_mode.use_tui() { - cmd.env("TURBO_IS_TUI", "true"); - } - - // enable task access tracing - - // set the trace file env var - frameworks that support this can use it to - // write out a trace file that we will use to automatically cache the task - if self.task_access.is_enabled() { - let (task_access_trace_key, trace_file) = self.task_access.get_env_var(&self.task_hash); - cmd.env(task_access_trace_key, trace_file.to_string()); - } - - cmd.open_stdin(); - - let mut process = match self.manager.spawn(cmd, Duration::from_millis(500)) { - Some(Ok(child)) => child, - // Turbo was unable to spawn a process - Some(Err(e)) => { - // Note: we actually failed to spawn, but this matches the Go output - prefixed_ui.error(&format!("command finished with error: {e}")); - let error_string = e.to_string(); - self.errors - .lock() - .expect("lock poisoned") - .push(TaskError::from_spawn(self.task_id_for_display.clone(), e)); - return Ok(ExecOutcome::Task { - exit_code: None, - message: error_string, - }); - } - // Turbo is shutting down - None => { - return Ok(ExecOutcome::Shutdown); - } - }; - - if self.ui_mode.has_sender() && self.takes_input { - if let TaskOutput::UI(task) = output_client { - if let Some(stdin) = process.stdin() { - task.set_stdin(stdin); - } - } - } - - // Even if user does not have the TUI and cannot interact with a task, we keep - // stdin open for persistent tasks as some programs will shut down if stdin is - // closed. - if !self.takes_input && !self.manager.closing_stdin_ends_process() { - process.stdin(); - } - - let mut stdout_writer = self - .task_cache - .output_writer(prefixed_ui.task_writer()) - .inspect_err(|_| { - telemetry.track_error(TrackedErrors::FailedToCaptureOutputs); - })?; - - let exit_status = match process.wait_with_piped_outputs(&mut stdout_writer).await { - Ok(Some(exit_status)) => exit_status, - Err(e) => { - telemetry.track_error(TrackedErrors::FailedToPipeOutputs); - return Err(e.into()); - } - Ok(None) => { - // TODO: how can this happen? we only update the - // exit status with Some and it is only initialized with - // None. Is it still running? - telemetry.track_error(TrackedErrors::UnknownChildExit); - error!("unable to determine why child exited"); - return Err(InternalError::UnknownChildExit); - } - }; - let task_duration = task_start.elapsed(); - - match exit_status { - ChildExit::Finished(Some(0)) => { - // Attempt to flush stdout_writer and log any errors encountered - if let Err(e) = stdout_writer.flush() { - error!("{e}"); - } else if self - .task_access - .can_cache(&self.task_hash, &self.task_id_for_display) - .unwrap_or(true) - { - if let Err(e) = self.task_cache.save_outputs(task_duration, telemetry).await { - error!("error caching output: {e}"); - return Err(e.into()); - } else { - // If no errors, update hash tracker with expanded outputs - self.hash_tracker.insert_expanded_outputs( - self.task_id.clone(), - self.task_cache.expanded_outputs().to_vec(), - ); - } - } - - // Return success outcome - Ok(ExecOutcome::Success(SuccessOutcome::Run)) - } - ChildExit::Finished(Some(code)) => { - // If there was an error, flush the buffered output - if let Err(e) = stdout_writer.flush() { - error!("error flushing logs: {e}"); - } - if let Err(e) = self.task_cache.on_error(&mut prefixed_ui) { - error!("error reading logs: {e}"); - } - let error = TaskErrorCause::from_execution(process.label().to_string(), code); - let message = error.to_string(); - if self.continue_on_error { - prefixed_ui.warn("command finished with error, but continuing..."); - } else { - prefixed_ui.error(&format!("command finished with error: {error}")); - } - self.errors.lock().expect("lock poisoned").push(TaskError { - task_id: self.task_id_for_display.clone(), - cause: error, - }); - Ok(ExecOutcome::Task { - exit_code: Some(code), - message, - }) - } - // The child exited in a way where we can't figure out how it finished so we assume it - // failed. - ChildExit::Finished(None) | ChildExit::Failed => Err(InternalError::UnknownChildExit), - // Something else killed the child - ChildExit::KilledExternal => Err(InternalError::ExternalKill), - // The child was killed by turbo indicating a shutdown - ChildExit::Killed => Ok(ExecOutcome::Shutdown), - } - } - - fn spaces_task_info( - &self, - task_id: TaskId<'static>, - execution_summary: TaskExecutionSummary, - logs: Vec, - ) -> SpacesTaskInformation { - let dependencies = self.engine.dependencies(&task_id); - let dependents = self.engine.dependents(&task_id); - let cache_status = self.hash_tracker.cache_status(&task_id); - SpacesTaskInformation { - task_id, - execution_summary, - logs, - hash: self.task_hash.clone(), - cache_status, - dependencies, - dependents, - } - } -} - -struct DryRunExecContext { - task_id: TaskId<'static>, - task_cache: TaskCache, - hash_tracker: TaskHashTracker, -} - -impl DryRunExecContext { - pub async fn execute_dry_run(&self, tracker: TaskTracker<()>) -> Result<(), InternalError> { - // may also need to do framework & command stuff? - if let Ok(Some(status)) = self.task_cache.exists().await { - self.hash_tracker - .insert_cache_status(self.task_id.clone(), status); - } - tracker.dry_run().await; - Ok(()) - } -} - -/// Struct for displaying information about task's cache -enum TaskCacheOutput { - Direct(PrefixedUI), - UI(TaskSender), -} - -impl TaskCacheOutput { - fn task_writer(&mut self) -> Either, TaskSender> { - match self { - TaskCacheOutput::Direct(prefixed) => Either::Left(prefixed.output_prefixed_writer()), - TaskCacheOutput::UI(task) => Either::Right(task.clone()), - } - } - - fn warn(&mut self, message: impl std::fmt::Display) { - match self { - TaskCacheOutput::Direct(prefixed) => prefixed.warn(message), - TaskCacheOutput::UI(task) => { - let _ = write!(task, "\r\n{message}\r\n"); - } - } - } -} - -impl CacheOutput for TaskCacheOutput { - fn status(&mut self, message: &str, result: CacheResult) { - match self { - TaskCacheOutput::Direct(direct) => direct.output(message), - TaskCacheOutput::UI(task) => task.status(message, result), - } - } - - fn error(&mut self, message: &str) { - match self { - TaskCacheOutput::Direct(prefixed) => prefixed.error(message), - TaskCacheOutput::UI(task) => { - let _ = write!(task, "{message}\r\n"); - } - } - } - - fn replay_logs(&mut self, log_file: &AbsoluteSystemPath) -> Result<(), turborepo_ui::Error> { - match self { - TaskCacheOutput::Direct(direct) => { - let writer = direct.output_prefixed_writer(); - turborepo_ui::replay_logs(writer, log_file) - } - TaskCacheOutput::UI(task) => turborepo_ui::replay_logs(task, log_file), - } - } -} - -/// Struct for displaying information about task -impl TaskOutput { - pub fn finish(self, use_error: bool, is_cache_hit: bool) -> std::io::Result>> { - match self { - TaskOutput::Direct(client) => client.finish(use_error), - TaskOutput::UI(client) if use_error => Ok(Some(client.failed())), - TaskOutput::UI(client) => Ok(Some(client.succeeded(is_cache_hit))), - } - } - - pub fn stdout(&self) -> Either, TaskSender> { - match self { - TaskOutput::Direct(client) => Either::Left(client.stdout()), - TaskOutput::UI(client) => Either::Right(client.clone()), - } - } - - pub fn stderr(&self) -> Either, TaskSender> { - match self { - TaskOutput::Direct(client) => Either::Left(client.stderr()), - TaskOutput::UI(client) => Either::Right(client.clone()), - } - } - - pub fn task_logs(&self) -> Either, TaskSender> { - match self { - TaskOutput::Direct(client) => Either::Left(client.stdout()), - TaskOutput::UI(client) => Either::Right(client.clone()), - } - } -} diff --git a/crates/turborepo-lib/src/task_graph/visitor/command.rs b/crates/turborepo-lib/src/task_graph/visitor/command.rs new file mode 100644 index 0000000000000..b5459db8ebfa9 --- /dev/null +++ b/crates/turborepo-lib/src/task_graph/visitor/command.rs @@ -0,0 +1,78 @@ +use std::path::PathBuf; + +use turbopath::AbsoluteSystemPath; +use turborepo_env::EnvironmentVariableMap; +use turborepo_repository::package_graph::{PackageGraph, PackageName}; + +use super::Error; +use crate::{opts::TaskArgs, process::Command, run::task_id::TaskId}; + +#[derive(Debug)] +pub struct CommandFactory<'a> { + repo_root: &'a AbsoluteSystemPath, + package_graph: &'a PackageGraph, + package_manager_binary: Result, + task_args: TaskArgs<'a>, +} + +impl<'a> CommandFactory<'a> { + pub fn new( + repo_root: &'a AbsoluteSystemPath, + package_graph: &'a PackageGraph, + task_args: TaskArgs<'a>, + ) -> Self { + let package_manager_binary = which::which(package_graph.package_manager().command()); + Self { + repo_root, + package_graph, + package_manager_binary, + task_args, + } + } + + pub fn command( + &self, + task_id: &TaskId, + environment: EnvironmentVariableMap, + ) -> Result, Error> { + let workspace_info = self + .package_graph + .package_info(&PackageName::from(task_id.package())) + .ok_or_else(|| Error::MissingPackage { + package_name: task_id.package().into(), + task_id: task_id.clone().into_owned(), + })?; + + // bail if the script doesn't exist or is empty + if workspace_info + .package_json + .scripts + .get(task_id.task()) + .map_or(true, |script| script.is_empty()) + { + return Ok(None); + } + let package_manager_binary = self.package_manager_binary.as_deref().map_err(|e| *e)?; + let mut cmd = Command::new(package_manager_binary); + let mut args = vec!["run".to_string(), task_id.task().to_string()]; + if let Some(pass_through_args) = self.task_args.args_for_task(task_id) { + args.extend( + self.package_graph + .package_manager() + .arg_separator(pass_through_args) + .map(|s| s.to_string()), + ); + args.extend(pass_through_args.iter().cloned()); + } + cmd.args(args); + + let package_dir = self.repo_root.resolve(workspace_info.package_path()); + cmd.current_dir(package_dir); + + // We clear the env before populating it with variables we expect + cmd.env_clear(); + cmd.envs(environment.iter()); + + Ok(Some(cmd)) + } +} diff --git a/crates/turborepo-lib/src/task_graph/visitor/error.rs b/crates/turborepo-lib/src/task_graph/visitor/error.rs new file mode 100644 index 0000000000000..f7823ba0d4c21 --- /dev/null +++ b/crates/turborepo-lib/src/task_graph/visitor/error.rs @@ -0,0 +1,110 @@ +// Warning that comes from the execution of the task +#[derive(Debug, Clone)] +pub struct TaskWarning { + task_id: String, + missing_platform_env: Vec, +} + +// Error that comes from the execution of the task +#[derive(Debug, thiserror::Error, Clone)] +#[error("{task_id}: {cause}")] +pub struct TaskError { + task_id: String, + cause: TaskErrorCause, +} + +#[derive(Debug, thiserror::Error, Clone)] +pub enum TaskErrorCause { + #[error("unable to spawn child process: {msg}")] + // We eagerly serialize this in order to allow us to implement clone + Spawn { msg: String }, + #[error("command {command} exited ({exit_code})")] + Exit { command: String, exit_code: i32 }, + #[error("turbo has internal error processing task")] + Internal, +} + +impl TaskWarning { + /// Construct a new warning for a given task with the + /// Returns `None` if there are no missing platform environment variables + pub fn new(task_id: &str, missing_platform_env: Vec) -> Option { + if missing_platform_env.is_empty() { + return None; + } + Some(Self { + task_id: task_id.to_owned(), + missing_platform_env, + }) + } + + pub fn task_id(&self) -> &str { + &self.task_id + } + + /// All missing platform environment variables. + /// Guaranteed to have at least length 1 due to constructor validation. + pub fn missing_platform_env(&self) -> &[String] { + &self.missing_platform_env + } +} + +impl TaskError { + pub fn new(task_id: String, cause: TaskErrorCause) -> Self { + Self { task_id, cause } + } + + pub fn exit_code(&self) -> Option { + match self.cause { + TaskErrorCause::Exit { exit_code, .. } => Some(exit_code), + _ => None, + } + } + + pub fn from_spawn(task_id: String, err: std::io::Error) -> Self { + Self { + task_id, + cause: TaskErrorCause::Spawn { + msg: err.to_string(), + }, + } + } + + pub fn from_execution(task_id: String, command: String, exit_code: i32) -> Self { + Self { + task_id, + cause: TaskErrorCause::Exit { command, exit_code }, + } + } +} + +impl TaskErrorCause { + pub fn from_spawn(err: std::io::Error) -> Self { + TaskErrorCause::Spawn { + msg: err.to_string(), + } + } + + pub fn from_execution(command: String, exit_code: i32) -> Self { + TaskErrorCause::Exit { command, exit_code } + } +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_warning_no_vars() { + let no_warning = TaskWarning::new("a-task", vec![]); + assert!(no_warning.is_none()); + } + + #[test] + fn test_warning_some_var() { + let warning = TaskWarning::new("a-task", vec!["MY_VAR".into()]); + assert!(warning.is_some()); + let warning = warning.unwrap(); + assert_eq!(warning.task_id(), "a-task"); + assert_eq!(warning.missing_platform_env(), &["MY_VAR".to_owned()]); + } +} diff --git a/crates/turborepo-lib/src/task_graph/visitor/exec.rs b/crates/turborepo-lib/src/task_graph/visitor/exec.rs new file mode 100644 index 0000000000000..811fd198a6b0b --- /dev/null +++ b/crates/turborepo-lib/src/task_graph/visitor/exec.rs @@ -0,0 +1,524 @@ +use std::{ + io::Write, + sync::{Arc, Mutex}, + time::{Duration, Instant}, +}; + +use console::StyledObject; +use tokio::sync::oneshot; +use tracing::{error, Instrument}; +use turborepo_env::{platform::PlatformEnv, EnvironmentVariableMap}; +use turborepo_repository::package_manager::PackageManager; +use turborepo_telemetry::events::{task::PackageTaskEventBuilder, TrackedErrors}; +use turborepo_ui::{ColorConfig, OutputWriter}; + +use super::{ + command::CommandFactory, + error::{TaskError, TaskErrorCause, TaskWarning}, + output::TaskCacheOutput, + TaskOutput, Visitor, +}; +use crate::{ + config::UIMode, + engine::{Engine, StopExecution}, + process::{ChildExit, Command, ProcessManager}, + run::{ + summary::{SpacesTaskClient, SpacesTaskInformation, TaskExecutionSummary, TaskTracker}, + task_access::TaskAccess, + task_id::TaskId, + CacheOutput, TaskCache, + }, + task_hash::TaskHashTracker, +}; + +pub struct ExecContextFactory<'a> { + visitor: &'a Visitor<'a>, + errors: Arc>>, + manager: ProcessManager, + engine: &'a Arc, + command_factory: CommandFactory<'a>, +} + +impl<'a> ExecContextFactory<'a> { + pub fn new( + visitor: &'a Visitor<'a>, + errors: Arc>>, + manager: ProcessManager, + engine: &'a Arc, + ) -> Result { + let command_factory = CommandFactory::new( + visitor.repo_root, + &visitor.package_graph, + visitor.run_opts.task_args(), + ); + Ok(Self { + visitor, + errors, + manager, + engine, + command_factory, + }) + } + + #[allow(clippy::too_many_arguments)] + pub fn exec_context( + &self, + task_id: TaskId<'static>, + task_hash: String, + task_cache: TaskCache, + mut execution_env: EnvironmentVariableMap, + takes_input: bool, + task_access: TaskAccess, + ) -> Result, super::Error> { + let task_id_for_display = self.visitor.display_task_id(&task_id); + let task_id_string = &task_id.to_string(); + self.populate_env(&mut execution_env, &task_hash, &task_access); + let Some(cmd) = self + .command_factory + .command(&task_id, execution_env.clone())? + else { + return Ok(None); + }; + Ok(Some(ExecContext { + engine: self.engine.clone(), + ui_mode: self.visitor.run_opts.ui_mode, + color_config: self.visitor.color_config, + is_github_actions: self.visitor.run_opts.is_github_actions, + pretty_prefix: self + .visitor + .color_cache + .prefix_with_color(task_id_string, &self.visitor.prefix(&task_id)), + task_id, + task_id_for_display, + task_cache, + hash_tracker: self.visitor.task_hasher.task_hash_tracker(), + package_manager: *self.visitor.package_graph.package_manager(), + manager: self.manager.clone(), + task_hash, + execution_env, + continue_on_error: self.visitor.run_opts.continue_on_error, + errors: self.errors.clone(), + warnings: self.visitor.warnings.clone(), + takes_input, + task_access, + cmd, + platform_env: PlatformEnv::new(), + })) + } + + pub fn dry_run_exec_context( + &self, + task_id: TaskId<'static>, + task_cache: TaskCache, + ) -> DryRunExecContext { + DryRunExecContext { + task_id, + task_cache, + hash_tracker: self.visitor.task_hasher.task_hash_tracker(), + } + } + + // Add any env vars that `turbo` provides to the task environment + fn populate_env( + &self, + execution_env: &mut EnvironmentVariableMap, + task_hash: &str, + task_access: &TaskAccess, + ) { + // Always last to make sure it overwrites any user configured env var. + execution_env.insert("TURBO_HASH".to_owned(), task_hash.to_owned()); + + // Allow downstream tools to detect if the task is being ran with TUI + if self.visitor.run_opts.ui_mode.use_tui() { + execution_env.insert("TURBO_IS_TUI".to_owned(), "true".to_owned()); + } + + // enable task access tracing + // set the trace file env var - frameworks that support this can use it to + // write out a trace file that we will use to automatically cache the task + if task_access.is_enabled() { + let (task_access_trace_key, trace_file) = task_access.get_env_var(task_hash); + execution_env.insert(task_access_trace_key, trace_file.to_string()); + } + } +} + +pub struct ExecContext { + engine: Arc, + color_config: ColorConfig, + ui_mode: UIMode, + is_github_actions: bool, + pretty_prefix: StyledObject, + task_id: TaskId<'static>, + task_id_for_display: String, + task_cache: TaskCache, + hash_tracker: TaskHashTracker, + package_manager: PackageManager, + manager: ProcessManager, + task_hash: String, + execution_env: EnvironmentVariableMap, + continue_on_error: bool, + errors: Arc>>, + warnings: Arc>>, + takes_input: bool, + task_access: TaskAccess, + cmd: Command, + platform_env: PlatformEnv, +} + +enum ExecOutcome { + // All operations during execution succeeded + Success(SuccessOutcome), + // An error with the task execution + Task { + exit_code: Option, + message: String, + }, + // Task didn't execute normally due to a shutdown being initiated by another task + Shutdown, +} + +enum SuccessOutcome { + CacheHit, + Run, +} + +impl ExecContext { + pub async fn execute_dry_run(&mut self, tracker: TaskTracker<()>) { + if let Ok(Some(status)) = self.task_cache.exists().await { + self.hash_tracker + .insert_cache_status(self.task_id.clone(), status); + } + + tracker.dry_run().await; + } + pub async fn execute( + &mut self, + parent_span_id: Option, + tracker: TaskTracker<()>, + output_client: TaskOutput, + callback: oneshot::Sender>, + spaces_client: Option, + telemetry: &PackageTaskEventBuilder, + ) -> Result<(), InternalError> { + let tracker = tracker.start().await; + let span = tracing::debug_span!("execute_task", task = %self.task_id.task()); + span.follows_from(parent_span_id); + let mut result = self + .execute_inner(&output_client, telemetry) + .instrument(span) + .await; + + // If the task resulted in an error, do not group in order to better highlight + // the error. + let is_error = matches!(result, Ok(ExecOutcome::Task { .. })); + let is_cache_hit = matches!(result, Ok(ExecOutcome::Success(SuccessOutcome::CacheHit))); + let logs = match output_client.finish(is_error, is_cache_hit) { + Ok(logs) => logs, + Err(e) => { + telemetry.track_error(TrackedErrors::DaemonFailedToMarkOutputsAsCached); + error!("unable to flush output client: {e}"); + result = Err(InternalError::Io(e)); + None + } + }; + + match result { + Ok(ExecOutcome::Success(outcome)) => { + let task_summary = match outcome { + SuccessOutcome::CacheHit => tracker.cached().await, + SuccessOutcome::Run => tracker.build_succeeded(0).await, + }; + callback.send(Ok(())).ok(); + if let Some(client) = spaces_client { + let logs = logs.expect("spaces enabled logs should be collected"); + let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); + client.finish_task(info).await.ok(); + } + } + Ok(ExecOutcome::Task { exit_code, message }) => { + let task_summary = tracker.build_failed(exit_code, message).await; + callback + .send(match self.continue_on_error { + true => Ok(()), + false => Err(StopExecution), + }) + .ok(); + + match (spaces_client, self.continue_on_error) { + // Nothing to do + (None, true) => (), + // Shut down manager + (None, false) => self.manager.stop().await, + // Send task + (Some(client), true) => { + let logs = logs.expect("spaced enabled logs should be collected"); + let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); + client.finish_task(info).await.ok(); + } + // Send task and shut down manager + (Some(client), false) => { + let logs = logs.unwrap_or_default(); + let info = self.spaces_task_info(self.task_id.clone(), task_summary, logs); + // Ignore spaces result as that indicates handler is shut down and we are + // unable to send information to spaces + let (_spaces_result, _) = + tokio::join!(client.finish_task(info), self.manager.stop()); + } + } + } + Ok(ExecOutcome::Shutdown) => { + tracker.cancel(); + callback.send(Err(StopExecution)).ok(); + // Probably overkill here, but we should make sure the process manager is + // stopped if we think we're shutting down. + self.manager.stop().await; + } + Err(e) => { + tracker.cancel(); + callback.send(Err(StopExecution)).ok(); + self.manager.stop().await; + return Err(e); + } + } + + Ok(()) + } + + fn prefixed_ui<'a, W: Write>( + &self, + output_client: &'a TaskOutput, + ) -> TaskCacheOutput> { + match output_client { + TaskOutput::Direct(client) => TaskCacheOutput::Direct(Visitor::prefixed_ui( + self.color_config, + self.is_github_actions, + client.stdout(), + client.stderr(), + self.pretty_prefix.clone(), + )), + TaskOutput::UI(task) => TaskCacheOutput::UI(task.clone()), + } + } + + async fn execute_inner( + &mut self, + output_client: &TaskOutput, + telemetry: &PackageTaskEventBuilder, + ) -> Result { + let task_start = Instant::now(); + let mut prefixed_ui = self.prefixed_ui(output_client); + + if self.ui_mode.has_sender() { + if let TaskOutput::UI(task) = output_client { + let output_logs = self.task_cache.output_logs().into(); + task.start(output_logs); + } + } + + if !self.task_cache.is_caching_disabled() { + let missing_platform_env = self.platform_env.validate(&self.execution_env); + if let Some(warning) = TaskWarning::new(&self.task_id_for_display, missing_platform_env) + { + self.warnings + .lock() + .expect("warnings lock poisoned") + .push(warning); + } + } + + match self + .task_cache + .restore_outputs(&mut prefixed_ui, telemetry) + .await + { + Ok(Some(status)) => { + // we need to set expanded outputs + self.hash_tracker.insert_expanded_outputs( + self.task_id.clone(), + self.task_cache.expanded_outputs().to_vec(), + ); + self.hash_tracker + .insert_cache_status(self.task_id.clone(), status); + return Ok(ExecOutcome::Success(SuccessOutcome::CacheHit)); + } + Ok(None) => (), + Err(e) => { + telemetry.track_error(TrackedErrors::ErrorFetchingFromCache); + prefixed_ui.error(&format!("error fetching from cache: {e}")); + } + } + + let cmd = self.cmd.clone(); + + let mut process = match self.manager.spawn(cmd, Duration::from_millis(500)) { + Some(Ok(child)) => child, + // Turbo was unable to spawn a process + Some(Err(e)) => { + // Note: we actually failed to spawn, but this matches the Go output + prefixed_ui.error(&format!("command finished with error: {e}")); + let error_string = e.to_string(); + self.errors + .lock() + .expect("lock poisoned") + .push(TaskError::from_spawn(self.task_id_for_display.clone(), e)); + return Ok(ExecOutcome::Task { + exit_code: None, + message: error_string, + }); + } + // Turbo is shutting down + None => { + return Ok(ExecOutcome::Shutdown); + } + }; + + if self.ui_mode.has_sender() && self.takes_input { + if let TaskOutput::UI(task) = output_client { + if let Some(stdin) = process.stdin() { + task.set_stdin(stdin); + } + } + } + + // Even if user does not have the TUI and cannot interact with a task, we keep + // stdin open for persistent tasks as some programs will shut down if stdin is + // closed. + if !self.takes_input && !self.manager.closing_stdin_ends_process() { + process.stdin(); + } + + let mut stdout_writer = self + .task_cache + .output_writer(prefixed_ui.task_writer()) + .inspect_err(|_| { + telemetry.track_error(TrackedErrors::FailedToCaptureOutputs); + })?; + + let exit_status = match process.wait_with_piped_outputs(&mut stdout_writer).await { + Ok(Some(exit_status)) => exit_status, + Err(e) => { + telemetry.track_error(TrackedErrors::FailedToPipeOutputs); + return Err(e.into()); + } + Ok(None) => { + // TODO: how can this happen? we only update the + // exit status with Some and it is only initialized with + // None. Is it still running? + telemetry.track_error(TrackedErrors::UnknownChildExit); + error!("unable to determine why child exited"); + return Err(InternalError::UnknownChildExit); + } + }; + let task_duration = task_start.elapsed(); + + match exit_status { + ChildExit::Finished(Some(0)) => { + // Attempt to flush stdout_writer and log any errors encountered + if let Err(e) = stdout_writer.flush() { + error!("{e}"); + } else if self + .task_access + .can_cache(&self.task_hash, &self.task_id_for_display) + .unwrap_or(true) + { + if let Err(e) = self.task_cache.save_outputs(task_duration, telemetry).await { + error!("error caching output: {e}"); + return Err(e.into()); + } else { + // If no errors, update hash tracker with expanded outputs + self.hash_tracker.insert_expanded_outputs( + self.task_id.clone(), + self.task_cache.expanded_outputs().to_vec(), + ); + } + } + + // Return success outcome + Ok(ExecOutcome::Success(SuccessOutcome::Run)) + } + ChildExit::Finished(Some(code)) => { + // If there was an error, flush the buffered output + if let Err(e) = stdout_writer.flush() { + error!("error flushing logs: {e}"); + } + if let Err(e) = self.task_cache.on_error(&mut prefixed_ui) { + error!("error reading logs: {e}"); + } + let error = TaskErrorCause::from_execution(process.label().to_string(), code); + let message = error.to_string(); + if self.continue_on_error { + prefixed_ui.warn("command finished with error, but continuing..."); + } else { + prefixed_ui.error(&format!("command finished with error: {error}")); + } + self.errors + .lock() + .expect("lock poisoned") + .push(TaskError::new(self.task_id_for_display.clone(), error)); + Ok(ExecOutcome::Task { + exit_code: Some(code), + message, + }) + } + // The child exited in a way where we can't figure out how it finished so we assume it + // failed. + ChildExit::Finished(None) | ChildExit::Failed => Err(InternalError::UnknownChildExit), + // Something else killed the child + ChildExit::KilledExternal => Err(InternalError::ExternalKill), + // The child was killed by turbo indicating a shutdown + ChildExit::Killed => Ok(ExecOutcome::Shutdown), + } + } + + fn spaces_task_info( + &self, + task_id: TaskId<'static>, + execution_summary: TaskExecutionSummary, + logs: Vec, + ) -> SpacesTaskInformation { + let dependencies = self.engine.dependencies(&task_id); + let dependents = self.engine.dependents(&task_id); + let cache_status = self.hash_tracker.cache_status(&task_id); + SpacesTaskInformation { + task_id, + execution_summary, + logs, + hash: self.task_hash.clone(), + cache_status, + dependencies, + dependents, + } + } +} + +pub struct DryRunExecContext { + task_id: TaskId<'static>, + task_cache: TaskCache, + hash_tracker: TaskHashTracker, +} + +#[derive(Debug, thiserror::Error)] +pub enum InternalError { + #[error(transparent)] + Io(#[from] std::io::Error), + #[error("unable to determine why task exited")] + UnknownChildExit, + #[error("unable to find package manager binary: {0}")] + Which(#[from] which::Error), + #[error("external process killed a task")] + ExternalKill, + #[error("error writing logs: {0}")] + Logs(#[from] crate::run::CacheError), +} +impl DryRunExecContext { + pub async fn execute_dry_run(&self, tracker: TaskTracker<()>) -> Result<(), InternalError> { + // may also need to do framework & command stuff? + if let Ok(Some(status)) = self.task_cache.exists().await { + self.hash_tracker + .insert_cache_status(self.task_id.clone(), status); + } + tracker.dry_run().await; + Ok(()) + } +} diff --git a/crates/turborepo-lib/src/task_graph/visitor/mod.rs b/crates/turborepo-lib/src/task_graph/visitor/mod.rs new file mode 100644 index 0000000000000..0d8db7fa3cc55 --- /dev/null +++ b/crates/turborepo-lib/src/task_graph/visitor/mod.rs @@ -0,0 +1,526 @@ +mod command; +mod error; +mod exec; +mod output; + +use std::{ + borrow::Cow, + collections::HashSet, + io::Write, + sync::{Arc, Mutex, OnceLock}, +}; + +use console::{Style, StyledObject}; +use error::{TaskError, TaskWarning}; +use exec::ExecContextFactory; +use futures::{stream::FuturesUnordered, StreamExt}; +use itertools::Itertools; +use miette::{Diagnostic, NamedSource, SourceSpan}; +use output::{StdWriter, TaskOutput}; +use regex::Regex; +use tokio::sync::mpsc; +use tracing::{debug, error, warn, Span}; +use turbopath::{AbsoluteSystemPath, AnchoredSystemPath}; +use turborepo_ci::{Vendor, VendorBehavior}; +use turborepo_env::{platform::PlatformEnv, EnvironmentVariableMap}; +use turborepo_repository::package_graph::{PackageGraph, PackageName, ROOT_PKG_NAME}; +use turborepo_telemetry::events::{ + generic::GenericEventBuilder, task::PackageTaskEventBuilder, EventBuilder, TrackedErrors, +}; +use turborepo_ui::{ + sender::UISender, ColorConfig, ColorSelector, OutputClient, OutputSink, PrefixedUI, +}; + +use crate::{ + cli::EnvMode, + engine::{Engine, ExecutionOptions}, + opts::RunOpts, + process::ProcessManager, + run::{ + global_hash::GlobalHashableInputs, + summary::{self, GlobalHashSummary, RunTracker}, + task_access::TaskAccess, + task_id::TaskId, + RunCache, + }, + task_hash::{self, PackageInputsHashes, TaskHashTrackerState, TaskHasher}, +}; + +// This holds the whole world +pub struct Visitor<'a> { + color_cache: ColorSelector, + dry: bool, + global_env: EnvironmentVariableMap, + global_env_mode: EnvMode, + manager: ProcessManager, + run_opts: &'a RunOpts, + package_graph: Arc, + repo_root: &'a AbsoluteSystemPath, + run_cache: Arc, + run_tracker: RunTracker, + task_access: &'a TaskAccess, + sink: OutputSink, + task_hasher: TaskHasher<'a>, + color_config: ColorConfig, + is_watch: bool, + ui_sender: Option, + warnings: Arc>>, +} + +#[derive(Debug, thiserror::Error, Diagnostic)] +pub enum Error { + #[error("cannot find package {package_name} for task {task_id}")] + MissingPackage { + package_name: PackageName, + task_id: TaskId<'static>, + }, + #[error( + "root task {task_name} ({command}) looks like it invokes turbo and might cause a loop" + )] + RecursiveTurbo { + task_name: String, + command: String, + #[label("task found here")] + span: Option, + #[source_code] + text: NamedSource, + }, + #[error("Could not find definition for task")] + MissingDefinition, + #[error("error while executing engine: {0}")] + Engine(#[from] crate::engine::ExecuteError), + #[error(transparent)] + TaskHash(#[from] task_hash::Error), + #[error(transparent)] + RunSummary(#[from] summary::Error), + #[error("internal errors encountered: {0}")] + InternalErrors(String), + #[error("unable to find package manager binary: {0}")] + Which(#[from] which::Error), +} + +impl<'a> Visitor<'a> { + // Disabling this lint until we stop adding state to the visitor. + // Once we have the full picture we will go about grouping these pieces of data + // together + #[allow(clippy::too_many_arguments)] + pub async fn new( + package_graph: Arc, + run_cache: Arc, + run_tracker: RunTracker, + task_access: &'a TaskAccess, + run_opts: &'a RunOpts, + package_inputs_hashes: PackageInputsHashes, + env_at_execution_start: &'a EnvironmentVariableMap, + global_hash: &'a str, + color_config: ColorConfig, + manager: ProcessManager, + repo_root: &'a AbsoluteSystemPath, + global_env: EnvironmentVariableMap, + ui_sender: Option, + is_watch: bool, + ) -> Self { + let task_hasher = TaskHasher::new( + package_inputs_hashes, + run_opts, + env_at_execution_start, + global_hash, + ); + + let sink = Self::sink(run_opts); + let color_cache = ColorSelector::default(); + // Set up correct size for underlying pty + + if let Some(app) = ui_sender.as_ref() { + if let Some(pane_size) = app.pane_size().await { + manager.set_pty_size(pane_size.rows, pane_size.cols); + } + } + + Self { + color_cache, + dry: false, + global_env_mode: run_opts.env_mode, + manager, + run_opts, + package_graph, + repo_root, + run_cache, + run_tracker, + task_access, + sink, + task_hasher, + color_config, + global_env, + ui_sender, + is_watch, + warnings: Default::default(), + } + } + + #[tracing::instrument(skip_all)] + pub async fn visit( + &self, + engine: Arc, + telemetry: &GenericEventBuilder, + ) -> Result, Error> { + for task in engine.tasks().sorted() { + self.color_cache.color_for_key(&task.to_string()); + } + + let concurrency = self.run_opts.concurrency as usize; + let (node_sender, mut node_stream) = mpsc::channel(concurrency); + + let engine_handle = { + let engine = engine.clone(); + tokio::spawn(engine.execute(ExecutionOptions::new(false, concurrency), node_sender)) + }; + let mut tasks = FuturesUnordered::new(); + let errors = Arc::new(Mutex::new(Vec::new())); + let span = Span::current(); + + let factory = ExecContextFactory::new(self, errors.clone(), self.manager.clone(), &engine)?; + + while let Some(message) = node_stream.recv().await { + let span = tracing::debug_span!(parent: &span, "queue_task", task = %message.info); + let _enter = span.enter(); + let crate::engine::Message { info, callback } = message; + let package_name = PackageName::from(info.package()); + + let workspace_info = + self.package_graph + .package_info(&package_name) + .ok_or_else(|| Error::MissingPackage { + package_name: package_name.clone(), + task_id: info.clone(), + })?; + + let package_task_event = + PackageTaskEventBuilder::new(info.package(), info.task()).with_parent(telemetry); + let command = workspace_info.package_json.scripts.get(info.task()); + + match command { + Some(cmd) if info.package() == ROOT_PKG_NAME && turbo_regex().is_match(cmd) => { + package_task_event.track_error(TrackedErrors::RecursiveError); + let (span, text) = cmd.span_and_text("package.json"); + return Err(Error::RecursiveTurbo { + task_name: info.to_string(), + command: cmd.to_string(), + span, + text, + }); + } + _ => (), + } + + let task_definition = engine + .task_definition(&info) + .ok_or(Error::MissingDefinition)?; + + let task_env_mode = task_definition.env_mode.unwrap_or(self.global_env_mode); + package_task_event.track_env_mode(&task_env_mode.to_string()); + + let dependency_set = engine.dependencies(&info).ok_or(Error::MissingDefinition)?; + + let task_hash_telemetry = package_task_event.child(); + let task_hash = self.task_hasher.calculate_task_hash( + &info, + task_definition, + task_env_mode, + workspace_info, + dependency_set, + task_hash_telemetry, + )?; + + debug!("task {} hash is {}", info, task_hash); + // We do this calculation earlier than we do in Go due to the `task_hasher` + // being !Send. In the future we can look at doing this right before + // task execution instead. + let execution_env = + self.task_hasher + .env(&info, task_env_mode, task_definition, &self.global_env)?; + + let task_cache = self.run_cache.task_cache( + task_definition, + workspace_info, + info.clone(), + &task_hash, + ); + + // Drop to avoid holding the span across an await + drop(_enter); + + // here is where we do the logic split + match self.dry { + true => { + let dry_run_exec_context = + factory.dry_run_exec_context(info.clone(), task_cache); + let tracker = self.run_tracker.track_task(info.into_owned()); + tasks.push(tokio::spawn(async move { + dry_run_exec_context.execute_dry_run(tracker).await + })); + } + false => { + let takes_input = task_definition.interactive || task_definition.persistent; + let Some(mut exec_context) = factory.exec_context( + info.clone(), + task_hash, + task_cache, + execution_env, + takes_input, + self.task_access.clone(), + )? + else { + // TODO(gsoltis): if/when we fix https://github.com/vercel/turborepo/issues/937 + // the following block should never get hit. In the meantime, keep it after + // hashing so that downstream tasks can count on the hash existing + // + // bail if the script doesn't exist or is empty + continue; + }; + + let vendor_behavior = + Vendor::infer().and_then(|vendor| vendor.behavior.as_ref()); + + let output_client = if let Some(handle) = &self.ui_sender { + TaskOutput::UI(handle.task(info.to_string())) + } else { + TaskOutput::Direct(self.output_client(&info, vendor_behavior)) + }; + + let tracker = self.run_tracker.track_task(info.clone().into_owned()); + let spaces_client = self.run_tracker.spaces_task_client(); + let parent_span = Span::current(); + let execution_telemetry = package_task_event.child(); + + tasks.push(tokio::spawn(async move { + exec_context + .execute( + parent_span.id(), + tracker, + output_client, + callback, + spaces_client, + &execution_telemetry, + ) + .await + })); + } + } + } + + // Wait for the engine task to finish and for all of our tasks to finish + engine_handle.await.expect("engine execution panicked")?; + // This will poll the futures until they are all completed + let mut internal_errors = Vec::new(); + while let Some(result) = tasks.next().await { + if let Err(e) = result.unwrap_or_else(|e| panic!("task executor panicked: {e}")) { + internal_errors.push(e); + } + } + drop(factory); + + if !self.is_watch { + if let Some(handle) = &self.ui_sender { + handle.stop().await; + } + } + + if !internal_errors.is_empty() { + return Err(Error::InternalErrors( + internal_errors.into_iter().map(|e| e.to_string()).join(","), + )); + } + + // Write out the traced-config.json file if we have one + self.task_access.save().await; + + let errors = Arc::into_inner(errors) + .expect("only one strong reference to errors should remain") + .into_inner() + .expect("mutex poisoned"); + + Ok(errors) + } + + /// Finishes visiting the tasks, creates the run summary, and either + /// prints, saves, or sends it to spaces. + + #[allow(clippy::too_many_arguments)] + #[tracing::instrument(skip( + self, + packages, + global_hash_inputs, + engine, + env_at_execution_start + ))] + pub(crate) async fn finish( + self, + exit_code: i32, + packages: &HashSet, + global_hash_inputs: GlobalHashableInputs<'_>, + engine: &Engine, + env_at_execution_start: &EnvironmentVariableMap, + pkg_inference_root: Option<&AnchoredSystemPath>, + ) -> Result<(), Error> { + let Self { + package_graph, + color_config: ui, + run_opts, + repo_root, + global_env_mode, + task_hasher, + is_watch, + .. + } = self; + + let global_hash_summary = GlobalHashSummary::try_from(global_hash_inputs)?; + + // output any warnings that we collected while running tasks + if let Ok(warnings) = self.warnings.lock() { + if !warnings.is_empty() { + eprintln!(); + warn!("finished with warnings"); + eprintln!(); + + PlatformEnv::output_header(global_env_mode == EnvMode::Strict, self.color_config); + + for warning in warnings.iter() { + PlatformEnv::output_for_task( + warning.missing_platform_env().to_owned(), + warning.task_id(), + self.color_config, + ) + } + } + } + + Ok(self + .run_tracker + .finish( + exit_code, + &package_graph, + ui, + repo_root, + pkg_inference_root, + run_opts, + packages, + global_hash_summary, + global_env_mode, + engine, + task_hasher.task_hash_tracker(), + env_at_execution_start, + is_watch, + ) + .await?) + } + + fn sink(run_opts: &RunOpts) -> OutputSink { + let (out, err) = if run_opts.should_redirect_stderr_to_stdout() { + (std::io::stdout().into(), std::io::stdout().into()) + } else { + (std::io::stdout().into(), std::io::stderr().into()) + }; + OutputSink::new(out, err) + } + + fn output_client( + &self, + task_id: &TaskId, + vendor_behavior: Option<&VendorBehavior>, + ) -> OutputClient { + let behavior = match self.run_opts.log_order { + crate::opts::ResolvedLogOrder::Stream if self.run_tracker.spaces_enabled() => { + turborepo_ui::OutputClientBehavior::InMemoryBuffer + } + crate::opts::ResolvedLogOrder::Stream => { + turborepo_ui::OutputClientBehavior::Passthrough + } + crate::opts::ResolvedLogOrder::Grouped => turborepo_ui::OutputClientBehavior::Grouped, + }; + + let mut logger = self.sink.logger(behavior); + if let Some(vendor_behavior) = vendor_behavior { + let group_name = if self.run_opts.single_package { + task_id.task().to_string() + } else { + format!("{}:{}", task_id.package(), task_id.task()) + }; + + let header_factory = (vendor_behavior.group_prefix)(group_name.to_owned()); + let footer_factory = (vendor_behavior.group_suffix)(group_name.to_owned()); + + logger.with_header_footer(Some(header_factory), Some(footer_factory)); + + let (error_header, error_footer) = ( + vendor_behavior + .error_group_prefix + .map(|f| f(group_name.to_owned())), + vendor_behavior + .error_group_suffix + .map(|f| f(group_name.to_owned())), + ); + logger.with_error_header_footer(error_header, error_footer); + } + logger + } + + fn prefix<'b>(&self, task_id: &'b TaskId) -> Cow<'b, str> { + match self.run_opts.log_prefix { + crate::opts::ResolvedLogPrefix::Task if self.run_opts.single_package => { + task_id.task().into() + } + crate::opts::ResolvedLogPrefix::Task => { + format!("{}:{}", task_id.package(), task_id.task()).into() + } + crate::opts::ResolvedLogPrefix::None => "".into(), + } + } + + // Task ID as displayed in error messages + fn display_task_id(&self, task_id: &TaskId) -> String { + match self.run_opts.single_package { + true => task_id.task().to_string(), + false => task_id.to_string(), + } + } + + fn prefixed_ui( + color_config: ColorConfig, + is_github_actions: bool, + stdout: W, + stderr: W, + prefix: StyledObject, + ) -> PrefixedUI { + let mut prefixed_ui = PrefixedUI::new(color_config, stdout, stderr) + .with_output_prefix(prefix.clone()) + // TODO: we can probably come up with a more ergonomic way to achieve this + .with_error_prefix( + Style::new().apply_to(format!("{}ERROR: ", color_config.apply(prefix.clone()))), + ) + .with_warn_prefix(prefix); + if is_github_actions { + prefixed_ui = prefixed_ui + .with_error_prefix(Style::new().apply_to("[ERROR] ".to_string())) + .with_warn_prefix(Style::new().apply_to("[WARN] ".to_string())); + } + prefixed_ui + } + + /// Only used for the hashing comparison between Rust and Go. After port, + /// should delete + pub fn into_task_hash_tracker(self) -> TaskHashTrackerState { + self.task_hasher.into_task_hash_tracker_state() + } + + pub fn dry_run(&mut self) { + self.dry = true; + // No need to start a UI on dry run + self.ui_sender = None; + } +} + +fn turbo_regex() -> &'static Regex { + static RE: OnceLock = OnceLock::new(); + RE.get_or_init(|| Regex::new(r"(?:^|\s)turbo(?:$|\s)").unwrap()) +} diff --git a/crates/turborepo-lib/src/task_graph/visitor/output.rs b/crates/turborepo-lib/src/task_graph/visitor/output.rs new file mode 100644 index 0000000000000..958b94efa3667 --- /dev/null +++ b/crates/turborepo-lib/src/task_graph/visitor/output.rs @@ -0,0 +1,146 @@ +use std::io::Write; + +use either::Either; +use turbopath::AbsoluteSystemPath; +use turborepo_ui::{ + sender::TaskSender, tui::event::CacheResult, OutputClient, OutputWriter, PrefixedUI, +}; + +use crate::run::CacheOutput; + +/// Small wrapper over our two output types that defines a shared interface for +/// interacting with them. +pub enum TaskOutput { + Direct(OutputClient), + UI(TaskSender), +} + +/// Struct for displaying information about task +impl TaskOutput { + pub fn finish(self, use_error: bool, is_cache_hit: bool) -> std::io::Result>> { + match self { + TaskOutput::Direct(client) => client.finish(use_error), + TaskOutput::UI(client) if use_error => Ok(Some(client.failed())), + TaskOutput::UI(client) => Ok(Some(client.succeeded(is_cache_hit))), + } + } + + pub fn stdout(&self) -> Either, TaskSender> { + match self { + TaskOutput::Direct(client) => Either::Left(client.stdout()), + TaskOutput::UI(client) => Either::Right(client.clone()), + } + } + + pub fn stderr(&self) -> Either, TaskSender> { + match self { + TaskOutput::Direct(client) => Either::Left(client.stderr()), + TaskOutput::UI(client) => Either::Right(client.clone()), + } + } + + pub fn task_logs(&self) -> Either, TaskSender> { + match self { + TaskOutput::Direct(client) => Either::Left(client.stdout()), + TaskOutput::UI(client) => Either::Right(client.clone()), + } + } +} + +/// Struct for displaying information about task's cache +pub enum TaskCacheOutput { + Direct(PrefixedUI), + UI(TaskSender), +} + +impl TaskCacheOutput { + pub fn task_writer(&mut self) -> Either, TaskSender> { + match self { + TaskCacheOutput::Direct(prefixed) => Either::Left(prefixed.output_prefixed_writer()), + TaskCacheOutput::UI(task) => Either::Right(task.clone()), + } + } + + pub fn warn(&mut self, message: impl std::fmt::Display) { + match self { + TaskCacheOutput::Direct(prefixed) => prefixed.warn(message), + TaskCacheOutput::UI(task) => { + let _ = write!(task, "\r\n{message}\r\n"); + } + } + } +} + +impl CacheOutput for TaskCacheOutput { + fn status(&mut self, message: &str, result: CacheResult) { + match self { + TaskCacheOutput::Direct(direct) => direct.output(message), + TaskCacheOutput::UI(task) => task.status(message, result), + } + } + + fn error(&mut self, message: &str) { + match self { + TaskCacheOutput::Direct(prefixed) => prefixed.error(message), + TaskCacheOutput::UI(task) => { + let _ = write!(task, "{message}\r\n"); + } + } + } + + fn replay_logs(&mut self, log_file: &AbsoluteSystemPath) -> Result<(), turborepo_ui::Error> { + match self { + TaskCacheOutput::Direct(direct) => { + let writer = direct.output_prefixed_writer(); + turborepo_ui::replay_logs(writer, log_file) + } + TaskCacheOutput::UI(task) => turborepo_ui::replay_logs(task, log_file), + } + } +} + +// A tiny enum that allows us to use the same type for stdout and stderr without +// the use of Box +pub enum StdWriter { + Out(std::io::Stdout), + Err(std::io::Stderr), + Null(std::io::Sink), +} + +impl StdWriter { + fn writer(&mut self) -> &mut dyn std::io::Write { + match self { + StdWriter::Out(out) => out, + StdWriter::Err(err) => err, + StdWriter::Null(null) => null, + } + } +} + +impl From for StdWriter { + fn from(value: std::io::Stdout) -> Self { + Self::Out(value) + } +} + +impl From for StdWriter { + fn from(value: std::io::Stderr) -> Self { + Self::Err(value) + } +} + +impl From for StdWriter { + fn from(value: std::io::Sink) -> Self { + Self::Null(value) + } +} + +impl std::io::Write for StdWriter { + fn write(&mut self, buf: &[u8]) -> std::io::Result { + self.writer().write(buf) + } + + fn flush(&mut self) -> std::io::Result<()> { + self.writer().flush() + } +} From b8a54d6e6ccac0fd670e4e6ad058ca8c36fcf34c Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Wed, 23 Oct 2024 14:08:57 -0400 Subject: [PATCH 110/218] fix docs link checker (#9311) --- .github/workflows/docs.yml | 10 +- docs/package.json | 24 +- docs/repo-docs/guides/tools/typescript.mdx | 10 +- docs/src/github.ts | 126 ---- docs/src/markdown.ts | 248 +++++++ docs/src/validate-docs-links.ts | 367 ++-------- docs/types.d.ts | 2 - pnpm-lock.yaml | 772 ++++++++++++--------- 8 files changed, 736 insertions(+), 823 deletions(-) delete mode 100644 docs/src/github.ts create mode 100644 docs/src/markdown.ts delete mode 100644 docs/types.d.ts diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 73c74fa917de3..c920db365822d 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -14,12 +14,14 @@ jobs: validate-docs-links: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - name: Checkout + uses: actions/checkout@v4 - - name: "Setup Node" - uses: ./.github/actions/setup-node + - uses: ./.github/actions/setup-node + with: + node-version: 20 - - name: "Run link checker" + - name: Run link checker run: cd docs && pnpm run check-links env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/package.json b/docs/package.json index 87d663c202714..28b7a4811d976 100644 --- a/docs/package.json +++ b/docs/package.json @@ -9,21 +9,17 @@ "check-links": "tsx src/validate-docs-links.ts" }, "devDependencies": { - "@types/github-slugger": "^1.3.0", - "@types/node": "^22.1.0", - "@vercel/ncc": "0.34.0", - "tsx": "^4.7.2", - "typescript": "5.1.6" + "@types/node": "22.7.8", + "tsx": "4.19.1", + "typescript": "5.3.3" }, "dependencies": { - "@actions/core": "^1.10.0", - "@actions/github": "^5.1.1", - "github-slugger": "1.2.0", - "gray-matter": "4.0.2", - "rehype-raw": "4.0.1", - "remark-parse": "7.0.1", - "remark-rehype": "5.0.0", - "unified": "8.4.1", - "unist-util-visit": "2.0.0" + "github-slugger": "2.0.0", + "gray-matter": "4.0.3", + "rehype-raw": "7.0.0", + "remark-parse": "11.0.0", + "remark-rehype": "11.1.1", + "unified": "11.0.5", + "unist-util-visit": "5.0.0" } } diff --git a/docs/repo-docs/guides/tools/typescript.mdx b/docs/repo-docs/guides/tools/typescript.mdx index d0f6257b25763..4a5f8dbae5dc3 100644 --- a/docs/repo-docs/guides/tools/typescript.mdx +++ b/docs/repo-docs/guides/tools/typescript.mdx @@ -292,15 +292,15 @@ In [Compiled packages](https://turbo.build/repo/docs/core-concepts/internal-pack
+ ```tsx title="./packages/ui/button.tsx" -import { MY_STRING } from "#utils.js" // Uses .js extension // [!code highlight] +import { MY_STRING } from "#utils.js"; // Uses .js extension // [!code highlight] export const Button = () => { - return ( - - ) -} + return ; +}; ``` +
diff --git a/docs/src/github.ts b/docs/src/github.ts deleted file mode 100644 index 480281a63018c..0000000000000 --- a/docs/src/github.ts +++ /dev/null @@ -1,126 +0,0 @@ -import * as github from "@actions/github"; -import { setFailed } from "@actions/core"; - -interface Comment { - id: number; -} - -export { setFailed }; -export const COMMENT_TAG = ""; - -const { context, getOctokit } = github; -const octokit = getOctokit(process.env.GITHUB_TOKEN!); -const { owner, repo } = context.repo; -const pullRequest = context.payload.pull_request; -if (!pullRequest) { - console.log("Skipping since this is not a pull request"); - process.exit(0); -} -export const sha = pullRequest.head.sha; -const isFork = pullRequest.head.repo.fork; -const prNumber = pullRequest.number; - -export async function findBotComment(): Promise { - try { - const { data: comments } = await octokit.rest.issues.listComments({ - owner, - repo, - issue_number: prNumber, - }); - - return comments.find((c) => c.body?.includes(COMMENT_TAG)); - } catch (error) { - setFailed("Error finding bot comment: " + error); - return undefined; - } -} - -export async function updateComment( - comment: string, - botComment: Comment -): Promise { - try { - const { data } = await octokit.rest.issues.updateComment({ - owner, - repo, - comment_id: botComment.id, - body: comment, - }); - - return data.html_url; - } catch (error) { - setFailed("Error updating comment: " + error); - return ""; - } -} - -export async function createComment(comment: string): Promise { - if (isFork) { - setFailed( - "The action could not create a GitHub comment because it is initiated from a forked repo. View the action logs for a list of broken links." - ); - - return ""; - } else { - try { - const { data } = await octokit.rest.issues.createComment({ - owner, - repo, - issue_number: prNumber, - body: comment, - }); - - return data.html_url; - } catch (error) { - setFailed("Error creating comment: " + error); - return ""; - } - } -} - -export async function updateCheckStatus( - errorsExist: boolean, - commentUrl?: string -): Promise { - const checkName = "Docs Link Validation"; - - let summary, text; - - if (errorsExist) { - summary = - "This PR introduces broken links to the docs. Click details for a list."; - text = `[See the comment for details](${commentUrl})`; - } else { - summary = "No broken links found"; - } - - const checkParams = { - owner, - repo, - name: checkName, - head_sha: sha, - status: "completed", - conclusion: errorsExist ? "failure" : "success", - output: { - title: checkName, - summary: summary, - text: text, - }, - }; - - if (isFork) { - if (errorsExist) { - setFailed( - "This PR introduces broken links to the docs. The action could not create a GitHub check because it is initiated from a forked repo." - ); - } else { - console.log("Link validation was successful."); - } - } else { - try { - await octokit.rest.checks.create(checkParams); - } catch (error) { - setFailed("Failed to create check: " + error); - } - } -} diff --git a/docs/src/markdown.ts b/docs/src/markdown.ts new file mode 100644 index 0000000000000..13f4043480427 --- /dev/null +++ b/docs/src/markdown.ts @@ -0,0 +1,248 @@ +import fs from "fs/promises"; +import { unified } from "unified"; +import remarkParse from "remark-parse"; +import remarkRehype from "remark-rehype"; +import rehypeRaw from "rehype-raw"; +import { visit } from "unist-util-visit"; +import GitHubSlugger from "github-slugger"; +import matter from "gray-matter"; + +export interface Document { + /** the Markdown file itself, without from-matter */ + content: string; + + /** the path to this markdown file */ + path: string; + + /** the headings found in this markdown file */ + headings: string[]; + + frontMatter: { + title: string; + description: string; + }; +} + +export type ErrorType = "link" | "hash" | "source" | "related"; + +export type LinkError = { + type: ErrorType; + href: string; + doc: Document; +}; + +/** where to look for docs (.mdx files) */ +const DOCS_PATH = "."; +const EXCLUDED_HASHES = ["top"]; + +/** These paths exist, just not in our Markdown files */ +const EXCLUDED_PATHS = ["/api/remote-cache-spec", "/repo"]; + +const slugger = new GitHubSlugger(); + +/** Collect the paths of all .mdx files we care about */ +const getAllMdxFilePaths = async (): Promise => { + const allFiles = await fs.readdir(DOCS_PATH, { recursive: true }); + return allFiles.filter((file) => file.endsWith(".mdx")); +}; + +// Returns the slugs of all headings in a tree +const getHeadingsFromMarkdownTree = ( + tree: ReturnType +): string[] => { + const headings: string[] = []; + slugger.reset(); + + visit(tree, "heading", (node) => { + let headingText = ""; + // Account for headings with inline code blocks by concatenating the + // text values of all children of a heading node. + visit(node, (innerNode: any) => { + if (innerNode.value) { + headingText += innerNode.value; + } + }); + const slugified = slugger.slug(headingText); + headings.push(slugified); + }); + + return headings; +}; + +/** Create a processor to parse MDX content */ +const markdownProcessor = unified() + .use(remarkParse) + .use(remarkRehype) + .use(rehypeRaw) + .use(function compiler() { + // A compiler is required, and we only need the AST, so we can + // just return it. + // @ts-ignore + this.Compiler = function treeCompiler(tree) { + return tree; + }; + }); + +const filePathToUrl = (filePath: string): string => + filePath + .replace("repo-docs", "/repo/docs") + .replace("pack-docs", "/pack/docs") + .replace(".mdx", ""); + +const validateFrontmatter = (path: string, data: Record) => { + if (!data.title) { + throw new Error(`Document is missing a title: ${path}`); + } + if (!data.description) { + throw new Error(`Document is missing a description: ${path}`); + } + return data as { + title: string; + description: string; + }; +}; + +/** + * Create a map of documents with their paths as keys and + * document content and metadata as values + * The key varies between doc pages and error pages + * error pages: `/docs/messages/example` + * doc pages: `api/example` + */ +const prepareDocumentMapEntry = async ( + path: string +): Promise<[string, Document]> => { + try { + const mdxContent = await fs.readFile(path, "utf8"); + const { content, data } = matter(mdxContent); + const frontMatter = validateFrontmatter(path, data); + + const tree = markdownProcessor.parse(content); + const headings = getHeadingsFromMarkdownTree(tree); + const normalizedUrlPath = filePathToUrl(path); + + return [normalizedUrlPath, { content, path, headings, frontMatter }]; + } catch (error) { + throw new Error(`Error preparing document map for file ${path}: ${error}`); + } +}; + +/** Checks if the links point to existing documents */ +const validateInternalLink = + (documentMap: Map) => (doc: Document, href: string) => { + // /docs/api/example#heading -> ["/docs/api/example", "heading""] + const [link, hash] = href.replace(DOCS_PATH, "").split("#", 2); + + if (EXCLUDED_PATHS.includes(link)) { + return []; + } + + let foundPage = documentMap.get(link); + + if (!foundPage) { + foundPage = documentMap.get(`${link}/index`); + } + + let errors: LinkError[] = []; + + if (!foundPage) { + errors.push({ + type: "link", + href, + doc, + }); + } else if (hash && !EXCLUDED_HASHES.includes(hash)) { + // Check if the hash link points to an existing section within the document + const hashFound = foundPage.headings.includes(hash); + + if (!hashFound) { + errors.push({ + type: "hash", + href, + doc, + }); + } + } + + return errors; + }; + +/** Checks if the hash links point to existing sections within the same document */ +const validateHashLink = (doc: Document, href: string) => { + const hashLink = href.replace("#", ""); + if (EXCLUDED_HASHES.includes(hashLink)) { + return []; + } + + if (doc.headings.includes(hashLink)) { + return []; + } + + let linkError: LinkError = { + type: "hash", + href, + doc, + }; + const { content, ...docWithoutContent } = doc; + return [linkError]; +}; + +/** Traverse the document tree and validate links */ +const traverseTreeAndValidateLinks = ( + documentMap: Map, + tree: unknown, + doc: Document +): LinkError[] => { + let errors: LinkError[] = []; + + try { + visit(tree, (node: any) => { + if (node.type === "element" && node.tagName === "a") { + const href = node.properties.href; + + if (!href) { + return; + } + + if (href.startsWith("/")) { + errors.push(...validateInternalLink(documentMap)(doc, href)); + } else if (href.startsWith("#")) { + errors.push(...validateHashLink(doc, href)); + } + } + }); + } catch (error) { + throw new Error(`Error traversing tree: ${error}`); + } + + return errors; +}; + +/** + * this function will look through all Mdx files and compile a list of `LinkError`s + */ +export const collectLinkErrors = async (): Promise => { + const allMdxFilePaths = await getAllMdxFilePaths(); + + const documentMap = new Map( + await Promise.all(allMdxFilePaths.map(prepareDocumentMapEntry)) + ); + + const reportsWithErrors = allMdxFilePaths.map(async (filePath) => { + const doc = documentMap.get(filePathToUrl(filePath)); + if (!doc) { + return null; + } + const vFile = await markdownProcessor.process(doc.content); + const tree = vFile.result; + const linkErrors = traverseTreeAndValidateLinks(documentMap, tree, doc); + if (linkErrors.length > 0) { + return linkErrors; + } + return null; + }); + + const results = await Promise.all(reportsWithErrors); + const linkErrors = results.filter((report) => report !== null).flat(); + return linkErrors; +}; diff --git a/docs/src/validate-docs-links.ts b/docs/src/validate-docs-links.ts index 788fe32c54961..380dce1bad713 100644 --- a/docs/src/validate-docs-links.ts +++ b/docs/src/validate-docs-links.ts @@ -1,333 +1,46 @@ -import fs from "fs/promises"; -import path from "path"; -import unified from "unified"; -import markdown from "remark-parse"; -import remarkToRehype from "remark-rehype"; -import raw from "rehype-raw"; -import visit from "unist-util-visit"; -import GitHubSlugger from "github-slugger"; -import matter from "gray-matter"; -import { - COMMENT_TAG, - createComment, - findBotComment, - updateCheckStatus, - updateComment, - setFailed, - sha, -} from "./github"; - -/** - * This script validates internal links in /docs and /errors including internal, - * hash, source and related links. It does not validate external links. - * 1. Collects all .mdx files in /docs. - * 2. For each file, it extracts the content, metadata, and heading slugs. - * 3. It creates a document map to efficiently lookup documents by path. - * 4. It then traverses each document modified in the PR and... - * - Checks if each internal link (links starting with "/docs/") points - * to an existing document - * - Validates hash links (links starting with "#") against the list of - * headings in the current document. - * - Checks the source and related links found in the metadata of each - * document. - * 5. Any broken links discovered during these checks are categorized and a - * comment is added to the PR. - */ - -interface Document { - body: string; - path: string; - headings: string[]; - source?: string; - related?: { - links: string[]; - }; -} - -interface Errors { - doc: Document; - link: string[]; - hash: string[]; - source: string[]; - related: string[]; -} - -type ErrorType = Exclude; - -const DOCS_PATH = "."; -const EXCLUDED_HASHES = ["top"]; - -const slugger = new GitHubSlugger(); - -// Collect the paths of all .mdx files in the passed directories -async function getAllMdxFilePaths( - directoriesToScan: string[], - fileList: string[] = [] -): Promise { - for (const dir of directoriesToScan) { - const dirPath = path.join(".", dir); - const files = await fs.readdir(dirPath); - for (const file of files) { - const filePath = path.join(dirPath, file); - const stats = await fs.stat(filePath); - if (stats.isDirectory()) { - fileList = await getAllMdxFilePaths([filePath], fileList); - } else if (path.extname(file) === ".mdx") { - fileList.push(filePath); - } - } - } - - return fileList; -} - -// Returns the slugs of all headings in a tree -function getHeadingsFromMarkdownTree( - tree: ReturnType -): string[] { - const headings: string[] = []; - slugger.reset(); - - visit(tree, "heading", (node) => { - let headingText = ""; - // Account for headings with inline code blocks by concatenating the - // text values of all children of a heading node. - visit(node, (innerNode: any) => { - if (innerNode.value) { - headingText += innerNode.value; - } - }); - headings.push(slugger.slug(headingText)); - }); - - return headings; -} - -// Create a processor to parse MDX content -const markdownProcessor = unified() - .use(markdown) - .use(remarkToRehype, { allowDangerousHTML: true }) - .use(raw) - .use(function compiler() { - // A compiler is required, and we only need the AST, so we can - // just return it. - // @ts-ignore - this.Compiler = function treeCompiler(tree) { - return tree; - }; - }); - -function normalizePath(filePath: string): string { - const normalized = filePath - .replace("repo-docs", "/repo/docs") - .replace("pack-docs", "/pack/docs") - .replace(".mdx", ""); - - return normalized; -} - -// use Map for faster lookup -let documentMap: Map; - -// Create a map of documents with their paths as keys and -// document content and metadata as values -// The key varies between doc pages and error pages -// error pages: `/docs/messages/example` -// doc pages: `api/example` -async function prepareDocumentMapEntry( - filePath: string -): Promise<[string, Document]> { - try { - const mdxContent = await fs.readFile(filePath, "utf8"); - const { content, data } = matter(mdxContent); - const tree = markdownProcessor.parse(content); - const headings = getHeadingsFromMarkdownTree(tree); - const normalizedUrlPath = normalizePath(filePath); - - return [ - normalizedUrlPath, - { body: content, path: filePath, headings, ...data }, - ]; - } catch (error) { - setFailed(`Error preparing document map for file ${filePath}: ${error}`); - return ["", {} as Document]; - } -} - -// Checks if the links point to existing documents -function validateInternalLink(errors: Errors, href: string): void { - // /docs/api/example#heading -> ["api/example", "heading""] - const [link, hash] = href.replace(DOCS_PATH, "").split("#", 2); - - // These paths exist, just not in our Markdown files - const ignorePaths = ["/api/remote-cache-spec", "/repo"]; - if (ignorePaths.includes(link)) { +import { collectLinkErrors } from "./markdown"; + +/* + This script validates internal links in /docs and /errors including internal, + hash, source and related links. It does not validate external links. + 1. Collects all .mdx files in /docs. + 2. For each file, it extracts the content, metadata, and heading slugs. + 3. It creates a document map to efficiently lookup documents by path. + 4. It then traverses each document modified in the PR and... + - Checks if each internal link (links starting with "/docs/") points + to an existing document + - Validates hash links (links starting with "#") against the list of + headings in the current document. + - Checks the source and related links found in the metadata of each + document. + 5. Any broken links discovered during these checks are categorized and a + comment is added to the PR. +*/ + +/** Main function that triggers link validation across .mdx files */ +const validateAllInternalLinks = async (): Promise => { + let errorReports = await collectLinkErrors(); + if (errorReports.length === 0) { + console.log("Link validation was successful."); return; } - let foundPage = documentMap.get(link); - - if (!foundPage) { - foundPage = documentMap.get(`${link}/index`); - } - - if (!foundPage) { - errors.link.push(href); - } else if (hash && !EXCLUDED_HASHES.includes(hash)) { - // Check if the hash link points to an existing section within the document - const hashFound = foundPage.headings.includes(hash); - - if (!hashFound) { - errors.hash.push(href); - } - } -} - -// Checks if the hash links point to existing sections within the same document -function validateHashLink(errors: Errors, href: string, doc: Document): void { - const hashLink = href.replace("#", ""); - - if (!EXCLUDED_HASHES.includes(hashLink) && !doc.headings.includes(hashLink)) { - errors.hash.push(href); - } -} - -// Traverse the document tree and validate links -function traverseTreeAndValidateLinks(tree: any, doc: Document): Errors { - const errors: Errors = { - doc, - link: [], - hash: [], - source: [], - related: [], - }; - - try { - visit(tree, (node: any) => { - if (node.type === "element" && node.tagName === "a") { - const href = node.properties.href; - - if (!href) return; - - if (href.startsWith("/")) { - validateInternalLink(errors, href); - } else if (href.startsWith("#")) { - validateHashLink(errors, href, doc); - } - } - }); - } catch (error) { - setFailed("Error traversing tree: " + error); - } - - return errors; -} - -const formatTableRow = ( - link: string, - errorType: ErrorType, - rawDocPath: string -) => { - const docPath = rawDocPath.replace("../../../", ""); - - return `| ${link} | ${errorType} | [/${docPath}](https://github.com/vercel/turborepo/blob/${sha}/${docPath}) | \n`; + const reportRows = errorReports + .map((linkError) => ({ + link: linkError.href, + type: linkError.type, + path: linkError.doc.path, + })) + .sort((a, b) => a.type.localeCompare(b.type)); + + const plural = errorReports.length > 1; + console.log( + `Found ${plural ? "these" : "a"} broken link${ + plural ? "s" : "" + } in the docs:` + ); + console.table(reportRows); + process.exit(1); }; -// Main function that triggers link validation across .mdx files -async function validateAllInternalLinks(): Promise { - try { - const allMdxFilePaths = await getAllMdxFilePaths([DOCS_PATH]); - - documentMap = new Map( - await Promise.all(allMdxFilePaths.map(prepareDocumentMapEntry)) - ); - - const docProcessingPromises = allMdxFilePaths.map(async (filePath) => { - const doc = documentMap.get(normalizePath(filePath)); - if (doc) { - const tree = (await markdownProcessor.process(doc.body)).contents; - return traverseTreeAndValidateLinks(tree, doc); - } else { - return { - doc: {} as Document, - link: [], - hash: [], - source: [], - related: [], - } as Errors; - } - }); - - const allErrors = await Promise.all(docProcessingPromises); - - let errorsExist = false; - - let errorRows: string[] = []; - - const errorTypes: ErrorType[] = ["link", "hash", "source", "related"]; - allErrors.forEach((errors) => { - const { - doc: { path: docPath }, - } = errors; - - errorTypes.forEach((errorType) => { - if (errors[errorType].length > 0) { - errorsExist = true; - errors[errorType].forEach((link) => { - errorRows.push(formatTableRow(link, errorType, docPath)); - }); - } - }); - }); - - const errorComment = [ - "Hi there :wave:\n\nIt looks like this PR introduces broken links to the docs, please take a moment to fix them before merging:\n\n| Broken link | Type | File | \n| ----------- | ----------- | ----------- | \n", - ...errorRows, - "\nThank you :pray:", - ].join(""); - - let commentUrl; - let botComment; - let comment; - - botComment = await findBotComment(); - - if (errorsExist) { - comment = `${COMMENT_TAG}\n${errorComment}`; - if (botComment) { - commentUrl = await updateComment(comment, botComment); - } else { - commentUrl = await createComment(comment); - } - - const errorTableData = allErrors.flatMap((errors) => { - const { doc } = errors; - - return errorTypes.flatMap((errorType) => - errors[errorType].map((link) => ({ - docPath: doc.path, - errorType, - link, - })) - ); - }); - - console.log("This PR introduces broken links to the docs:"); - console.table(errorTableData, ["link", "type", "docPath"]); - process.exit(1); - } else if (botComment) { - const comment = `${COMMENT_TAG}\nAll broken links are now fixed, thank you!`; - commentUrl = await updateComment(comment, botComment); - } - - try { - await updateCheckStatus(errorsExist, commentUrl); - } catch (error) { - setFailed("Failed to create GitHub check: " + error); - } - } catch (error) { - setFailed("Error validating internal links: " + error); - } -} - validateAllInternalLinks(); diff --git a/docs/types.d.ts b/docs/types.d.ts deleted file mode 100644 index 0d78462e62f01..0000000000000 --- a/docs/types.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -declare module "remark-rehype"; -declare module "rehype-raw"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 87d0714c5a9bb..ea2b5fcefa3b8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,49 +53,37 @@ importers: docs: dependencies: - '@actions/core': - specifier: ^1.10.0 - version: 1.10.1 - '@actions/github': - specifier: ^5.1.1 - version: 5.1.1 github-slugger: - specifier: 1.2.0 - version: 1.2.0 + specifier: 2.0.0 + version: 2.0.0 gray-matter: - specifier: 4.0.2 - version: 4.0.2 + specifier: 4.0.3 + version: 4.0.3 rehype-raw: - specifier: 4.0.1 - version: 4.0.1 + specifier: 7.0.0 + version: 7.0.0 remark-parse: - specifier: 7.0.1 - version: 7.0.1 + specifier: 11.0.0 + version: 11.0.0 remark-rehype: - specifier: 5.0.0 - version: 5.0.0 + specifier: 11.1.1 + version: 11.1.1 unified: - specifier: 8.4.1 - version: 8.4.1 + specifier: 11.0.5 + version: 11.0.5 unist-util-visit: - specifier: 2.0.0 - version: 2.0.0 + specifier: 5.0.0 + version: 5.0.0 devDependencies: - '@types/github-slugger': - specifier: ^1.3.0 - version: 1.3.0 '@types/node': - specifier: ^22.1.0 - version: 22.1.0 - '@vercel/ncc': - specifier: 0.34.0 - version: 0.34.0 + specifier: 22.7.8 + version: 22.7.8 tsx: - specifier: ^4.7.2 - version: 4.7.2 + specifier: 4.19.1 + version: 4.19.1 typescript: - specifier: 5.1.6 - version: 5.1.6 + specifier: 5.3.3 + version: 5.3.3 examples: {} @@ -1017,7 +1005,7 @@ packages: /@actions/core@1.10.1: resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} dependencies: - '@actions/http-client': 2.2.0 + '@actions/http-client': 2.1.1 uuid: 8.3.2 dev: false @@ -1044,6 +1032,12 @@ packages: tunnel: 0.0.6 dev: false + /@actions/http-client@2.1.1: + resolution: {integrity: sha512-qhrkRMB40bbbLo7gF+0vu+X+UawOvQQqNAA/5Unx774RS8poaOhThDOG6BGmxvAnxhQnDp2BG/ZUm65xZILTpw==} + dependencies: + tunnel: 0.0.6 + dev: false + /@actions/http-client@2.2.0: resolution: {integrity: sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==} dependencies: @@ -2886,6 +2880,12 @@ packages: '@types/node': 20.11.30 '@types/responselike': 1.0.0 + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + dependencies: + '@types/ms': 0.7.34 + dev: false + /@types/diff@5.0.2: resolution: {integrity: sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg==} dev: true @@ -2927,10 +2927,6 @@ packages: resolution: {integrity: sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q==} dev: false - /@types/github-slugger@1.3.0: - resolution: {integrity: sha512-J/rMZa7RqiH/rT29TEVZO4nBoDP9XJOjnbbIofg7GQKs4JIduEO3WLpte+6WeUz/TcrXKlY+bM7FYrp8yFB+3g==} - dev: true - /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: @@ -2949,6 +2945,12 @@ packages: '@types/tinycolor2': 1.4.3 dev: true + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + dependencies: + '@types/unist': 3.0.3 + dev: false + /@types/http-cache-semantics@4.0.1: resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==} @@ -3027,9 +3029,19 @@ packages: '@types/node': 20.11.30 dev: true + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} + dependencies: + '@types/unist': 3.0.3 + dev: false + /@types/minimatch@5.1.1: resolution: {integrity: sha512-v55NF6Dz0wrj14Rn8iEABTWrhYRmgkJYuokduunSiq++t3hZ9VZ6dvcDt+850Pm5sGJZk8RaHzkFCXPxVINZ+g==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} + dev: false + /@types/ndjson@2.0.2: resolution: {integrity: sha512-bvLIjknQTfXdWoJ2iljOpZXNB14d8VOH6NMXAlDle9T8jdpMsKqQs4M5+F7NnlU8WMPErtuGnJsLfERO8W9Oow==} dependencies: @@ -3066,10 +3078,10 @@ packages: resolution: {integrity: sha512-dP7f3LdZIysZnmvP3ANJYTSwg+wLLl8p7RqniVlV7j+oXSXAbt9h0WIBFmJy5inWZoX9wZN6eXx+YXd9Rh3RBA==} dev: true - /@types/node@22.1.0: - resolution: {integrity: sha512-AOmuRF0R2/5j1knA3c6G3HOk523Ga+l+ZXltX8SF1+5oqcXijjfTd8fY3XRZqSihEu9XhtQnKYLmkFaoxgsJHw==} + /@types/node@22.7.8: + resolution: {integrity: sha512-a922jJy31vqR5sk+kAdIENJjHblqcZ4RmERviFsER4WJcEONqxKcjNOlk0q7OUfrF5sddT+vng070cdfMlrPLg==} dependencies: - undici-types: 6.13.0 + undici-types: 6.19.8 dev: true /@types/normalize-package-data@2.4.1: @@ -3139,8 +3151,8 @@ packages: /@types/tinycolor2@1.4.3: resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==} - /@types/unist@2.0.10: - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} dev: false /@types/uuid@9.0.0: @@ -3361,7 +3373,6 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true /@vercel/blob@0.22.1: resolution: {integrity: sha512-LtHmiYAdJhiSAfBP+5hHXtVyqZUND2G+ild/XVY0SOiB46ab7VUrQctwUMGcVx+yZyXZ2lXPT1HvRJtXFnKvHA==} @@ -3373,11 +3384,6 @@ packages: undici: 5.28.3 dev: false - /@vercel/ncc@0.34.0: - resolution: {integrity: sha512-G9h5ZLBJ/V57Ou9vz5hI8pda/YQX5HQszCs3AmIus3XzsmRn/0Ptic5otD3xVST8QLKk7AMk7AqpsyQGN7MZ9A==} - hasBin: true - dev: true - /@vercel/ncc@0.36.0: resolution: {integrity: sha512-/ZTUJ/ZkRt694k7KJNimgmHjtQcRuVwsST2Z6XfYveQIuBbHR+EqkTc1jfgPkQmMyk/vtpxo3nVxe8CNuau86A==} hasBin: true @@ -3839,8 +3845,8 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) dev: true - /bail@1.0.5: - resolution: {integrity: sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==} + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} dev: false /balanced-match@1.0.2: @@ -4109,10 +4115,6 @@ packages: upper-case-first: 2.0.2 dev: true - /ccount@1.1.0: - resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==} - dev: false - /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -4185,16 +4187,8 @@ packages: engines: {node: '>=10'} dev: true - /character-entities-legacy@1.1.4: - resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - dev: false - - /character-entities@1.2.4: - resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} - dev: false - - /character-reference-invalid@1.1.4: - resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} dev: false /chardet@0.7.0: @@ -4315,10 +4309,6 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /collapse-white-space@1.0.6: - resolution: {integrity: sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==} - dev: false - /collect-v8-coverage@1.0.1: resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} dev: true @@ -4373,8 +4363,8 @@ packages: dependencies: delayed-stream: 1.0.0 - /comma-separated-tokens@1.0.8: - resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==} + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} dev: false /commander@10.0.0: @@ -4694,6 +4684,12 @@ packages: resolution: {integrity: sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==} dev: true + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} + dependencies: + character-entities: 2.0.2 + dev: false + /decode-uri-component@0.2.2: resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} engines: {node: '>=0.10'} @@ -4848,13 +4844,6 @@ packages: /dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - dev: true - - /detab@2.0.4: - resolution: {integrity: sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==} - dependencies: - repeat-string: 1.6.1 - dev: false /detect-file@1.0.0: resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==} @@ -4881,6 +4870,12 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: true + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + dependencies: + dequal: 2.0.3 + dev: false + /diff-sequences@27.5.1: resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} @@ -4956,10 +4951,6 @@ packages: engines: {node: '>=10'} dev: true - /emoji-regex@6.1.1: - resolution: {integrity: sha512-WfVwM9e+M9B/4Qjh9SRnPX2A74Tom3WlVfWF9QWJ8f2BPa1u+/q4aEp1tizZ3vBKAZTg7B6yxn3t9iMjT+dv4w==} - dev: false - /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4980,6 +4971,11 @@ packages: tapable: 2.2.1 dev: true + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -6554,10 +6550,8 @@ packages: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true - /github-slugger@1.2.0: - resolution: {integrity: sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==} - dependencies: - emoji-regex: 6.1.1 + /github-slugger@2.0.0: + resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} dev: false /glob-parent@5.1.2: @@ -6728,8 +6722,8 @@ packages: /graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - /gray-matter@4.0.2: - resolution: {integrity: sha512-7hB/+LxrOjq/dd8APlK0r24uL/67w7SkYnfwhNFwg/VDIGWGmduTDYf3WNstLW2fbbmRwrDGCVSJ2isuf2+4Hw==} + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} dependencies: js-yaml: 3.14.1 @@ -6822,61 +6816,63 @@ packages: dependencies: function-bind: 1.1.1 - /hast-to-hyperscript@7.0.4: - resolution: {integrity: sha512-vmwriQ2H0RPS9ho4Kkbf3n3lY436QKLq6VaGA1pzBh36hBi3tm1DO9bR+kaJIbpT10UqaANDkMjxvjVfr+cnOA==} + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: - comma-separated-tokens: 1.0.8 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 - style-to-object: 0.2.3 - unist-util-is: 3.0.0 - web-namespaces: 1.1.4 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + devlop: 1.1.0 + hastscript: 8.0.0 + property-information: 6.5.0 + vfile: 6.0.3 + vfile-location: 5.0.3 + web-namespaces: 2.0.1 dev: false - /hast-util-from-parse5@5.0.3: - resolution: {integrity: sha512-gOc8UB99F6eWVWFtM9jUikjN7QkWxB3nY0df5Z0Zq1/Nkwl5V4hAAsl0tmwlgWl/1shlTF8DnNYLO8X6wRV9pA==} + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: - ccount: 1.1.0 - hastscript: 5.1.2 - property-information: 5.6.0 - web-namespaces: 1.1.4 - xtend: 4.0.2 - dev: false - - /hast-util-parse-selector@2.2.5: - resolution: {integrity: sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==} + '@types/hast': 3.0.4 dev: false - /hast-util-raw@5.0.2: - resolution: {integrity: sha512-3ReYQcIHmzSgMq8UrDZHFL0oGlbuVGdLKs8s/Fe8BfHFAyZDrdv1fy/AGn+Fim8ZuvAHcJ61NQhVMtyfHviT/g==} + /hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} dependencies: - hast-util-from-parse5: 5.0.3 - hast-util-to-parse5: 5.1.2 - html-void-elements: 1.0.5 - parse5: 5.1.1 - unist-util-position: 3.1.0 - web-namespaces: 1.1.4 - xtend: 4.0.2 - zwitch: 1.0.5 + '@types/hast': 3.0.4 + '@types/unist': 3.0.3 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.2.0 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 + web-namespaces: 2.0.1 + zwitch: 2.0.4 dev: false - /hast-util-to-parse5@5.1.2: - resolution: {integrity: sha512-ZgYLJu9lYknMfsBY0rBV4TJn2xiwF1fXFFjbP6EE7S0s5mS8LIKBVWzhA1MeIs1SWW6GnnE4In6c3kPb+CWhog==} + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} dependencies: - hast-to-hyperscript: 7.0.4 - property-information: 5.6.0 - web-namespaces: 1.1.4 - xtend: 4.0.2 - zwitch: 1.0.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + devlop: 1.1.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 + web-namespaces: 2.0.1 + zwitch: 2.0.4 dev: false - /hastscript@5.1.2: - resolution: {integrity: sha512-WlztFuK+Lrvi3EggsqOkQ52rKbxkXL3RwB6t5lwoa8QLMemoWfBuL43eDrwOamJyR7uKQKdmKYaBH1NZBiIRrQ==} + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: - comma-separated-tokens: 1.0.8 - hast-util-parse-selector: 2.2.5 - property-information: 5.6.0 - space-separated-tokens: 1.1.5 + '@types/hast': 3.0.4 + comma-separated-tokens: 2.0.3 + hast-util-parse-selector: 4.0.0 + property-information: 6.5.0 + space-separated-tokens: 2.0.2 dev: false /header-case@1.0.1: @@ -6915,8 +6911,8 @@ packages: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true - /html-void-elements@1.0.5: - resolution: {integrity: sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==} + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} dev: false /http-cache-semantics@4.1.1: @@ -7060,10 +7056,6 @@ packages: /ini@1.3.8: resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - /inline-style-parser@0.1.1: - resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - dev: false - /inquirer-file-tree-selection-prompt@1.0.19: resolution: {integrity: sha512-aL01njANm5bJhQtUNBKWurniroUJ9I+rnJ20DBG3xY9gtKBxgpRFSRs0lzjx42iCRJ4J083IZ2SrN4t8ejPlEQ==} dependencies: @@ -7178,17 +7170,6 @@ packages: kind-of: 6.0.3 dev: false - /is-alphabetical@1.0.4: - resolution: {integrity: sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==} - dev: false - - /is-alphanumerical@1.0.4: - resolution: {integrity: sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==} - dependencies: - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - dev: false - /is-array-buffer@3.0.2: resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} dependencies: @@ -7288,10 +7269,6 @@ packages: has-tostringtag: 1.0.0 dev: true - /is-decimal@1.0.4: - resolution: {integrity: sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==} - dev: false - /is-descriptor@0.1.6: resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} engines: {node: '>=0.10.0'} @@ -7380,10 +7357,6 @@ packages: dependencies: is-extglob: 2.1.1 - /is-hexadecimal@1.0.4: - resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} - dev: false - /is-inside-container@1.0.0: resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} engines: {node: '>=14.16'} @@ -7447,15 +7420,9 @@ packages: resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} engines: {node: '>=8'} - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} - dev: false - /is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} - dev: true /is-plain-object@2.0.4: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} @@ -7575,18 +7542,10 @@ packages: get-intrinsic: 1.2.1 dev: true - /is-whitespace-character@1.0.4: - resolution: {integrity: sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==} - dev: false - /is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} - /is-word-character@1.0.4: - resolution: {integrity: sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==} - dev: false - /is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -8570,10 +8529,6 @@ packages: object-visit: 1.0.1 dev: false - /markdown-escapes@1.0.4: - resolution: {integrity: sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==} - dev: false - /maxstache-stream@1.0.4: resolution: {integrity: sha512-v8qlfPN0pSp7bdSoLo1NTjG43GXGqk5W2NWFnOCq2GlmFFqebGzPCjLKSbShuqIOVorOtZSAy7O/S1OCCRONUw==} dependencies: @@ -8587,30 +8542,43 @@ packages: resolution: {integrity: sha512-53ZBxHrZM+W//5AcRVewiLpDunHnucfdzZUGz54Fnvo4tE+J3p8EL66kBrs2UhBXvYKTWckWYYWBqJqoTcenqg==} dev: false - /mdast-util-definitions@1.2.5: - resolution: {integrity: sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==} - dependencies: - unist-util-visit: 1.4.1 + /mdast-util-from-markdown@2.0.1: + resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==} + dependencies: + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + mdast-util-to-string: 4.0.0 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + unist-util-stringify-position: 4.0.0 + transitivePeerDependencies: + - supports-color dev: false - /mdast-util-to-hast@6.0.2: - resolution: {integrity: sha512-GjcOimC9qHI0yNFAQdBesrZXzUkRdFleQlcoU8+TVNfDW6oLUazUx8MgUoTaUyCJzBOnE5AOgqhpURrSlf0QwQ==} + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} dependencies: - collapse-white-space: 1.0.6 - detab: 2.0.4 - mdast-util-definitions: 1.2.5 - mdurl: 1.0.1 - trim: 0.0.1 - trim-lines: 1.1.3 - unist-builder: 1.0.4 - unist-util-generated: 1.1.6 - unist-util-position: 3.1.0 - unist-util-visit: 1.4.1 - xtend: 4.0.2 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + '@ungap/structured-clone': 1.2.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.0 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.0.0 + vfile: 6.0.3 dev: false - /mdurl@1.0.1: - resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + dependencies: + '@types/mdast': 4.0.4 dev: false /merge-stream@2.0.0: @@ -8620,6 +8588,181 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} + dependencies: + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} + dependencies: + devlop: 1.1.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} + dependencies: + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} + dependencies: + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + dev: false + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + dev: false + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 + dev: false + + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} + dependencies: + devlop: 1.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} + dev: false + + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} + dev: false + + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.4 + decode-named-character-reference: 1.0.2 + devlop: 1.1.0 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + /micromatch@3.1.10: resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} engines: {node: '>=0.10.0'} @@ -9274,17 +9417,6 @@ packages: dependencies: callsites: 3.1.0 - /parse-entities@1.2.2: - resolution: {integrity: sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==} - dependencies: - character-entities: 1.2.4 - character-entities-legacy: 1.1.4 - character-reference-invalid: 1.1.4 - is-alphanumerical: 1.0.4 - is-decimal: 1.0.4 - is-hexadecimal: 1.0.4 - dev: false - /parse-filepath@1.0.2: resolution: {integrity: sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==} engines: {node: '>=0.8'} @@ -9309,14 +9441,16 @@ packages: engines: {node: '>=0.10.0'} dev: true - /parse5@5.1.1: - resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} - dev: false - /parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} dev: true + /parse5@7.2.0: + resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} + dependencies: + entities: 4.5.0 + dev: false + /pascal-case@2.0.1: resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} dependencies: @@ -9527,10 +9661,8 @@ packages: react-is: 16.13.1 dev: true - /property-information@5.6.0: - resolution: {integrity: sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==} - dependencies: - xtend: 4.0.2 + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} dev: false /proxy-agent@6.2.2: @@ -9750,36 +9882,33 @@ packages: jsesc: 0.5.0 dev: true - /rehype-raw@4.0.1: - resolution: {integrity: sha512-g74dPCUWeB9EBfTfGF3lGOHSnZwFwN1ssc3Je9OwQO9f8yTkkAIrMqUVxT34h8zpi4ICU051tTLBZbOrzRWpxg==} + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: - hast-util-raw: 5.0.2 + '@types/hast': 3.0.4 + hast-util-raw: 9.0.4 + vfile: 6.0.3 dev: false - /remark-parse@7.0.1: - resolution: {integrity: sha512-WOZLa545jYXtSy+txza6ACudKWByQac4S2DmGk+tAGO/3XnVTOxwyCIxB7nTcLlk8Aayhcuf3cV1WV6U6L7/DQ==} + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} dependencies: - collapse-white-space: 1.0.6 - is-alphabetical: 1.0.4 - is-decimal: 1.0.4 - is-whitespace-character: 1.0.4 - is-word-character: 1.0.4 - markdown-escapes: 1.0.4 - parse-entities: 1.2.2 - repeat-string: 1.6.1 - state-toggle: 1.0.3 - trim: 0.0.1 - trim-trailing-lines: 1.1.4 - unherit: 1.1.3 - unist-util-remove-position: 1.1.4 - vfile-location: 2.0.6 - xtend: 4.0.2 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.1 + micromark-util-types: 2.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - supports-color dev: false - /remark-rehype@5.0.0: - resolution: {integrity: sha512-tgo+AeOotuh9FnGMkEPbE6C3OfdARqqSxT0H/KNGAiTwJLiDoRSm6x/ytqPZTyYSiQ/exbi/kx7k6uUvqYL1wQ==} + /remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} dependencies: - mdast-util-to-hast: 6.0.2 + '@types/hast': 3.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 dev: false /repeat-element@1.1.4: @@ -10322,8 +10451,8 @@ packages: whatwg-url: 7.1.0 dev: true - /space-separated-tokens@1.1.5: - resolution: {integrity: sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==} + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} dev: false /spdx-correct@3.1.1: @@ -10377,10 +10506,6 @@ packages: escape-string-regexp: 2.0.0 dev: true - /state-toggle@1.0.3: - resolution: {integrity: sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==} - dev: false - /static-extend@0.1.2: resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} engines: {node: '>=0.10.0'} @@ -10526,12 +10651,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - /style-to-object@0.2.3: - resolution: {integrity: sha512-1d/k4EY2N7jVLOqf2j04dTc37TPOv/hHxZmvpg8Pdh8UYydxeu/C1W1U4vD8alzf5V2Gt7rLsmkr4dxAlDm9ng==} - dependencies: - inline-style-parser: 0.1.1 - dev: false - /sucrase@3.24.0: resolution: {integrity: sha512-SevqflhW356TKEyWjFHg2e5f3eH+5rzmsMJxrVMDvZIEHh/goYrpzDGA6APEj4ME9MdGm8oNgIzi1eF3c3dDQA==} engines: {node: '>=8'} @@ -10777,21 +10896,12 @@ packages: hasBin: true dev: true - /trim-lines@1.1.3: - resolution: {integrity: sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==} - dev: false - - /trim-trailing-lines@1.1.4: - resolution: {integrity: sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==} + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} dev: false - /trim@0.0.1: - resolution: {integrity: sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==} - deprecated: Use String.prototype.trim() instead - dev: false - - /trough@1.0.5: - resolution: {integrity: sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==} + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false /ts-api-utils@1.0.2(typescript@5.3.3): @@ -10927,7 +11037,7 @@ packages: normalize-path: 3.0.0 safe-stable-stringify: 2.4.3 tslib: 2.6.3 - typescript: 5.5.4 + typescript: 5.6.3 dev: true /ts-node@10.9.1(@types/node@18.17.4)(typescript@5.3.3): @@ -11107,6 +11217,17 @@ packages: fsevents: 2.3.3 dev: true + /tsx@4.19.1: + resolution: {integrity: sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==} + engines: {node: '>=18.0.0'} + hasBin: true + dependencies: + esbuild: 0.23.1 + get-tsconfig: 4.7.6 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /tsx@4.7.2: resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} engines: {node: '>=18.0.0'} @@ -11202,12 +11323,6 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@5.1.6: - resolution: {integrity: sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /typescript@5.2.2: resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} engines: {node: '>=14.17'} @@ -11219,8 +11334,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + /typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true dev: true @@ -11249,8 +11364,8 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /undici-types@6.13.0: - resolution: {integrity: sha512-xtFJHudx8S2DSoujjMd1WeWvn7KKWFRESZTMeL1RptAYERu29D6jphMjjY+vn96jvN3kVPDNxU/E13VTaXj6jg==} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} dev: true /undici@5.28.3: @@ -11260,22 +11375,16 @@ packages: '@fastify/busboy': 2.1.0 dev: false - /unherit@1.1.3: - resolution: {integrity: sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==} - dependencies: - inherits: 2.0.4 - xtend: 4.0.2 - dev: false - - /unified@8.4.1: - resolution: {integrity: sha512-YPj/uIIZSO7mMIZQj/5Z3hDl4lshWYRQGs5TgUCjHTVdklUWH+O94mK5Cy77SEcmEUwGhnUcudMuH/zIwporqw==} + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: - '@types/unist': 2.0.10 - bail: 1.0.5 + '@types/unist': 3.0.3 + bail: 2.0.2 + devlop: 1.1.0 extend: 3.0.2 - is-plain-obj: 2.1.0 - trough: 1.0.5 - vfile: 4.2.1 + is-plain-obj: 4.1.0 + trough: 2.2.0 + vfile: 6.0.3 dev: false /union-value@1.0.1: @@ -11288,65 +11397,37 @@ packages: set-value: 2.0.1 dev: false - /unist-builder@1.0.4: - resolution: {integrity: sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==} + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: - object-assign: 4.1.1 + '@types/unist': 3.0.3 dev: false - /unist-util-generated@1.1.6: - resolution: {integrity: sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==} - dev: false - - /unist-util-is@3.0.0: - resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==} - dev: false - - /unist-util-is@4.1.0: - resolution: {integrity: sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==} - dev: false - - /unist-util-position@3.1.0: - resolution: {integrity: sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==} - dev: false - - /unist-util-remove-position@1.1.4: - resolution: {integrity: sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==} + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: - unist-util-visit: 1.4.1 + '@types/unist': 3.0.3 dev: false - /unist-util-stringify-position@2.0.3: - resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: - '@types/unist': 2.0.10 + '@types/unist': 3.0.3 dev: false - /unist-util-visit-parents@2.1.2: - resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==} + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: - unist-util-is: 3.0.0 + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 dev: false - /unist-util-visit-parents@3.1.1: - resolution: {integrity: sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==} + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - dev: false - - /unist-util-visit@1.4.1: - resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==} - dependencies: - unist-util-visit-parents: 2.1.2 - dev: false - - /unist-util-visit@2.0.0: - resolution: {integrity: sha512-kiTpWKsF54u/78L/UU/i7lxrnqGiEWBgqCpaIZBYP0gwUC+Akq0Ajm4U8JiNIoQNfAioBdsyarnOcTEAb9mLeQ==} - dependencies: - '@types/unist': 2.0.10 - unist-util-is: 4.1.0 - unist-util-visit-parents: 3.1.1 + '@types/unist': 3.0.3 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 dev: false /universal-user-agent@6.0.0: @@ -11804,24 +11885,25 @@ packages: - encoding dev: false - /vfile-location@2.0.6: - resolution: {integrity: sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==} + /vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} + dependencies: + '@types/unist': 3.0.3 + vfile: 6.0.3 dev: false - /vfile-message@2.0.4: - resolution: {integrity: sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==} + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: - '@types/unist': 2.0.10 - unist-util-stringify-position: 2.0.3 + '@types/unist': 3.0.3 + unist-util-stringify-position: 4.0.0 dev: false - /vfile@4.2.1: - resolution: {integrity: sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==} + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} dependencies: - '@types/unist': 2.0.10 - is-buffer: 2.0.5 - unist-util-stringify-position: 2.0.3 - vfile-message: 2.0.4 + '@types/unist': 3.0.3 + vfile-message: 4.0.2 dev: false /vm2@3.9.19: @@ -11884,8 +11966,8 @@ packages: dependencies: defaults: 1.0.4 - /web-namespaces@1.1.4: - resolution: {integrity: sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==} + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} dev: false /webidl-conversions@3.0.1: @@ -12128,6 +12210,6 @@ packages: resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==} dev: false - /zwitch@1.0.5: - resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} dev: false From c7f37d1bc0d6fcf921799e0996d79e89bed64ea3 Mon Sep 17 00:00:00 2001 From: Tim Neutkens Date: Thu, 24 Oct 2024 14:49:26 +0200 Subject: [PATCH 111/218] Turbopack docs: Update mentions of --turbo and beta (#9327) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Updates the docs to take into account Next.js 15. ### Testing Instructions --- docs/pack-docs/benchmarks.mdx | 2 +- docs/pack-docs/core-concepts.mdx | 2 +- docs/pack-docs/index.mdx | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/pack-docs/benchmarks.mdx b/docs/pack-docs/benchmarks.mdx index 2a42e6642ddc6..55e517ac7fa48 100644 --- a/docs/pack-docs/benchmarks.mdx +++ b/docs/pack-docs/benchmarks.mdx @@ -7,5 +7,5 @@ import { Callout } from '#/components/callout'; Check back soon for benchmark results against real-world Next.js Applications - when `next dev --turbo` becomes stable. + when `next dev --turbopack` becomes stable. diff --git a/docs/pack-docs/core-concepts.mdx b/docs/pack-docs/core-concepts.mdx index 4f3cd94467ae5..68f04d3fcc21e 100644 --- a/docs/pack-docs/core-concepts.mdx +++ b/docs/pack-docs/core-concepts.mdx @@ -31,7 +31,7 @@ Now imagine this in a real bundler, with thousands of files to read and transfor ### The cache -The Turbo engine currently stores its cache in memory. This means the cache will last as long as the process running it - which works well for a dev server. When you run `next dev --turbo` in Next.js 13+, you’ll start a cache with the Turbo engine. When you cancel your dev server, the cache gets cleared. +The Turbo engine currently stores its cache in memory. This means the cache will last as long as the process running it - which works well for a dev server. When you run `next dev --turbopack` in Next.js 13+, you’ll start a cache with the Turbo engine. When you cancel your dev server, the cache gets cleared. In the future, we’re planning to persist this cache - either to the filesystem, or to a remote cache like Turborepo’s. This will mean that Turbopack could remember work done _across runs and machines._ diff --git a/docs/pack-docs/index.mdx b/docs/pack-docs/index.mdx index d2e91d3180c8f..70128e11d511f 100644 --- a/docs/pack-docs/index.mdx +++ b/docs/pack-docs/index.mdx @@ -13,7 +13,7 @@ The secret to Turbopack's performance is twofold: highly optimized machine code Our team has taken the lessons from 10 years of webpack, combined with the innovations in incremental computation from [Turborepo](/repo) and Google's Bazel, and created an architecture ready to support the coming decades of computing. - Turbopack is currently in beta in the Next.js development server. You can try out Turbopack today by adding the `--turbo` flag to your `next dev` command. + Turbopack is available for the Next.js development server. You can try out Turbopack today by adding the `--turbopack` flag to your `next dev` command. To report an issue, please use [the issue template in the Next.js repository](https://github.com/vercel/next.js/issues/new?assignees=&labels=template%3A+bug&projects=&template=1.bug_report.yml). We appreciate your feedback. @@ -23,7 +23,7 @@ Our team has taken the lessons from 10 years of webpack, combined with the innov ## Quickstart -As of today, Turbopack can be used in Next.js 14. In the future, we will be releasing a standalone CLI, plugin API, and support for other frameworks such as Svelte and Vue. For now, please follow these instructions to get started: +As of today, Turbopack can be used in Next.js 15. In the future, we will be releasing a standalone CLI, plugin API, and support for other frameworks such as Svelte and Vue. For now, please follow these instructions to get started: ### New Projects @@ -61,16 +61,16 @@ pnpm dev
-The Next.js 14 development server is now powered by Turbopack! Startup and updates should both be near-instant. The larger the application, the larger the improvement will be. +The Next.js development server is now powered by Turbopack! Startup and updates should both be near-instant. The larger the application, the larger the improvement will be. ### Existing Projects -Add `--turbo` to your `next dev` command: +Add `--turbopack` to your `next dev` command: ```json title="package.json" { "scripts": { - "dev": "next dev --turbo" + "dev": "next dev --turbopack" } } ``` From 00107c88c0ae8ec99d1b6a92e1c1e6c67e0c7140 Mon Sep 17 00:00:00 2001 From: Fionn Mac an Bhaird <33222605+FinnWard@users.noreply.github.com> Date: Thu, 24 Oct 2024 15:30:23 +0200 Subject: [PATCH 112/218] Typo in system-environment-variables docs (#9326) update missing hyphon for affected ### Description Typo in the docs: ![image](https://github.com/user-attachments/assets/aefd3212-a23b-454d-be8b-de2e7316bb61) ### Testing Instructions review current docs to see if hyphon is missing --- docs/repo-docs/reference/system-environment-variables.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/reference/system-environment-variables.mdx b/docs/repo-docs/reference/system-environment-variables.mdx index b0cd9c9069474..9032bfd473882 100644 --- a/docs/repo-docs/reference/system-environment-variables.mdx +++ b/docs/repo-docs/reference/system-environment-variables.mdx @@ -32,7 +32,7 @@ System environment variables are always overridden by flag values provided direc | `TURBO_REMOTE_ONLY` | Always ignore the local filesystem cache for all tasks. | | `TURBO_RUN_SUMMARY` | Generate a [Run Summary](/repo/docs/reference/run#--summarize) when you run tasks. | | `TURBO_SCM_BASE` | Base used by `--affected` when calculating what has changed from `base...head` | -| `TURBO_SCM_HEAD` | Head used by `-affected` when calculating what has changed from `base...head` | +| `TURBO_SCM_HEAD` | Head used by `--affected` when calculating what has changed from `base...head` | | `TURBO_TEAM` | The account name associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's slug. | | `TURBO_TEAMID` | The account identifier associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's ID. | | `TURBO_TELEMETRY_MESSAGE_DISABLED` | Disable the message notifying you that [Telemetry](/repo/docs/telemetry) is enabled. | From be0f18a8d3243553b34a24cec03ad08a6a8ead85 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Thu, 24 Oct 2024 10:27:40 -0400 Subject: [PATCH 113/218] upgrade TypeScript one minor to 5.4.5 from 5.3.3 (#9322) --- docs/package.json | 2 +- examples/basic/apps/docs/package.json | 2 +- examples/basic/apps/web/package.json | 2 +- examples/basic/package.json | 2 +- .../basic/packages/eslint-config/package.json | 2 +- examples/basic/packages/ui/package.json | 2 +- examples/basic/pnpm-lock.yaml | 190 +++--- examples/design-system/apps/docs/package.json | 2 +- .../design-system/packages/ui/package.json | 2 +- examples/design-system/pnpm-lock.yaml | 4 +- examples/install-all.ts | 46 ++ examples/kitchen-sink/apps/admin/package.json | 2 +- examples/kitchen-sink/apps/api/package.json | 2 +- examples/kitchen-sink/apps/blog/package.json | 2 +- .../kitchen-sink/apps/storefront/package.json | 2 +- .../kitchen-sink/packages/logger/package.json | 4 +- .../kitchen-sink/packages/ui/package.json | 2 +- examples/kitchen-sink/pnpm-lock.yaml | 248 ++++---- examples/non-monorepo/package-lock.json | 9 +- examples/non-monorepo/package.json | 2 +- examples/package.json | 8 +- examples/with-berry/apps/docs/package.json | 2 +- examples/with-berry/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-berry/packages/ui/package.json | 2 +- examples/with-berry/yarn.lock | 24 +- .../with-changesets/apps/docs/package.json | 2 +- .../packages/acme-core/package.json | 2 +- .../packages/acme-utils/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-changesets/pnpm-lock.yaml | 158 ++--- examples/with-docker/apps/api/package.json | 4 +- examples/with-docker/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- .../with-docker/packages/logger/package.json | 3 +- examples/with-docker/packages/ui/package.json | 2 +- examples/with-docker/yarn.lock | 39 +- examples/with-gatsby/apps/docs/package.json | 2 +- examples/with-gatsby/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-gatsby/packages/ui/package.json | 2 +- examples/with-gatsby/pnpm-lock.yaml | 223 +++---- examples/with-nestjs/apps/api/package.json | 2 +- examples/with-nestjs/apps/web/package.json | 2 +- .../with-nestjs/packages/api/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-nestjs/packages/ui/package.json | 2 +- examples/with-nestjs/pnpm-lock.yaml | 203 +++--- examples/with-npm/apps/docs/package.json | 2 +- examples/with-npm/apps/web/package.json | 2 +- examples/with-npm/package-lock.json | 16 +- .../packages/eslint-config/package.json | 2 +- examples/with-npm/packages/ui/package.json | 2 +- examples/with-prisma/apps/web/package.json | 2 +- examples/with-prisma/package.json | 2 +- .../packages/config-eslint/package.json | 2 +- .../packages/database/package.json | 4 +- examples/with-prisma/yarn.lock | 279 ++++----- .../apps/native/package.json | 2 +- .../apps/web/package.json | 2 +- .../packages/ui/package.json | 2 +- examples/with-react-native-web/yarn.lock | 2 +- examples/with-rollup/apps/web/package.json | 2 +- .../packages/config-eslint/package.json | 2 +- examples/with-rollup/packages/ui/package.json | 2 +- examples/with-rollup/pnpm-lock.yaml | 6 +- examples/with-svelte/apps/docs/package.json | 2 +- examples/with-svelte/apps/web/package.json | 2 +- examples/with-svelte/pnpm-lock.yaml | 74 +-- examples/with-tailwind/apps/docs/package.json | 2 +- examples/with-tailwind/apps/web/package.json | 2 +- .../with-tailwind/packages/ui/package.json | 2 +- examples/with-tailwind/pnpm-lock.yaml | 19 +- examples/with-typeorm/apps/docs/package.json | 2 +- examples/with-typeorm/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- .../packages/typeorm-service/package.json | 2 +- .../with-typeorm/packages/ui/package.json | 2 +- examples/with-typeorm/pnpm-lock.yaml | 164 ++--- examples/with-vite/apps/docs/package.json | 2 +- examples/with-vite/apps/web/package.json | 2 +- examples/with-vite/packages/ui/package.json | 2 +- examples/with-vite/pnpm-lock.yaml | 62 +- examples/with-vue-nuxt/apps/web/package.json | 2 +- .../eslint-config-custom/package.json | 2 +- examples/with-vue-nuxt/pnpm-lock.yaml | 174 +++--- examples/with-yarn/apps/docs/package.json | 2 +- examples/with-yarn/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-yarn/packages/ui/package.json | 2 +- examples/with-yarn/yarn.lock | 2 +- package.json | 2 +- packages/create-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-benchmark/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-gen/src/utils/plop.ts | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-repository/package.json | 2 +- packages/turbo-telemetry/package.json | 4 +- packages/turbo-test-utils/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-utils/package.json | 2 +- packages/turbo-utils/src/createProject.ts | 3 +- packages/turbo-workspaces/package.json | 2 +- pnpm-lock.yaml | 578 ++++-------------- 107 files changed, 1197 insertions(+), 1511 deletions(-) create mode 100644 examples/install-all.ts diff --git a/docs/package.json b/docs/package.json index 28b7a4811d976..77fd5960fcc58 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,7 +11,7 @@ "devDependencies": { "@types/node": "22.7.8", "tsx": "4.19.1", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "dependencies": { "github-slugger": "2.0.0", diff --git a/examples/basic/apps/docs/package.json b/examples/basic/apps/docs/package.json index 2b81242718012..3d111f7769650 100644 --- a/examples/basic/apps/docs/package.json +++ b/examples/basic/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.6", - "typescript": "^5" + "typescript": "5.4.5" } } diff --git a/examples/basic/apps/web/package.json b/examples/basic/apps/web/package.json index 4602ebcf2255c..e859e3b8b6420 100644 --- a/examples/basic/apps/web/package.json +++ b/examples/basic/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.6", - "typescript": "^5" + "typescript": "5.4.5" } } diff --git a/examples/basic/package.json b/examples/basic/package.json index e9fa9353bc171..41c811efeea23 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -10,7 +10,7 @@ "devDependencies": { "prettier": "^3.2.5", "turbo": "^2.0.7", - "typescript": "^5.4.5" + "typescript": "5.4.5" }, "packageManager": "pnpm@8.15.6", "engines": { diff --git a/examples/basic/packages/eslint-config/package.json b/examples/basic/packages/eslint-config/package.json index 2fa3c6d25bfba..173679acffc23 100644 --- a/examples/basic/packages/eslint-config/package.json +++ b/examples/basic/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/basic/packages/ui/package.json b/examples/basic/packages/ui/package.json index 680a1e70da4aa..9095356e579f3 100644 --- a/examples/basic/packages/ui/package.json +++ b/examples/basic/packages/ui/package.json @@ -20,7 +20,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/basic/pnpm-lock.yaml b/examples/basic/pnpm-lock.yaml index 1f269ebacb66d..b552c70adcb5c 100644 --- a/examples/basic/pnpm-lock.yaml +++ b/examples/basic/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^2.0.7 version: 2.1.2 typescript: - specifier: ^5.4.5 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 apps/docs: dependencies: @@ -53,10 +53,10 @@ importers: version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.6.2) + version: 14.2.6(eslint@8.57.1)(typescript@5.4.5) typescript: - specifier: ^5 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 apps/web: dependencies: @@ -93,22 +93,22 @@ importers: version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.6.2) + version: 14.2.6(eslint@8.57.1)(typescript@5.4.5) typescript: - specifier: ^5 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.2) + version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.6.2) + version: 7.18.0(eslint@8.57.1)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) @@ -119,8 +119,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages/typescript-config: {} @@ -138,7 +138,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.13.4(@types/node@20.16.5)(typescript@5.6.2) + version: 1.13.4(@types/node@20.16.5)(typescript@5.4.5) '@types/eslint': specifier: ^8.56.5 version: 8.56.12 @@ -155,8 +155,8 @@ importers: specifier: ^8.57.0 version: 8.57.1 typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -658,7 +658,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.6.2): + /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.4.5): resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true dependencies: @@ -670,7 +670,7 @@ packages: minimatch: 9.0.5 node-plop: 0.26.3 proxy-agent: 6.4.0 - ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.6.2) + ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.4.5) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -777,7 +777,7 @@ packages: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -789,10 +789,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 @@ -800,13 +800,13 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -818,22 +818,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -845,16 +845,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -866,16 +866,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -887,11 +887,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -928,7 +928,7 @@ packages: '@typescript-eslint/visitor-keys': 7.2.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -938,17 +938,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -958,12 +958,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -988,7 +988,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1003,13 +1003,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - typescript: 5.6.2 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1025,13 +1025,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5): resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1047,13 +1047,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.2.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1069,13 +1069,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1086,7 +1086,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -1095,7 +1095,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1106,7 +1106,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: @@ -1114,7 +1114,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1123,7 +1123,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -1166,7 +1166,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2): + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1187,25 +1187,25 @@ packages: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2060,7 +2060,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.6.2): + /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-z0URA5LO6y8lS/YLN0EDW/C4LEkDODjJzA37dvLVdzCPzuewjzTe1os5g3XclZAZrQ8X8hPaSMQ2JuVWwMmrTA==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -2071,7 +2071,7 @@ packages: dependencies: '@next/eslint-plugin-next': 14.2.6 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) @@ -2079,7 +2079,7 @@ packages: eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -2204,7 +2204,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) @@ -2233,7 +2233,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -2262,7 +2262,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -2293,7 +2293,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2329,7 +2329,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2354,7 +2354,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2367,8 +2367,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -2415,7 +2415,7 @@ packages: optional: true dependencies: eslint: 8.57.1 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): @@ -2454,13 +2454,13 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -4762,16 +4762,16 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.3.0(typescript@5.6.2): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.6.2 + typescript: 5.4.5 dev: true - /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.6.2): + /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -4797,7 +4797,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.6.2 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -4818,14 +4818,14 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsutils@3.21.0(typescript@5.6.2): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.6.2 + typescript: 5.4.5 dev: true /turbo-darwin-64@2.1.2: @@ -4959,8 +4959,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/design-system/apps/docs/package.json b/examples/design-system/apps/docs/package.json index 29272c072c856..c60a1ea3dad03 100644 --- a/examples/design-system/apps/docs/package.json +++ b/examples/design-system/apps/docs/package.json @@ -27,7 +27,7 @@ "serve": "^14.2.1", "storybook": "^8.2.6", "@repo/typescript-config": "workspace:*", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4" } } diff --git a/examples/design-system/packages/ui/package.json b/examples/design-system/packages/ui/package.json index 444bbb053ed8f..a8ee18420ced9 100644 --- a/examples/design-system/packages/ui/package.json +++ b/examples/design-system/packages/ui/package.json @@ -23,7 +23,7 @@ "eslint": "^8.57.0", "@repo/typescript-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/design-system/pnpm-lock.yaml b/examples/design-system/pnpm-lock.yaml index bf95155df3103..0590d126c63a3 100644 --- a/examples/design-system/pnpm-lock.yaml +++ b/examples/design-system/pnpm-lock.yaml @@ -64,7 +64,7 @@ importers: specifier: ^8.2.6 version: 8.2.6 typescript: - specifier: ^5.3.3 + specifier: 5.4.5 version: 5.4.5 vite: specifier: ^5.1.4 @@ -115,7 +115,7 @@ importers: specifier: ^8.0.2 version: 8.0.2(typescript@5.4.5) typescript: - specifier: ^5.3.3 + specifier: 5.4.5 version: 5.4.5 packages: diff --git a/examples/install-all.ts b/examples/install-all.ts new file mode 100644 index 0000000000000..6ba7b84fc04ae --- /dev/null +++ b/examples/install-all.ts @@ -0,0 +1,46 @@ +import { execSync } from "child_process"; +import { readdirSync, existsSync, readFileSync } from "fs"; +import * as path from "path"; + +/** Note: this script intentionally doesn't run during regular `pnpm install` from the project root because it's not something we expect to need to do all the time and integrating it into the project install flow is excessive */ + +const examplesDir = path.resolve(__dirname); + +/** Get all directories in the examples folder */ +const exampleDirs = readdirSync(examplesDir).filter((dir) => + existsSync(path.join(examplesDir, dir, "package.json")) +); + +exampleDirs.forEach((dir) => { + const packageJsonPath = path.join(examplesDir, dir, "package.json"); + + try { + const packageJson = JSON.parse(readFileSync(packageJsonPath, "utf-8")); + + // Check the packageManager field and run the correct install command + const packageManager: string = packageJson.packageManager; + if (!packageManager) { + throw new Error(`Missing packageManager field in ${packageJsonPath}`); + } + + let installCmd: string; + + if (packageManager.startsWith("pnpm")) { + installCmd = "pnpm install"; + } else if (packageManager.startsWith("yarn")) { + installCmd = "yarn install"; + } else if (packageManager.startsWith("npm")) { + installCmd = "npm install"; + } else { + throw new Error(`Unknown package manager "${packageManager}" in ${dir}`); + } + + console.log(`Running ${installCmd} in ${dir}...`); + execSync(installCmd, { + stdio: "inherit", + cwd: path.join(examplesDir, dir), + }); + } catch (error) { + throw new Error(`Failed to process ${packageJsonPath}: ${error}`); + } +}); diff --git a/examples/kitchen-sink/apps/admin/package.json b/examples/kitchen-sink/apps/admin/package.json index fc45b56eca2fa..d24b923d4414b 100644 --- a/examples/kitchen-sink/apps/admin/package.json +++ b/examples/kitchen-sink/apps/admin/package.json @@ -20,7 +20,7 @@ "@vitejs/plugin-react": "^4.2.1", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4" } } diff --git a/examples/kitchen-sink/apps/api/package.json b/examples/kitchen-sink/apps/api/package.json index 605a4c3521873..9dbe81050df59 100644 --- a/examples/kitchen-sink/apps/api/package.json +++ b/examples/kitchen-sink/apps/api/package.json @@ -35,6 +35,6 @@ "jest": "^29.7.0", "supertest": "^6.3.4", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/kitchen-sink/apps/blog/package.json b/examples/kitchen-sink/apps/blog/package.json index ebf8f0f2ea58e..ba692f1ec5f88 100644 --- a/examples/kitchen-sink/apps/blog/package.json +++ b/examples/kitchen-sink/apps/blog/package.json @@ -29,7 +29,7 @@ "@vercel/remix": "2.9.2-patch.2", "autoprefixer": "^10.4.19", "eslint": "^8.38.0", - "typescript": "^5.1.6", + "typescript": "5.4.5", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.2.1" }, diff --git a/examples/kitchen-sink/apps/storefront/package.json b/examples/kitchen-sink/apps/storefront/package.json index daae08eed3e20..a32f73fecbdc3 100644 --- a/examples/kitchen-sink/apps/storefront/package.json +++ b/examples/kitchen-sink/apps/storefront/package.json @@ -24,6 +24,6 @@ "@types/react-dom": "^18.2.19", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/kitchen-sink/packages/logger/package.json b/examples/kitchen-sink/packages/logger/package.json index 35375e5c7614c..c2f53f4b7ffae 100644 --- a/examples/kitchen-sink/packages/logger/package.json +++ b/examples/kitchen-sink/packages/logger/package.json @@ -25,6 +25,6 @@ "@types/node": "^20.11.24", "jest": "^29.7.0", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" } -} \ No newline at end of file +} diff --git a/examples/kitchen-sink/packages/ui/package.json b/examples/kitchen-sink/packages/ui/package.json index 9e7dc2dc67232..f205d17522fe3 100644 --- a/examples/kitchen-sink/packages/ui/package.json +++ b/examples/kitchen-sink/packages/ui/package.json @@ -42,6 +42,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/kitchen-sink/pnpm-lock.yaml b/examples/kitchen-sink/pnpm-lock.yaml index bf10e13cae602..cfec1dc36b181 100644 --- a/examples/kitchen-sink/pnpm-lock.yaml +++ b/examples/kitchen-sink/pnpm-lock.yaml @@ -43,8 +43,8 @@ importers: specifier: ^4.2.1 version: 4.3.1(vite@5.4.6) typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.4.6 @@ -105,22 +105,22 @@ importers: version: 6.3.4 tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.6.2) + version: 8.2.4(typescript@5.4.5) typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 apps/blog: dependencies: '@remix-run/node': specifier: ^2.9.2 - version: 2.12.0(typescript@5.6.2) + version: 2.12.0(typescript@5.4.5) '@remix-run/react': specifier: ^2.9.2 - version: 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2) + version: 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@remix-run/server-runtime': specifier: ^2.9.2 - version: 2.12.0(typescript@5.6.2) + version: 2.12.0(typescript@5.4.5) '@repo/ui': specifier: workspace:* version: link:../../packages/ui @@ -142,10 +142,10 @@ importers: devDependencies: '@remix-run/dev': specifier: ^2.9.2 - version: 2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6) + version: 2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6) '@remix-run/eslint-config': specifier: ^2.9.2 - version: 2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.6.2) + version: 2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.4.5) '@types/react': specifier: ^18.2.20 version: 18.3.6 @@ -154,10 +154,10 @@ importers: version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: ^6.7.4 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^6.7.4 - version: 6.21.0(eslint@8.57.1)(typescript@5.6.2) + version: 6.21.0(eslint@8.57.1)(typescript@5.4.5) autoprefixer: specifier: ^10.4.19 version: 10.4.20(postcss@8.4.47) @@ -165,14 +165,14 @@ importers: specifier: ^8.38.0 version: 8.57.1 typescript: - specifier: ^5.1.6 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.0 version: 5.4.6 vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.3.2(typescript@5.6.2)(vite@5.4.6) + version: 4.3.2(typescript@5.4.5)(vite@5.4.6) apps/storefront: dependencies: @@ -211,14 +211,14 @@ importers: specifier: ^18.2.19 version: 18.3.0 typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages/config-eslint: devDependencies: '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) eslint-config-turbo: specifier: ^2.0.0 version: 2.1.2(eslint@8.57.1) @@ -230,7 +230,7 @@ importers: version: 1.1.0 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.1)(typescript@5.6.2) + version: 0.8.0(eslint@8.57.1)(typescript@5.4.5) packages/config-typescript: {} @@ -238,7 +238,7 @@ importers: dependencies: ts-jest: specifier: ^29.1.2 - version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.6.2) + version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5) devDependencies: jest-environment-jsdom: specifier: ^29.7.0 @@ -266,10 +266,10 @@ importers: version: 29.7.0(@types/node@20.16.5) tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.6.2) + version: 8.2.4(typescript@5.4.5) typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages/ui: devDependencies: @@ -305,10 +305,10 @@ importers: version: 18.3.1(react@18.3.1) tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.6.2) + version: 8.2.4(typescript@5.4.5) typescript: - specifier: ^5.3.3 - version: 5.6.2 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -2004,7 +2004,7 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@remix-run/dev@2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6): + /@remix-run/dev@2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6): resolution: {integrity: sha512-/87YQORdlJg5YChd7nVBM/hRXHZA4GfUjhKbZyNrh03bazCQBF+6EsXbzpJ6cCFOpZgecsN0Xv648Qw0VuJjwg==} engines: {node: '>=18.0.0'} hasBin: true @@ -2034,10 +2034,10 @@ packages: '@babel/types': 7.25.6 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.12.0(typescript@5.6.2) - '@remix-run/react': 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2) + '@remix-run/node': 2.12.0(typescript@5.4.5) + '@remix-run/react': 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@remix-run/router': 1.19.2 - '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) '@types/mdx': 2.0.13 '@vanilla-extract/integration': 6.5.0 arg: 5.0.2 @@ -2077,7 +2077,7 @@ packages: set-cookie-parser: 2.7.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 - typescript: 5.6.2 + typescript: 5.4.5 vite: 5.4.6 ws: 7.5.10 transitivePeerDependencies: @@ -2096,7 +2096,7 @@ packages: - ts-node - utf-8-validate - /@remix-run/eslint-config@2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.6.2): + /@remix-run/eslint-config@2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-9MfVRuto/8EOYFf4zdg765x5TQ1l03CG7ZsLBLI22fn/OoJtOp5gGXeHaWMiFo+nLHlP27wEH2y9j7NshxdcMA==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2111,21 +2111,21 @@ packages: '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.4.5) eslint-plugin-jest-dom: 4.0.3(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-node: 11.1.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.1)(typescript@5.4.5) react: 18.3.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -2133,7 +2133,7 @@ packages: - supports-color dev: true - /@remix-run/node@2.12.0(typescript@5.6.2): + /@remix-run/node@2.12.0(typescript@5.4.5): resolution: {integrity: sha512-83Jaoc6gpSuD4e6rCk7N5ZHAXNmDw4fJC+kPeDCsd6+wLtTLSi7u9Zo9/Q7moLZ3oyH+aR+LGdkxLULYv+Q6Og==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2142,16 +2142,16 @@ packages: typescript: optional: true dependencies: - '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.1 source-map-support: 0.5.21 stream-slice: 0.1.2 - typescript: 5.6.2 + typescript: 5.4.5 undici: 6.19.8 - /@remix-run/react@2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.6.2): + /@remix-run/react@2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-Y109tI37Icr0BSU8sWSo8jDPkXaErJ/e1h0fkPvq6LZ0DrlcmHWBxzWJKID431I/KJvhVvBgVCuDamZTRVOZ5Q==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2163,19 +2163,19 @@ packages: optional: true dependencies: '@remix-run/router': 1.19.2 - '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.26.2(react@18.3.1) react-router-dom: 6.26.2(react-dom@18.3.1)(react@18.3.1) turbo-stream: 2.4.0 - typescript: 5.6.2 + typescript: 5.4.5 /@remix-run/router@1.19.2: resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} - /@remix-run/server-runtime@2.12.0(typescript@5.6.2): + /@remix-run/server-runtime@2.12.0(typescript@5.4.5): resolution: {integrity: sha512-o9ukOr3XKmyY8UufTrDdkgD3fiy+z+f4qEzvCQnvC0+EasCyN9hb1Vbui6Koo/5HKvahC4Ga8RcWyvhykKrG3g==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2191,7 +2191,7 @@ packages: set-cookie-parser: 2.7.0 source-map: 0.7.4 turbo-stream: 2.4.0 - typescript: 5.6.2 + typescript: 5.4.5 /@remix-run/web-blob@3.1.0: resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} @@ -2687,7 +2687,7 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2699,23 +2699,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - typescript: 5.6.2 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2727,10 +2727,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 @@ -2738,13 +2738,13 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2756,15 +2756,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2776,11 +2776,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2801,7 +2801,7 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2811,17 +2811,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.6.2) - typescript: 5.6.2 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2831,12 +2831,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2851,7 +2851,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2866,13 +2866,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.6.2) - typescript: 5.6.2 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.6.2): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2888,13 +2888,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) - typescript: 5.6.2 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2905,7 +2905,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -2914,7 +2914,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.6.2): + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2925,7 +2925,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: @@ -3034,9 +3034,9 @@ packages: react: '*' react-dom: '*' dependencies: - '@remix-run/dev': 2.12.0(@remix-run/react@2.12.0)(typescript@5.6.2)(vite@5.4.6) - '@remix-run/node': 2.12.0(typescript@5.6.2) - '@remix-run/server-runtime': 2.12.0(typescript@5.6.2) + '@remix-run/dev': 2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6) + '@remix-run/node': 2.12.0(typescript@5.4.5) + '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) '@vercel/static-config': 3.0.0 isbot: 3.8.0 react: 18.3.1 @@ -3052,7 +3052,7 @@ packages: ts-morph: 12.0.0 dev: false - /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.6.2): + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -3073,25 +3073,25 @@ packages: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -4670,7 +4670,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 @@ -4700,7 +4700,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -4730,7 +4730,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -4772,7 +4772,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4808,7 +4808,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4845,7 +4845,7 @@ packages: requireindex: 1.2.0 dev: true - /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4858,15 +4858,15 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4879,8 +4879,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.6.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -4974,7 +4974,7 @@ packages: optional: true dependencies: eslint: 8.57.1 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.6.2) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): @@ -5013,14 +5013,14 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -5029,26 +5029,26 @@ packages: - typescript dev: true - /eslint-plugin-testing-library@5.11.1(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-testing-library@5.11.1(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.4.5): resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -9722,13 +9722,13 @@ packages: /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - /ts-api-utils@1.3.0(typescript@5.6.2): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.6.2 + typescript: 5.4.5 dev: true /ts-dedent@2.2.0: @@ -9740,7 +9740,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.6.2): + /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -9774,7 +9774,7 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.6.2 + typescript: 5.4.5 yargs-parser: 21.1.1 dev: false @@ -9789,7 +9789,7 @@ packages: resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} dev: false - /tsconfck@3.1.3(typescript@5.6.2): + /tsconfck@3.1.3(typescript@5.4.5): resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} engines: {node: ^18 || >=20} hasBin: true @@ -9799,7 +9799,7 @@ packages: typescript: optional: true dependencies: - typescript: 5.6.2 + typescript: 5.4.5 dev: true /tsconfig-paths@3.15.0: @@ -9826,7 +9826,7 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsup@8.2.4(typescript@5.6.2): + /tsup@8.2.4(typescript@5.4.5): resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} engines: {node: '>=18'} hasBin: true @@ -9861,7 +9861,7 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 - typescript: 5.6.2 + typescript: 5.4.5 transitivePeerDependencies: - jiti - supports-color @@ -9869,14 +9869,14 @@ packages: - yaml dev: true - /tsutils@3.21.0(typescript@5.6.2): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.6.2 + typescript: 5.4.5 dev: true /turbo-darwin-64@2.1.2: @@ -10032,8 +10032,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -10366,7 +10366,7 @@ packages: - supports-color - terser - /vite-tsconfig-paths@4.3.2(typescript@5.6.2)(vite@5.4.6): + /vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.4.6): resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} peerDependencies: vite: '*' @@ -10376,7 +10376,7 @@ packages: dependencies: debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.3(typescript@5.6.2) + tsconfck: 3.1.3(typescript@5.4.5) vite: 5.4.6 transitivePeerDependencies: - supports-color diff --git a/examples/non-monorepo/package-lock.json b/examples/non-monorepo/package-lock.json index 8c9c9d1ab6ed4..230f3418d4291 100644 --- a/examples/non-monorepo/package-lock.json +++ b/examples/non-monorepo/package-lock.json @@ -19,7 +19,7 @@ "eslint": "^8.57.0", "eslint-config-next": "^14.1.1", "turbo": "^2.0.3", - "typescript": "^5.3.2" + "typescript": "5.4.5" }, "engines": { "node": ">=18" @@ -3632,10 +3632,11 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/examples/non-monorepo/package.json b/examples/non-monorepo/package.json index 97fc04df33c1b..199ef58651a54 100644 --- a/examples/non-monorepo/package.json +++ b/examples/non-monorepo/package.json @@ -20,7 +20,7 @@ "eslint": "^8.57.0", "eslint-config-next": "^14.1.1", "turbo": "^2.0.3", - "typescript": "^5.3.2" + "typescript": "5.4.5" }, "packageManager": "npm@10.5.0", "engines": { diff --git a/examples/package.json b/examples/package.json index 9bf36a3cdf668..8a35f6a323fda 100644 --- a/examples/package.json +++ b/examples/package.json @@ -1,3 +1,9 @@ { - "name": "turborepo-examples" + "name": "turborepo-examples", + "scripts": { + "install-all": "tsx install-all.ts" + }, + "devDependencies": { + "tsx": "4.19.1" + } } diff --git a/examples/with-berry/apps/docs/package.json b/examples/with-berry/apps/docs/package.json index afd367d94182a..563a0c42c48e9 100644 --- a/examples/with-berry/apps/docs/package.json +++ b/examples/with-berry/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-berry/apps/web/package.json b/examples/with-berry/apps/web/package.json index 83c7ee49e9ab7..b6277aa18e9bb 100644 --- a/examples/with-berry/apps/web/package.json +++ b/examples/with-berry/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-berry/packages/eslint-config/package.json b/examples/with-berry/packages/eslint-config/package.json index 4f6bbc55b65e0..ebd4e2d326443 100644 --- a/examples/with-berry/packages/eslint-config/package.json +++ b/examples/with-berry/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-berry/packages/ui/package.json b/examples/with-berry/packages/ui/package.json index fc14c67e016f0..d5f11bb06ddc5 100644 --- a/examples/with-berry/packages/ui/package.json +++ b/examples/with-berry/packages/ui/package.json @@ -14,7 +14,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-berry/yarn.lock b/examples/with-berry/yarn.lock index 3518ca38151bd..458ca4bfd9c92 100644 --- a/examples/with-berry/yarn.lock +++ b/examples/with-berry/yarn.lock @@ -567,7 +567,7 @@ __metadata: eslint-config-prettier: ^9.1.0 eslint-config-turbo: ^2.0.0 eslint-plugin-only-warn: ^1.1.0 - typescript: ^5.3.3 + typescript: 5.4.5 languageName: unknown linkType: soft @@ -587,7 +587,7 @@ __metadata: "@types/react-dom": ^18.2.19 eslint: ^8.57.0 react: ^18.2.0 - typescript: ^5.3.3 + typescript: 5.4.5 languageName: unknown linkType: soft @@ -1706,7 +1706,7 @@ __metadata: next: ^14.1.1 react: ^18.2.0 react-dom: ^18.2.0 - typescript: ^5.3.3 + typescript: 5.4.5 languageName: unknown linkType: soft @@ -5103,23 +5103,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.3.3": - version: 5.3.3 - resolution: "typescript@npm:5.3.3" +"typescript@npm:5.4.5": + version: 5.4.5 + resolution: "typescript@npm:5.4.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2007ccb6e51bbbf6fde0a78099efe04dc1c3dfbdff04ca3b6a8bc717991862b39fd6126c0c3ebf2d2d98ac5e960bcaa873826bb2bb241f14277034148f41f6a2 + checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 languageName: node linkType: hard -"typescript@patch:typescript@^5.3.3#~builtin": - version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#~builtin::version=5.3.3&hash=f3b441" +"typescript@patch:typescript@5.4.5#~builtin": + version: 5.4.5 + resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=f3b441" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: f61375590b3162599f0f0d5b8737877ac0a7bc52761dbb585d67e7b8753a3a4c42d9a554c4cc929f591ffcf3a2b0602f65ae3ce74714fd5652623a816862b610 + checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba languageName: node linkType: hard @@ -5197,7 +5197,7 @@ __metadata: next: ^14.1.1 react: ^18.2.0 react-dom: ^18.2.0 - typescript: ^5.3.3 + typescript: 5.4.5 languageName: unknown linkType: soft diff --git a/examples/with-changesets/apps/docs/package.json b/examples/with-changesets/apps/docs/package.json index 931ea13ff76e0..847eacc85d348 100644 --- a/examples/with-changesets/apps/docs/package.json +++ b/examples/with-changesets/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "@acme/eslint-config": "workspace:*", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-changesets/packages/acme-core/package.json b/examples/with-changesets/packages/acme-core/package.json index d465d4ca05354..b685e89cb58ef 100644 --- a/examples/with-changesets/packages/acme-core/package.json +++ b/examples/with-changesets/packages/acme-core/package.json @@ -22,7 +22,7 @@ "eslint": "^8.57.0", "@acme/eslint-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-changesets/packages/acme-utils/package.json b/examples/with-changesets/packages/acme-utils/package.json index 0a3ca2d7bb06f..f20a9022d9554 100644 --- a/examples/with-changesets/packages/acme-utils/package.json +++ b/examples/with-changesets/packages/acme-utils/package.json @@ -22,7 +22,7 @@ "eslint": "^8.57.0", "@acme/eslint-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-changesets/packages/eslint-config/package.json b/examples/with-changesets/packages/eslint-config/package.json index a37be0381062f..e8af96c98afbc 100644 --- a/examples/with-changesets/packages/eslint-config/package.json +++ b/examples/with-changesets/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-changesets/pnpm-lock.yaml b/examples/with-changesets/pnpm-lock.yaml index 42979159dee09..26cf6830dde5c 100644 --- a/examples/with-changesets/pnpm-lock.yaml +++ b/examples/with-changesets/pnpm-lock.yaml @@ -58,8 +58,8 @@ importers: specifier: ^18.2.19 version: 18.2.19 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/acme-core: dependencies: @@ -84,10 +84,10 @@ importers: version: 8.57.0 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.3.3) + version: 8.0.2(typescript@5.4.5) typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/acme-tsconfig: {} @@ -114,10 +114,10 @@ importers: version: 8.57.0 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.3.3) + version: 8.0.2(typescript@5.4.5) typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: @@ -126,13 +126,13 @@ importers: version: 14.1.4 '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -143,8 +143,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -1181,7 +1181,7 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1193,10 +1193,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 @@ -1204,13 +1204,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1222,10 +1222,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -1233,13 +1233,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1251,16 +1251,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1272,11 +1272,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1305,7 +1305,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: true - /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1315,17 +1315,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1335,12 +1335,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1360,7 +1360,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1375,13 +1375,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.17.0(typescript@5.4.5): resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1397,13 +1397,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1419,13 +1419,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1436,7 +1436,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -1445,7 +1445,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1456,7 +1456,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1464,7 +1464,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1475,7 +1475,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1511,7 +1511,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3): + /@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1533,25 +1533,25 @@ packages: '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@8.57.0) '@next/eslint-plugin-next': 14.1.4 '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2384,7 +2384,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) @@ -2413,7 +2413,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2442,7 +2442,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -2467,7 +2467,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2480,8 +2480,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -2528,7 +2528,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -2565,13 +2565,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4749,13 +4749,13 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: true /ts-interface-checker@0.1.13: @@ -4778,7 +4778,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@8.0.2(typescript@5.3.3): + /tsup@8.0.2(typescript@5.4.5): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} hasBin: true @@ -4811,20 +4811,20 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.34.0 tree-kill: 1.2.2 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /tty-table@4.2.3: @@ -4966,8 +4966,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-docker/apps/api/package.json b/examples/with-docker/apps/api/package.json index 205cb3446c4c4..0831bd2aeec15 100644 --- a/examples/with-docker/apps/api/package.json +++ b/examples/with-docker/apps/api/package.json @@ -37,6 +37,6 @@ "jest": "^29.7.0", "nodemon": "^3.1.0", "supertest": "^6.3.3", - "typescript": "^5.3.3" + "typescript": "5.4.5" } -} \ No newline at end of file +} diff --git a/examples/with-docker/apps/web/package.json b/examples/with-docker/apps/web/package.json index bb61ec229e1c4..04829839d3883 100644 --- a/examples/with-docker/apps/web/package.json +++ b/examples/with-docker/apps/web/package.json @@ -22,6 +22,6 @@ "eslint": "^8.57.0", "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-docker/packages/eslint-config/package.json b/examples/with-docker/packages/eslint-config/package.json index 4b4e0cc1d7800..886ac6bc22d3a 100644 --- a/examples/with-docker/packages/eslint-config/package.json +++ b/examples/with-docker/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index d57249c17503b..2deb2618d1a0e 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -25,7 +25,6 @@ "@types/node": "^20.11.24", "eslint": "^8.57.0", "jest": "^29.7.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } - diff --git a/examples/with-docker/packages/ui/package.json b/examples/with-docker/packages/ui/package.json index 656892bb5e021..8746d5e9f2c98 100644 --- a/examples/with-docker/packages/ui/package.json +++ b/examples/with-docker/packages/ui/package.json @@ -13,7 +13,7 @@ "eslint": "^8.57.0", "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-docker/yarn.lock b/examples/with-docker/yarn.lock index 536691cd304a6..c4f531eaacf78 100644 --- a/examples/with-docker/yarn.lock +++ b/examples/with-docker/yarn.lock @@ -4982,16 +4982,7 @@ string-length@^4.0.1: char-regex "^1.0.2" strip-ansi "^6.0.0" -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -5051,14 +5042,7 @@ string.prototype.trimstart@^1.0.7: define-properties "^1.2.0" es-abstract "^1.22.1" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -5379,10 +5363,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@^5.3.3: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@5.4.5: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== unbox-primitive@^1.0.2: version "1.0.2" @@ -5515,16 +5499,7 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== diff --git a/examples/with-gatsby/apps/docs/package.json b/examples/with-gatsby/apps/docs/package.json index f1f2b0e55b1bb..f03a587615696 100644 --- a/examples/with-gatsby/apps/docs/package.json +++ b/examples/with-gatsby/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-gatsby/apps/web/package.json b/examples/with-gatsby/apps/web/package.json index 67c2ff097c17b..db04bef720848 100644 --- a/examples/with-gatsby/apps/web/package.json +++ b/examples/with-gatsby/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "gatsby-plugin-compile-es6-packages": "^2.1.1", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-gatsby/packages/eslint-config/package.json b/examples/with-gatsby/packages/eslint-config/package.json index 6372cf76097d6..d00eede111fbe 100644 --- a/examples/with-gatsby/packages/eslint-config/package.json +++ b/examples/with-gatsby/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-gatsby/packages/ui/package.json b/examples/with-gatsby/packages/ui/package.json index 4a432bd58cc73..3ca25ece45c98 100644 --- a/examples/with-gatsby/packages/ui/package.json +++ b/examples/with-gatsby/packages/ui/package.json @@ -13,7 +13,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-gatsby/pnpm-lock.yaml b/examples/with-gatsby/pnpm-lock.yaml index 746e6c7173d8e..98ed2ebd66470 100644 --- a/examples/with-gatsby/pnpm-lock.yaml +++ b/examples/with-gatsby/pnpm-lock.yaml @@ -52,8 +52,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.4.4 + specifier: 5.4.5 + version: 5.4.5 apps/web: dependencies: @@ -62,7 +62,7 @@ importers: version: link:../../packages/ui gatsby: specifier: ^5.13.3 - version: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + version: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) react: specifier: ^18.2.0 version: 18.2.0 @@ -92,20 +92,20 @@ importers: specifier: ^2.1.1 version: 2.1.1(gatsby@5.13.3) typescript: - specifier: ^5.3.3 - version: 5.4.4 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4) + version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.5.0(eslint@8.57.0)(typescript@5.4.4) + version: 7.5.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.4) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -116,8 +116,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: ^5.3.3 - version: 5.4.4 + specifier: 5.4.5 + version: 5.4.5 packages/typescript-config: {} @@ -143,8 +143,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.4.4 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -2860,7 +2860,7 @@ packages: /@types/yoga-layout@1.9.2: resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2872,22 +2872,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.4) - typescript: 5.4.4 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2899,10 +2899,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 @@ -2910,13 +2910,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -2928,10 +2928,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4 eslint: 8.57.0 @@ -2939,13 +2939,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2957,14 +2957,14 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2976,16 +2976,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -2997,11 +2997,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -3029,7 +3029,7 @@ packages: '@typescript-eslint/visitor-keys': 7.5.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3039,16 +3039,16 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.4) - typescript: 5.4.4 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3058,17 +3058,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3078,12 +3078,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -3102,7 +3102,7 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.4): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3117,12 +3117,12 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.4) - typescript: 5.4.4 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.4): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3138,13 +3138,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.4): + /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.5): resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3160,13 +3160,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.4) - typescript: 5.4.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3177,7 +3177,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -3185,7 +3185,7 @@ packages: - supports-color - typescript - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3196,7 +3196,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3204,7 +3204,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.4): + /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3215,7 +3215,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.4) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3249,7 +3249,7 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.4): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -3270,25 +3270,25 @@ packages: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.4) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) - typescript: 5.4.4 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -3820,7 +3820,7 @@ packages: '@babel/core': 7.24.4 '@babel/runtime': 7.24.4 '@babel/types': 7.24.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) gatsby-core-utils: 4.13.1 /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: @@ -5234,7 +5234,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.4): + /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.5): resolution: {integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -5258,8 +5258,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) babel-eslint: 10.1.0(eslint@8.57.0) confusing-browser-globals: 1.0.11 eslint: 7.32.0 @@ -5268,7 +5268,7 @@ packages: eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.4.4 + typescript: 5.4.5 /eslint-config-turbo@2.0.0(eslint@8.57.0): resolution: {integrity: sha512-EtdL8t3iuj6JFHq8nESXwnu0U7K/ug7dkxTsYNctuR6udOudjLMZz3A0P131Bz5ZFmPoFmkdHjlRYwocGgLbOw==} @@ -5341,7 +5341,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -5369,7 +5369,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -5398,7 +5398,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -5437,7 +5437,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -5471,7 +5471,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -5496,7 +5496,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.4): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5509,8 +5509,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5556,7 +5556,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -5593,13 +5593,13 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.11 - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.4): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6130,7 +6130,7 @@ packages: signal-exit: 4.1.0 dev: true - /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.4.4)(webpack@5.91.0): + /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -6158,7 +6158,7 @@ packages: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.4 + typescript: 5.4.5 webpack: 5.91.0 /form-data-encoder@2.1.4: @@ -6375,7 +6375,7 @@ packages: gatsby: '>2.0.0-alpha' dependencies: '@babel/runtime': 7.24.4 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) regex-escape: 3.4.10 dev: true @@ -6391,7 +6391,7 @@ packages: chokidar: 3.6.0 fs-exists-cached: 1.0.0 fs-extra: 11.2.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) gatsby-core-utils: 4.13.1 gatsby-page-utils: 3.13.1 gatsby-plugin-utils: 4.13.1(gatsby@5.13.3)(graphql@16.8.1) @@ -6416,7 +6416,7 @@ packages: '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) '@babel/runtime': 7.24.4 babel-plugin-remove-graphql-queries: 5.13.1(@babel/core@7.24.4)(gatsby@5.13.3) - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) transitivePeerDependencies: - supports-color @@ -6430,7 +6430,7 @@ packages: '@babel/runtime': 7.24.4 fastq: 1.17.1 fs-extra: 11.2.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) gatsby-core-utils: 4.13.1 gatsby-sharp: 1.13.0 graphql: 16.8.1 @@ -6502,7 +6502,7 @@ packages: transitivePeerDependencies: - supports-color - /gatsby@5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.4): + /gatsby@5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5): resolution: {integrity: sha512-SSnGpjswK20BQORcvTbtK8eI+W4QUG+u8rdVswB4suva6BfvTakW2wiktj7E2MdO4NjRvlgJjF5dUUncU5nldA==} engines: {node: '>=18.0.0'} hasBin: true @@ -6536,8 +6536,8 @@ packages: '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.91.0) '@sigmacomputing/babel-plugin-lodash': 3.3.5 '@types/http-proxy': 1.17.14 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.4) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.4) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/webpack-asset-relocator-loader': 1.7.3 acorn-loose: 8.4.0 acorn-walk: 8.3.2 @@ -6575,7 +6575,7 @@ packages: enhanced-resolve: 5.16.0 error-stack-parser: 2.1.4 eslint: 7.32.0 - eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.4) + eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.5) eslint-plugin-flowtype: 5.10.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) @@ -6649,7 +6649,7 @@ packages: query-string: 6.14.1 raw-loader: 4.0.2(webpack@5.91.0) react: 18.2.0 - react-dev-utils: 12.0.1(eslint@7.32.0)(typescript@5.4.4)(webpack@5.91.0) + react-dev-utils: 12.0.1(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0) react-dom: 18.2.0(react@18.2.0) react-refresh: 0.14.0 react-server-dom-webpack: 0.0.0-experimental-c8b778b7f-20220825(react@18.2.0)(webpack@5.91.0) @@ -9075,7 +9075,7 @@ packages: minimist: 1.2.8 strip-json-comments: 2.0.1 - /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.4.4)(webpack@5.91.0): + /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -9094,7 +9094,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.4.4)(webpack@5.91.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -9109,7 +9109,7 @@ packages: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - typescript: 5.4.4 + typescript: 5.4.5 webpack: 5.91.0 transitivePeerDependencies: - eslint @@ -10225,13 +10225,13 @@ packages: /true-case-path@2.2.1: resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} - /ts-api-utils@1.3.0(typescript@5.4.4): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.4 + typescript: 5.4.5 dev: true /tsconfig-paths@3.15.0: @@ -10251,14 +10251,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.4): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.4 + typescript: 5.4.5 /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -10410,9 +10410,10 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typescript@5.4.4: - resolution: {integrity: sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} + hasBin: true /ua-parser-js@1.0.37: resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} diff --git a/examples/with-nestjs/apps/api/package.json b/examples/with-nestjs/apps/api/package.json index 8fb55a37ad7ae..a60e6a5b62900 100644 --- a/examples/with-nestjs/apps/api/package.json +++ b/examples/with-nestjs/apps/api/package.json @@ -40,6 +40,6 @@ "ts-loader": "^9.4.3", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", - "typescript": "^5.1.3" + "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/apps/web/package.json b/examples/with-nestjs/apps/web/package.json index 349fafd39156f..a94cd0a8e9c1e 100644 --- a/examples/with-nestjs/apps/web/package.json +++ b/examples/with-nestjs/apps/web/package.json @@ -32,6 +32,6 @@ "@types/react-dom": "^18.2.19", "jest": "^29.5.0", "jest-environment-jsdom": "^29.7.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/packages/api/package.json b/examples/with-nestjs/packages/api/package.json index f8eb4f40b65eb..3ec3c824e99c2 100644 --- a/examples/with-nestjs/packages/api/package.json +++ b/examples/with-nestjs/packages/api/package.json @@ -42,6 +42,6 @@ "@types/node": "^20.3.1", "ts-loader": "^9.4.3", "ts-node": "^10.9.1", - "typescript": "^5.1.3" + "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/packages/eslint-config/package.json b/examples/with-nestjs/packages/eslint-config/package.json index f48e07b7c8bf1..ec676777233be 100644 --- a/examples/with-nestjs/packages/eslint-config/package.json +++ b/examples/with-nestjs/packages/eslint-config/package.json @@ -18,6 +18,6 @@ "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", "eslint-plugin-prettier": "^5.1.3", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/packages/ui/package.json b/examples/with-nestjs/packages/ui/package.json index 4d5e99ef7783a..c04fa2b2ea879 100644 --- a/examples/with-nestjs/packages/ui/package.json +++ b/examples/with-nestjs/packages/ui/package.json @@ -21,6 +21,6 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "react": "^18.2.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/pnpm-lock.yaml b/examples/with-nestjs/pnpm-lock.yaml index 966d5b702958a..6aad84f593522 100644 --- a/examples/with-nestjs/pnpm-lock.yaml +++ b/examples/with-nestjs/pnpm-lock.yaml @@ -47,7 +47,7 @@ importers: version: 10.3.2 '@nestjs/schematics': specifier: ^10.0.0 - version: 10.1.1(chokidar@3.6.0)(typescript@5.3.3) + version: 10.1.1(typescript@5.4.5) '@nestjs/testing': specifier: ^10.0.0 version: 10.3.8(@nestjs/common@10.3.8)(@nestjs/core@10.3.8)(@nestjs/platform-express@10.3.8) @@ -83,19 +83,19 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.3.3) + version: 29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.3.3)(webpack@5.91.0) + version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.3.3) + version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 typescript: - specifier: ^5.1.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 apps/web: dependencies: @@ -155,8 +155,8 @@ importers: specifier: ^29.7.0 version: 29.7.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/api: dependencies: @@ -175,25 +175,25 @@ importers: version: 20.11.24 ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.3.3)(webpack@5.91.0) + version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.3.3) + version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) typescript: - specifier: ^5.1.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -207,8 +207,8 @@ importers: specifier: ^5.1.3 version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/jest-config: devDependencies: @@ -231,7 +231,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.12.4(@types/node@20.11.24)(typescript@5.3.3) + version: 1.12.4(@types/node@20.11.24)(typescript@5.4.5) '@types/eslint': specifier: ^8.56.5 version: 8.56.5 @@ -251,8 +251,8 @@ importers: specifier: ^18.2.0 version: 18.2.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -1183,6 +1183,21 @@ packages: - chokidar dev: true + /@nestjs/schematics@10.1.1(typescript@5.4.5): + resolution: {integrity: sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==} + peerDependencies: + typescript: '>=4.8.2' + dependencies: + '@angular-devkit/core': 17.1.2(chokidar@3.6.0) + '@angular-devkit/schematics': 17.1.2(chokidar@3.6.0) + comment-json: 4.2.3 + jsonc-parser: 3.2.1 + pluralize: 8.0.0 + typescript: 5.4.5 + transitivePeerDependencies: + - chokidar + dev: true + /@nestjs/testing@10.3.8(@nestjs/common@10.3.8)(@nestjs/core@10.3.8)(@nestjs/platform-express@10.3.8): resolution: {integrity: sha512-hpX9das2TdFTKQ4/2ojhjI6YgXtCfXRKui3A4Qaj54VVzc5+mtK502Jj18Vzji98o9MVS6skmYu+S/UvW3U6Fw==} peerDependencies: @@ -1469,7 +1484,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.12.4(@types/node@20.11.24)(typescript@5.3.3): + /@turbo/gen@1.12.4(@types/node@20.11.24)(typescript@5.4.5): resolution: {integrity: sha512-3Z8KZ6Vnc2x6rr8sNJ4QNYpkAttLBfb91uPzDlFDY7vgJg+vfXT8YWyZznVL+19ZixF2C/F4Ucp4/YjG2e1drg==} hasBin: true dependencies: @@ -1481,7 +1496,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.0 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.3.3) + ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -1780,7 +1795,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1792,10 +1807,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 @@ -1803,13 +1818,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1821,10 +1836,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -1832,13 +1847,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1850,16 +1865,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1871,11 +1886,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1904,7 +1919,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: true - /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1914,17 +1929,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1934,12 +1949,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1959,7 +1974,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1974,13 +1989,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.17.0(typescript@5.4.5): resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1996,13 +2011,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2018,13 +2033,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2035,7 +2050,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -2044,7 +2059,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2055,7 +2070,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2063,7 +2078,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2074,7 +2089,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2110,7 +2125,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -2131,25 +2146,25 @@ packages: '@babel/core': 7.24.5 '@babel/eslint-parser': 7.23.3(@babel/core@7.24.5)(eslint@8.57.0) '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.1.2(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-testing-library: 6.1.2(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -3680,7 +3695,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -3710,7 +3725,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -3739,7 +3754,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3764,7 +3779,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3777,8 +3792,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -3825,7 +3840,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) dev: true /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): @@ -3883,13 +3898,13 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.1.2(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.1.2(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-Ra16FeBlonfbScOIdZEta9o+OxtwDqiUt+4UCpIM42TuatyLdtfU/SbwnIzPcAszrbl58PGwyZ9YGU9dwIo/tA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5341,7 +5356,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.3.3) + ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -7728,16 +7743,16 @@ packages: hasBin: true dev: true - /ts-api-utils@1.0.2(typescript@5.3.3): + /ts-api-utils@1.0.2(typescript@5.4.5): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: true - /ts-jest@29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.3.3): + /ts-jest@29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -7767,11 +7782,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.3.3 + typescript: 5.4.5 yargs-parser: 21.1.1 dev: true - /ts-loader@9.5.1(typescript@5.3.3)(webpack@5.91.0): + /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -7783,11 +7798,11 @@ packages: micromatch: 4.0.5 semver: 7.5.4 source-map: 0.7.4 - typescript: 5.3.3 + typescript: 5.4.5 webpack: 5.91.0 dev: true - /ts-node@10.9.1(@types/node@20.11.24)(typescript@5.3.3): + /ts-node@10.9.1(@types/node@20.11.24)(typescript@5.4.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -7813,7 +7828,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -7852,14 +7867,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /turbo-darwin-64@2.0.4: @@ -8008,6 +8023,12 @@ packages: hasBin: true dev: true + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} diff --git a/examples/with-npm/apps/docs/package.json b/examples/with-npm/apps/docs/package.json index 2dd1dee1f560b..eb845c7e990f9 100644 --- a/examples/with-npm/apps/docs/package.json +++ b/examples/with-npm/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-npm/apps/web/package.json b/examples/with-npm/apps/web/package.json index 93370529f0e9f..c7a7d1e841cda 100644 --- a/examples/with-npm/apps/web/package.json +++ b/examples/with-npm/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-npm/package-lock.json b/examples/with-npm/package-lock.json index 47f0f8b06e236..08ba4b65dff6d 100644 --- a/examples/with-npm/package-lock.json +++ b/examples/with-npm/package-lock.json @@ -10,7 +10,6 @@ "packages/*" ], "devDependencies": { - "@repo/eslint-config": "*", "prettier": "^3.2.5", "turbo": "^2.0.3" }, @@ -35,7 +34,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } }, "apps/web": { @@ -55,7 +54,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -8167,10 +8166,11 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", + "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8580,7 +8580,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } }, "packages/typescript-config": { @@ -8603,7 +8603,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } } diff --git a/examples/with-npm/packages/eslint-config/package.json b/examples/with-npm/packages/eslint-config/package.json index e6efa9ab37d51..01680558436ec 100644 --- a/examples/with-npm/packages/eslint-config/package.json +++ b/examples/with-npm/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^6.17.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-npm/packages/ui/package.json b/examples/with-npm/packages/ui/package.json index c93c6d97805c5..73d5ff79abd25 100644 --- a/examples/with-npm/packages/ui/package.json +++ b/examples/with-npm/packages/ui/package.json @@ -19,7 +19,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-prisma/apps/web/package.json b/examples/with-prisma/apps/web/package.json index a93e094743a36..bfc338e8c90d4 100644 --- a/examples/with-prisma/apps/web/package.json +++ b/examples/with-prisma/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-prisma/package.json b/examples/with-prisma/package.json index d19f5fe548f4f..0d8fd87d2a915 100644 --- a/examples/with-prisma/package.json +++ b/examples/with-prisma/package.json @@ -21,7 +21,7 @@ "devDependencies": { "prettier": "^3.2.5", "prisma": "5.10.2", - "tsx": "^4.7.1", + "tsx": "4.19.1", "turbo": "^2.0.3" }, "engines": { diff --git a/examples/with-prisma/packages/config-eslint/package.json b/examples/with-prisma/packages/config-eslint/package.json index 21d27fb79fc54..f31bad74d33fa 100644 --- a/examples/with-prisma/packages/config-eslint/package.json +++ b/examples/with-prisma/packages/config-eslint/package.json @@ -13,6 +13,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-prisma/packages/database/package.json b/examples/with-prisma/packages/database/package.json index d9885a5b25fa4..c889f951fd10b 100644 --- a/examples/with-prisma/packages/database/package.json +++ b/examples/with-prisma/packages/database/package.json @@ -27,7 +27,7 @@ "prisma": "^5.10.2", "rimraf": "^5.0.5", "tsup": "^8.0.2", - "tsx": "^4.7.1", - "typescript": "^5.3.3" + "tsx": "4.19.1", + "typescript": "5.4.5" } } diff --git a/examples/with-prisma/yarn.lock b/examples/with-prisma/yarn.lock index ae6946fc09830..3f924855fbd7d 100644 --- a/examples/with-prisma/yarn.lock +++ b/examples/with-prisma/yarn.lock @@ -205,236 +205,241 @@ "@babel/helper-validator-identifier" "^7.24.6" to-fast-properties "^2.0.0" -"@esbuild/aix-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" - integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== - "@esbuild/aix-ppc64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.4.tgz#f83eb142df3ca7b49531c1ed680b81e484316508" integrity sha512-Zrm+B33R4LWPLjDEVnEqt2+SLTATlru1q/xYKVn8oVTbiRBGmK2VIMoIYGJDGyftnGaC788IuzGFAlb7IQ0Y8A== -"@esbuild/android-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" - integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== +"@esbuild/aix-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz#51299374de171dbd80bb7d838e1cfce9af36f353" + integrity sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ== "@esbuild/android-arm64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.4.tgz#dd328039daccd6033b2d1e536c054914bfc92287" integrity sha512-fYFnz+ObClJ3dNiITySBUx+oNalYUT18/AryMxfovLkYWbutXsct3Wz2ZWAcGGppp+RVVX5FiXeLYGi97umisA== -"@esbuild/android-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" - integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== +"@esbuild/android-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz#58565291a1fe548638adb9c584237449e5e14018" + integrity sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw== "@esbuild/android-arm@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.4.tgz#76767a989720a97b206ea14c52af6e4589e48b0d" integrity sha512-E7H/yTd8kGQfY4z9t3nRPk/hrhaCajfA3YSQSBrst8B+3uTcgsi8N+ZWYCaeIDsiVs6m65JPCaQN/DxBRclF3A== -"@esbuild/android-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" - integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== +"@esbuild/android-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.23.1.tgz#5eb8c652d4c82a2421e3395b808e6d9c42c862ee" + integrity sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ== "@esbuild/android-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.4.tgz#14a8ae3c35702d882086efb5a8f8d7b0038d8d35" integrity sha512-mDqmlge3hFbEPbCWxp4fM6hqq7aZfLEHZAKGP9viq9wMUBVQx202aDIfc3l+d2cKhUJM741VrCXEzRFhPDKH3Q== -"@esbuild/darwin-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" - integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== +"@esbuild/android-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.23.1.tgz#ae19d665d2f06f0f48a6ac9a224b3f672e65d517" + integrity sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg== "@esbuild/darwin-arm64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.4.tgz#7e735046005e4c12e9139e0bdd1fa6a754430d57" integrity sha512-72eaIrDZDSiWqpmCzVaBD58c8ea8cw/U0fq/PPOTqE3c53D0xVMRt2ooIABZ6/wj99Y+h4ksT/+I+srCDLU9TA== -"@esbuild/darwin-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" - integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== +"@esbuild/darwin-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz#05b17f91a87e557b468a9c75e9d85ab10c121b16" + integrity sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q== "@esbuild/darwin-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.4.tgz#db623553547a5fe3502a63aa88306e9023178482" integrity sha512-uBsuwRMehGmw1JC7Vecu/upOjTsMhgahmDkWhGLWxIgUn2x/Y4tIwUZngsmVb6XyPSTXJYS4YiASKPcm9Zitag== -"@esbuild/freebsd-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" - integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== +"@esbuild/darwin-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz#c58353b982f4e04f0d022284b8ba2733f5ff0931" + integrity sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw== "@esbuild/freebsd-arm64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.4.tgz#91cbad647c079bf932086fbd4749d7f563df67b8" integrity sha512-8JfuSC6YMSAEIZIWNL3GtdUT5NhUA/CMUCpZdDRolUXNAXEE/Vbpe6qlGLpfThtY5NwXq8Hi4nJy4YfPh+TwAg== -"@esbuild/freebsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" - integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== +"@esbuild/freebsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz#f9220dc65f80f03635e1ef96cfad5da1f446f3bc" + integrity sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA== "@esbuild/freebsd-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.4.tgz#723299b9859ccbe5532fecbadba3ac33019ba8e8" integrity sha512-8d9y9eQhxv4ef7JmXny7591P/PYsDFc4+STaxC1GBv0tMyCdyWfXu2jBuqRsyhY8uL2HU8uPyscgE2KxCY9imQ== -"@esbuild/linux-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" - integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== +"@esbuild/freebsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz#69bd8511fa013b59f0226d1609ac43f7ce489730" + integrity sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g== "@esbuild/linux-arm64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.4.tgz#531743f861e1ef6e50b874d6c784cda37aa5e685" integrity sha512-/GLD2orjNU50v9PcxNpYZi+y8dJ7e7/LhQukN3S4jNDXCKkyyiyAz9zDw3siZ7Eh1tRcnCHAo/WcqKMzmi4eMQ== -"@esbuild/linux-arm@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" - integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== +"@esbuild/linux-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz#8050af6d51ddb388c75653ef9871f5ccd8f12383" + integrity sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g== "@esbuild/linux-arm@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.4.tgz#1144b5654764960dd97d90ddf0893a9afc63ad91" integrity sha512-2rqFFefpYmpMs+FWjkzSgXg5vViocqpq5a1PSRgT0AvSgxoXmGF17qfGAzKedg6wAwyM7UltrKVo9kxaJLMF/g== -"@esbuild/linux-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" - integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== +"@esbuild/linux-arm@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz#ecaabd1c23b701070484990db9a82f382f99e771" + integrity sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ== "@esbuild/linux-ia32@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.4.tgz#c81b6f2ed3308d3b75ccefb5ac63bc4cf3a9d2e9" integrity sha512-pNftBl7m/tFG3t2m/tSjuYeWIffzwAZT9m08+9DPLizxVOsUl8DdFzn9HvJrTQwe3wvJnwTdl92AonY36w/25g== -"@esbuild/linux-loong64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" - integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== +"@esbuild/linux-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz#3ed2273214178109741c09bd0687098a0243b333" + integrity sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ== "@esbuild/linux-loong64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.4.tgz#87b6af7cd0f2551653955fc2dc465b7f4464af0a" integrity sha512-cSD2gzCK5LuVX+hszzXQzlWya6c7hilO71L9h4KHwqI4qeqZ57bAtkgcC2YioXjsbfAv4lPn3qe3b00Zt+jIfQ== -"@esbuild/linux-mips64el@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" - integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== +"@esbuild/linux-loong64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz#a0fdf440b5485c81b0fbb316b08933d217f5d3ac" + integrity sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw== "@esbuild/linux-mips64el@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.4.tgz#fec73cd39490a0c45d052bef03e011a0ad366c06" integrity sha512-qtzAd3BJh7UdbiXCrg6npWLYU0YpufsV9XlufKhMhYMJGJCdfX/G6+PNd0+v877X1JG5VmjBLUiFB0o8EUSicA== -"@esbuild/linux-ppc64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" - integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== +"@esbuild/linux-mips64el@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz#e11a2806346db8375b18f5e104c5a9d4e81807f6" + integrity sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q== "@esbuild/linux-ppc64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.4.tgz#ea3b5e13b0fc8666bd4c6f7ea58bd1830f3e6e78" integrity sha512-yB8AYzOTaL0D5+2a4xEy7OVvbcypvDR05MsB/VVPVA7nL4hc5w5Dyd/ddnayStDgJE59fAgNEOdLhBxjfx5+dg== -"@esbuild/linux-riscv64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" - integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== +"@esbuild/linux-ppc64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz#06a2744c5eaf562b1a90937855b4d6cf7c75ec96" + integrity sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw== "@esbuild/linux-riscv64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.4.tgz#80d406f653fc6b193edaeb55ac88d4ac22c8f155" integrity sha512-Y5AgOuVzPjQdgU59ramLoqSSiXddu7F3F+LI5hYy/d1UHN7K5oLzYBDZe23QmQJ9PIVUXwOdKJ/jZahPdxzm9w== -"@esbuild/linux-s390x@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" - integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== +"@esbuild/linux-riscv64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz#65b46a2892fc0d1af4ba342af3fe0fa4a8fe08e7" + integrity sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA== "@esbuild/linux-s390x@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.4.tgz#9cbd26854b5b12cf22fb54c96cd1adffaf6ace6f" integrity sha512-Iqc/l/FFwtt8FoTK9riYv9zQNms7B8u+vAI/rxKuN10HgQIXaPzKZc479lZ0x6+vKVQbu55GdpYpeNWzjOhgbA== -"@esbuild/linux-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" - integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== +"@esbuild/linux-s390x@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz#e71ea18c70c3f604e241d16e4e5ab193a9785d6f" + integrity sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw== "@esbuild/linux-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.4.tgz#44dfe1c5cad855362c830c604dba97fbb16fc114" integrity sha512-Td9jv782UMAFsuLZINfUpoF5mZIbAj+jv1YVtE58rFtfvoKRiKSkRGQfHTgKamLVT/fO7203bHa3wU122V/Bdg== -"@esbuild/netbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" - integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== +"@esbuild/linux-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz#d47f97391e80690d4dfe811a2e7d6927ad9eed24" + integrity sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ== "@esbuild/netbsd-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.4.tgz#89b97d823e1cc4bf8c4e5dc8f76c8d6ceb1c87f3" integrity sha512-Awn38oSXxsPMQxaV0Ipb7W/gxZtk5Tx3+W+rAPdZkyEhQ6968r9NvtkjhnhbEgWXYbgV+JEONJ6PcdBS+nlcpA== -"@esbuild/openbsd-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" - integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== +"@esbuild/netbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz#44e743c9778d57a8ace4b72f3c6b839a3b74a653" + integrity sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA== + +"@esbuild/openbsd-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz#05c5a1faf67b9881834758c69f3e51b7dee015d7" + integrity sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q== "@esbuild/openbsd-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.4.tgz#080715bb4981c326364320d7b56835608e2bd98d" integrity sha512-IsUmQeCY0aU374R82fxIPu6vkOybWIMc3hVGZ3ChRwL9hA1TwY+tS0lgFWV5+F1+1ssuvvXt3HFqe8roCip8Hg== -"@esbuild/sunos-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" - integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== +"@esbuild/openbsd-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz#2e58ae511bacf67d19f9f2dcd9e8c5a93f00c273" + integrity sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA== "@esbuild/sunos-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.4.tgz#8d838a8ac80e211536490108b72fb0091a811626" integrity sha512-hsKhgZ4teLUaDA6FG/QIu2q0rI6I36tZVfM4DBZv3BG0mkMIdEnMbhc4xwLvLJSS22uWmaVkFkqWgIS0gPIm+A== -"@esbuild/win32-arm64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" - integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== +"@esbuild/sunos-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz#adb022b959d18d3389ac70769cef5a03d3abd403" + integrity sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA== "@esbuild/win32-arm64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.4.tgz#94afb4c2ac89b0f09791606d6d93fdab322f81c8" integrity sha512-UUfMgMoXPoA/bvGUNfUBFLCh0gt9dxZYIx9W4rfJr7+hKe5jxxHmfOK8YSH4qsHLLN4Ck8JZ+v7Q5fIm1huErg== -"@esbuild/win32-ia32@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" - integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== +"@esbuild/win32-arm64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz#84906f50c212b72ec360f48461d43202f4c8b9a2" + integrity sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A== "@esbuild/win32-ia32@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.4.tgz#822085cd52f2f1dd90eabb59346ffa779c0bab83" integrity sha512-yIxbspZb5kGCAHWm8dexALQ9en1IYDfErzjSEq1KzXFniHv019VT3mNtTK7t8qdy4TwT6QYHI9sEZabONHg+aw== -"@esbuild/win32-x64@0.20.2": - version "0.20.2" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" - integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== +"@esbuild/win32-ia32@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz#5e3eacc515820ff729e90d0cb463183128e82fac" + integrity sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ== "@esbuild/win32-x64@0.21.4": version "0.21.4" resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.4.tgz#11ef0398f9abee161193461910a507ef0d4c0c32" integrity sha512-sywLRD3UK/qRJt0oBwdpYLBibk7KiRfbswmWRDabuncQYSlf8aLEEUor/oP6KRz8KEG+HoiVLBhPRD5JWjS8Sg== +"@esbuild/win32-x64@0.23.1": + version "0.23.1" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz#81fd50d11e2c32b2d6241470e3185b70c7b30699" + integrity sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg== + "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": version "4.4.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" @@ -1798,34 +1803,35 @@ esbuild@^0.21.4: "@esbuild/win32-ia32" "0.21.4" "@esbuild/win32-x64" "0.21.4" -esbuild@~0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" - integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== +esbuild@~0.23.0: + version "0.23.1" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.23.1.tgz#40fdc3f9265ec0beae6f59824ade1bd3d3d2dab8" + integrity sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg== optionalDependencies: - "@esbuild/aix-ppc64" "0.20.2" - "@esbuild/android-arm" "0.20.2" - "@esbuild/android-arm64" "0.20.2" - "@esbuild/android-x64" "0.20.2" - "@esbuild/darwin-arm64" "0.20.2" - "@esbuild/darwin-x64" "0.20.2" - "@esbuild/freebsd-arm64" "0.20.2" - "@esbuild/freebsd-x64" "0.20.2" - "@esbuild/linux-arm" "0.20.2" - "@esbuild/linux-arm64" "0.20.2" - "@esbuild/linux-ia32" "0.20.2" - "@esbuild/linux-loong64" "0.20.2" - "@esbuild/linux-mips64el" "0.20.2" - "@esbuild/linux-ppc64" "0.20.2" - "@esbuild/linux-riscv64" "0.20.2" - "@esbuild/linux-s390x" "0.20.2" - "@esbuild/linux-x64" "0.20.2" - "@esbuild/netbsd-x64" "0.20.2" - "@esbuild/openbsd-x64" "0.20.2" - "@esbuild/sunos-x64" "0.20.2" - "@esbuild/win32-arm64" "0.20.2" - "@esbuild/win32-ia32" "0.20.2" - "@esbuild/win32-x64" "0.20.2" + "@esbuild/aix-ppc64" "0.23.1" + "@esbuild/android-arm" "0.23.1" + "@esbuild/android-arm64" "0.23.1" + "@esbuild/android-x64" "0.23.1" + "@esbuild/darwin-arm64" "0.23.1" + "@esbuild/darwin-x64" "0.23.1" + "@esbuild/freebsd-arm64" "0.23.1" + "@esbuild/freebsd-x64" "0.23.1" + "@esbuild/linux-arm" "0.23.1" + "@esbuild/linux-arm64" "0.23.1" + "@esbuild/linux-ia32" "0.23.1" + "@esbuild/linux-loong64" "0.23.1" + "@esbuild/linux-mips64el" "0.23.1" + "@esbuild/linux-ppc64" "0.23.1" + "@esbuild/linux-riscv64" "0.23.1" + "@esbuild/linux-s390x" "0.23.1" + "@esbuild/linux-x64" "0.23.1" + "@esbuild/netbsd-x64" "0.23.1" + "@esbuild/openbsd-arm64" "0.23.1" + "@esbuild/openbsd-x64" "0.23.1" + "@esbuild/sunos-x64" "0.23.1" + "@esbuild/win32-arm64" "0.23.1" + "@esbuild/win32-ia32" "0.23.1" + "@esbuild/win32-x64" "0.23.1" escalade@^3.1.2: version "3.1.2" @@ -3699,16 +3705,8 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: +"string-width-cjs@npm:string-width@^4.2.0", string-width@^4.1.0: + name string-width-cjs version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -3772,14 +3770,7 @@ string.prototype.trimstart@^1.0.8: define-properties "^1.2.1" es-object-atoms "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -3967,12 +3958,12 @@ tsutils@^3.21.0: dependencies: tslib "^1.8.1" -tsx@^4.7.1: - version "4.11.2" - resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.11.2.tgz#91791db82cbcd3f7515e623cc9ff288f2aa663dc" - integrity sha512-V5DL5v1BuItjsQ2FN9+4OjR7n5cr8hSgN+VGmm/fd2/0cgQdBIWHcQ3bFYm/5ZTmyxkTDBUIaRuW2divgfPe0A== +tsx@4.19.1: + version "4.19.1" + resolved "https://registry.yarnpkg.com/tsx/-/tsx-4.19.1.tgz#b7bffdf4b565813e4dea14b90872af279cd0090b" + integrity sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA== dependencies: - esbuild "~0.20.2" + esbuild "~0.23.0" get-tsconfig "^4.7.5" optionalDependencies: fsevents "~2.3.3" @@ -4085,7 +4076,7 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.3.3: +typescript@5.4.5: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== diff --git a/examples/with-react-native-web/apps/native/package.json b/examples/with-react-native-web/apps/native/package.json index a4d9a23e87834..499494d4ebb0c 100644 --- a/examples/with-react-native-web/apps/native/package.json +++ b/examples/with-react-native-web/apps/native/package.json @@ -24,6 +24,6 @@ "@expo/webpack-config": "^19.0.0", "@types/react": "^18.2.46", "@types/react-native": "^0.73.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-react-native-web/apps/web/package.json b/examples/with-react-native-web/apps/web/package.json index 119e0cd65c90e..a7f54c7b3cf32 100644 --- a/examples/with-react-native-web/apps/web/package.json +++ b/examples/with-react-native-web/apps/web/package.json @@ -23,6 +23,6 @@ "babel-plugin-react-native-web": "^0.19.10", "eslint": "^8.56.0", "eslint-config-next": "14.0.4", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-react-native-web/packages/ui/package.json b/examples/with-react-native-web/packages/ui/package.json index 4550e525fcc75..97868859b77f7 100644 --- a/examples/with-react-native-web/packages/ui/package.json +++ b/examples/with-react-native-web/packages/ui/package.json @@ -13,7 +13,7 @@ "@types/react": "^18.2.46", "@types/react-native": "^0.73.0", "tsup": "^8.0.1", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0", diff --git a/examples/with-react-native-web/yarn.lock b/examples/with-react-native-web/yarn.lock index 53713ee0474fb..4f8899c4c6ee6 100644 --- a/examples/with-react-native-web/yarn.lock +++ b/examples/with-react-native-web/yarn.lock @@ -10647,7 +10647,7 @@ typedarray.prototype.slice@^1.0.3: typed-array-buffer "^1.0.2" typed-array-byte-offset "^1.0.2" -typescript@^5.3.3: +typescript@5.4.5: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== diff --git a/examples/with-rollup/apps/web/package.json b/examples/with-rollup/apps/web/package.json index 8156d84adb3c3..a3ce18ae2285a 100644 --- a/examples/with-rollup/apps/web/package.json +++ b/examples/with-rollup/apps/web/package.json @@ -21,6 +21,6 @@ "@types/node": "^20.11.24", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-rollup/packages/config-eslint/package.json b/examples/with-rollup/packages/config-eslint/package.json index 2fa3c6d25bfba..173679acffc23 100644 --- a/examples/with-rollup/packages/config-eslint/package.json +++ b/examples/with-rollup/packages/config-eslint/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-rollup/packages/ui/package.json b/examples/with-rollup/packages/ui/package.json index 48d50820c3af9..0b82320100acf 100644 --- a/examples/with-rollup/packages/ui/package.json +++ b/examples/with-rollup/packages/ui/package.json @@ -25,7 +25,7 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "rollup": "^4.12.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-rollup/pnpm-lock.yaml b/examples/with-rollup/pnpm-lock.yaml index 5e002f1a523f1..a5d1578b2ae73 100644 --- a/examples/with-rollup/pnpm-lock.yaml +++ b/examples/with-rollup/pnpm-lock.yaml @@ -52,7 +52,7 @@ importers: specifier: ^18.2.19 version: 18.3.0 typescript: - specifier: ^5.3.3 + specifier: 5.4.5 version: 5.4.5 packages/config-eslint: @@ -76,7 +76,7 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: ^5.3.3 + specifier: 5.4.5 version: 5.4.5 packages/config-typescript: {} @@ -109,7 +109,7 @@ importers: specifier: ^4.12.0 version: 4.18.0 typescript: - specifier: ^5.3.3 + specifier: 5.4.5 version: 5.4.5 packages: diff --git a/examples/with-svelte/apps/docs/package.json b/examples/with-svelte/apps/docs/package.json index 4a90b5335a21d..a027612a8ddc6 100644 --- a/examples/with-svelte/apps/docs/package.json +++ b/examples/with-svelte/apps/docs/package.json @@ -31,7 +31,7 @@ "svelte": "^4.2.12", "svelte-check": "^3.6.6", "tslib": "^2.6.2", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4", "vitest": "^1.3.1" } diff --git a/examples/with-svelte/apps/web/package.json b/examples/with-svelte/apps/web/package.json index 45f7936eecf29..7e6201396001e 100644 --- a/examples/with-svelte/apps/web/package.json +++ b/examples/with-svelte/apps/web/package.json @@ -31,7 +31,7 @@ "svelte": "^4.2.12", "svelte-check": "^3.6.6", "tslib": "^2.6.2", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4", "vitest": "^1.3.1" } diff --git a/examples/with-svelte/pnpm-lock.yaml b/examples/with-svelte/pnpm-lock.yaml index 4bf4c79f84592..3b9b1fcdcc685 100644 --- a/examples/with-svelte/pnpm-lock.yaml +++ b/examples/with-svelte/pnpm-lock.yaml @@ -41,10 +41,10 @@ importers: version: 3.0.2(svelte@4.2.12)(vite@5.1.4) '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -64,8 +64,8 @@ importers: specifier: ^2.6.2 version: 2.6.2 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.1.4 @@ -96,10 +96,10 @@ importers: version: 3.0.2(svelte@4.2.12)(vite@5.1.4) '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -119,8 +119,8 @@ importers: specifier: ^2.6.2 version: 2.6.2 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.1.4 @@ -132,10 +132,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -667,7 +667,7 @@ packages: /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -679,10 +679,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -690,12 +690,12 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -707,11 +707,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -722,7 +722,7 @@ packages: '@typescript-eslint/types': 7.1.0 '@typescript-eslint/visitor-keys': 7.1.0 - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -732,12 +732,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -745,7 +745,7 @@ packages: resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} engines: {node: ^16.0.0 || >=18.0.0} - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -761,12 +761,12 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -777,7 +777,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2087,8 +2087,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.12 - svelte-preprocess: 5.1.3(svelte@4.2.12)(typescript@5.3.3) - typescript: 5.3.3 + svelte-preprocess: 5.1.3(svelte@4.2.12)(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -2127,7 +2127,7 @@ packages: svelte: 4.2.12 dev: true - /svelte-preprocess@5.1.3(svelte@4.2.12)(typescript@5.3.3): + /svelte-preprocess@5.1.3(svelte@4.2.12)(typescript@5.4.5): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -2171,7 +2171,7 @@ packages: sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.12 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /svelte@4.2.12: @@ -2228,13 +2228,13 @@ packages: engines: {node: '>=6'} dev: true - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -2315,8 +2315,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true diff --git a/examples/with-tailwind/apps/docs/package.json b/examples/with-tailwind/apps/docs/package.json index b5db2c8e4e043..750056affa3bd 100644 --- a/examples/with-tailwind/apps/docs/package.json +++ b/examples/with-tailwind/apps/docs/package.json @@ -26,6 +26,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-tailwind/apps/web/package.json b/examples/with-tailwind/apps/web/package.json index aa9b4eb69c615..047ebdf872057 100644 --- a/examples/with-tailwind/apps/web/package.json +++ b/examples/with-tailwind/apps/web/package.json @@ -26,6 +26,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-tailwind/packages/ui/package.json b/examples/with-tailwind/packages/ui/package.json index d3de97f4cac69..70b9e16399b56 100644 --- a/examples/with-tailwind/packages/ui/package.json +++ b/examples/with-tailwind/packages/ui/package.json @@ -29,6 +29,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-tailwind/pnpm-lock.yaml b/examples/with-tailwind/pnpm-lock.yaml index 55990ecea0f3f..01882c16dca80 100644 --- a/examples/with-tailwind/pnpm-lock.yaml +++ b/examples/with-tailwind/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 apps/web: dependencies: @@ -113,8 +113,8 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/config-eslint: devDependencies: @@ -164,8 +164,8 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -1913,6 +1913,7 @@ packages: /eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) @@ -4051,12 +4052,6 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true - /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} diff --git a/examples/with-typeorm/apps/docs/package.json b/examples/with-typeorm/apps/docs/package.json index da5da256b5349..5aa3fbebdba15 100644 --- a/examples/with-typeorm/apps/docs/package.json +++ b/examples/with-typeorm/apps/docs/package.json @@ -25,6 +25,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-typeorm/apps/web/package.json b/examples/with-typeorm/apps/web/package.json index 60511618b721c..8aa96594b9dc5 100644 --- a/examples/with-typeorm/apps/web/package.json +++ b/examples/with-typeorm/apps/web/package.json @@ -25,6 +25,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-typeorm/packages/eslint-config/package.json b/examples/with-typeorm/packages/eslint-config/package.json index 2fa3c6d25bfba..173679acffc23 100644 --- a/examples/with-typeorm/packages/eslint-config/package.json +++ b/examples/with-typeorm/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-typeorm/packages/typeorm-service/package.json b/examples/with-typeorm/packages/typeorm-service/package.json index 2a75e0afc55ad..adb542b63b57b 100644 --- a/examples/with-typeorm/packages/typeorm-service/package.json +++ b/examples/with-typeorm/packages/typeorm-service/package.json @@ -24,7 +24,7 @@ "@repo/typescript-config": "workspace:*", "@types/node": "^20.11.24", "eslint": "^8.57.0", - "typescript": "^5.3.3", + "typescript": "5.4.5", "unplugin-swc": "^1.4.5", "vitest": "^1.5.0" } diff --git a/examples/with-typeorm/packages/ui/package.json b/examples/with-typeorm/packages/ui/package.json index 680a1e70da4aa..9095356e579f3 100644 --- a/examples/with-typeorm/packages/ui/package.json +++ b/examples/with-typeorm/packages/ui/package.json @@ -20,7 +20,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-typeorm/pnpm-lock.yaml b/examples/with-typeorm/pnpm-lock.yaml index cb5d0dc3e6fbe..b2c9dc1a33076 100644 --- a/examples/with-typeorm/pnpm-lock.yaml +++ b/examples/with-typeorm/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.5.4 + specifier: 5.4.5 + version: 5.4.5 apps/web: dependencies: @@ -116,20 +116,20 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.5.4 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4) + version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) + version: 7.17.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4) + version: 5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -140,8 +140,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: ^5.3.3 - version: 5.5.4 + specifier: 5.4.5 + version: 5.4.5 packages/typeorm-service: dependencies: @@ -168,8 +168,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.5.4 + specifier: 5.4.5 + version: 5.4.5 unplugin-swc: specifier: ^1.4.5 version: 1.5.1(@swc/core@1.7.0) @@ -193,7 +193,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.13.4(@types/node@20.14.11)(typescript@5.5.4) + version: 1.13.4(@types/node@20.14.11)(typescript@5.4.5) '@types/eslint': specifier: ^8.56.5 version: 8.56.11 @@ -210,8 +210,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.5.4 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -1219,7 +1219,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.13.4(@types/node@20.14.11)(typescript@5.5.4): + /@turbo/gen@1.13.4(@types/node@20.14.11)(typescript@5.4.5): resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true dependencies: @@ -1231,7 +1231,7 @@ packages: minimatch: 9.0.5 node-plop: 0.26.3 proxy-agent: 6.4.0 - ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.5.4) + ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.4.5) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -1338,7 +1338,7 @@ packages: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1350,10 +1350,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 @@ -1361,13 +1361,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1379,22 +1379,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.17.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1406,16 +1406,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.5.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1427,11 +1427,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.17.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.5.4 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1460,7 +1460,7 @@ packages: '@typescript-eslint/visitor-keys': 7.17.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1470,17 +1470,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1490,12 +1490,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -1515,7 +1515,7 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1530,13 +1530,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.4) - typescript: 5.5.4 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1552,13 +1552,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4): + /@typescript-eslint/typescript-estree@7.17.0(typescript@5.4.5): resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1574,13 +1574,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1591,7 +1591,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.3 @@ -1600,7 +1600,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1611,7 +1611,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.3 transitivePeerDependencies: @@ -1619,7 +1619,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): + /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1628,7 +1628,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -1663,7 +1663,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1684,25 +1684,25 @@ packages: '@babel/core': 7.24.9 '@babel/eslint-parser': 7.24.8(@babel/core@7.24.9)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.17.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.5.4) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.1(prettier@3.3.3) - typescript: 5.5.4 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2824,7 +2824,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2854,7 +2854,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2883,7 +2883,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2908,7 +2908,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2921,8 +2921,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -2969,7 +2969,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): @@ -3008,13 +3008,13 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.5.4): + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5626,16 +5626,16 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.3.0(typescript@5.5.4): + /ts-api-utils@1.3.0(typescript@5.4.5): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.5.4 + typescript: 5.4.5 dev: true - /ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4): + /ts-node@10.9.2(@types/node@20.14.11)(typescript@5.4.5): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -5661,7 +5661,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.5.4 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5682,14 +5682,14 @@ packages: /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /tsutils@3.21.0(typescript@5.5.4): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.5.4 + typescript: 5.4.5 dev: true /turbo-darwin-64@2.0.9: @@ -5906,8 +5906,8 @@ packages: - supports-color dev: false - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-vite/apps/docs/package.json b/examples/with-vite/apps/docs/package.json index 29d0f5b261587..b3659d7d8816b 100644 --- a/examples/with-vite/apps/docs/package.json +++ b/examples/with-vite/apps/docs/package.json @@ -16,7 +16,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4" } } diff --git a/examples/with-vite/apps/web/package.json b/examples/with-vite/apps/web/package.json index e3f4a1a4fe22a..6d4a5bc0cee20 100644 --- a/examples/with-vite/apps/web/package.json +++ b/examples/with-vite/apps/web/package.json @@ -16,7 +16,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "^5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4" } } diff --git a/examples/with-vite/packages/ui/package.json b/examples/with-vite/packages/ui/package.json index 7f99450a134f9..a6a8474fef7d0 100644 --- a/examples/with-vite/packages/ui/package.json +++ b/examples/with-vite/packages/ui/package.json @@ -14,6 +14,6 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-vite/pnpm-lock.yaml b/examples/with-vite/pnpm-lock.yaml index eb62f529fc453..28b37596bf33d 100644 --- a/examples/with-vite/pnpm-lock.yaml +++ b/examples/with-vite/pnpm-lock.yaml @@ -34,8 +34,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.1.4 @@ -56,8 +56,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.1.4 @@ -66,10 +66,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -88,8 +88,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages: @@ -467,7 +467,7 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: false - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -479,10 +479,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -490,13 +490,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -508,11 +508,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false @@ -525,7 +525,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: false - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -535,12 +535,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false @@ -550,7 +550,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -566,13 +566,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.3(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -583,7 +583,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1268,13 +1268,13 @@ packages: is-number: 7.0.0 dev: false - /ts-api-utils@1.0.3(typescript@5.3.3): + /ts-api-utils@1.0.3(typescript@5.4.5): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: false /turbo-darwin-64@2.0.3: @@ -1347,8 +1347,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true diff --git a/examples/with-vue-nuxt/apps/web/package.json b/examples/with-vue-nuxt/apps/web/package.json index 772a0234beda8..8c414456b6eb2 100644 --- a/examples/with-vue-nuxt/apps/web/package.json +++ b/examples/with-vue-nuxt/apps/web/package.json @@ -24,7 +24,7 @@ "eslint-plugin-vue": "^9.22.0", "npm-run-all2": "^6.1.2", "tsconfig": "workspace:*", - "typescript": "~5.3.3", + "typescript": "5.4.5", "vite": "^5.1.4", "vue-tsc": "^2.0.4" } diff --git a/examples/with-vue-nuxt/packages/eslint-config-custom/package.json b/examples/with-vue-nuxt/packages/eslint-config-custom/package.json index 142a5f46226f0..99932cee49c24 100644 --- a/examples/with-vue-nuxt/packages/eslint-config-custom/package.json +++ b/examples/with-vue-nuxt/packages/eslint-config-custom/package.json @@ -8,6 +8,6 @@ "@vercel/style-guide": "^5.2.0", "@vue/eslint-config-typescript": "^12.0.0", "eslint-config-turbo": "^2.0.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-vue-nuxt/pnpm-lock.yaml b/examples/with-vue-nuxt/pnpm-lock.yaml index 1c44a798481cf..a92bdc7231a90 100644 --- a/examples/with-vue-nuxt/pnpm-lock.yaml +++ b/examples/with-vue-nuxt/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 1.0.8(nuxt@3.10.3)(vite@5.1.4) '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 12.1.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -35,13 +35,13 @@ importers: version: link:../../packages/eslint-config-custom nuxt: specifier: ^3.10.3 - version: 3.10.3(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4) + version: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.3.3) + version: 3.4.21(typescript@5.4.5) vue-router: specifier: ^4.3.0 version: 4.3.0(vue@3.4.21) @@ -53,7 +53,7 @@ importers: version: link:../../packages/ui vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.3.3) + version: 3.4.21(typescript@5.4.5) devDependencies: '@rushstack/eslint-patch': specifier: ^1.7.2 @@ -83,32 +83,32 @@ importers: specifier: workspace:* version: link:../../packages/tsconfig typescript: - specifier: ~5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 vite: specifier: ^5.1.4 version: 5.1.4(@types/node@20.11.24) vue-tsc: specifier: ^2.0.4 - version: 2.0.4(typescript@5.3.3) + version: 2.0.4(typescript@5.4.5) packages/eslint-config-custom: devDependencies: '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.0)(typescript@5.3.3) + version: 12.1.0(eslint@8.57.0)(typescript@5.4.5) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) '@vue/eslint-config-typescript': specifier: ^12.0.0 - version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3) + version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.4.5) eslint-config-turbo: specifier: ^2.0.0 version: 2.0.3(eslint@8.57.0) typescript: - specifier: ^5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/tsconfig: devDependencies: @@ -126,7 +126,7 @@ importers: version: link:../tsconfig vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.3.3) + version: 3.4.21(typescript@5.4.5) packages: @@ -1221,7 +1221,7 @@ packages: '@nuxt/kit': 3.10.3 '@nuxt/schema': 3.10.3 execa: 7.2.0 - nuxt: 3.10.3(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4) + nuxt: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) vite: 5.1.4(@types/node@20.11.24) transitivePeerDependencies: - rollup @@ -1269,7 +1269,7 @@ packages: launch-editor: 2.6.1 local-pkg: 0.5.0 magicast: 0.3.3 - nuxt: 3.10.3(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4) + nuxt: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) nypm: 0.3.8 ohash: 1.1.3 pacote: 17.0.6 @@ -1372,7 +1372,7 @@ packages: resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==} dev: true - /@nuxt/vite-builder@3.10.3(eslint@8.57.0)(typescript@5.3.3)(vue@3.4.21): + /@nuxt/vite-builder@3.10.3(eslint@8.57.0)(typescript@5.4.5)(vue@3.4.21): resolution: {integrity: sha512-BqkbrYkEk1AVUJleofbqTRV+ltf2p1CDjGDK78zENPCgrSABlj4F4oK8rze8vmRY5qoH7kMZxgMa2dXVXCp6OA==} engines: {node: ^14.18.0 || >=16.10.0} peerDependencies: @@ -1410,8 +1410,8 @@ packages: unplugin: 1.8.0 vite: 5.1.4(@types/node@20.11.24) vite-node: 1.3.1 - vite-plugin-checker: 0.6.4(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4) - vue: 3.4.21(typescript@5.3.3) + vite-plugin-checker: 0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) + vue: 3.4.21(typescript@5.4.5) vue-bundle-renderer: 2.0.0 transitivePeerDependencies: - '@types/node' @@ -1434,14 +1434,14 @@ packages: - vue-tsc dev: true - /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.0)(typescript@5.3.3): + /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==} peerDependencies: eslint: ^8.48.0 dependencies: '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.10.0)(eslint-plugin-import@2.28.1)(eslint@8.57.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) @@ -2000,7 +2000,7 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2012,10 +2012,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.10.0 - '@typescript-eslint/type-utils': 6.10.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 eslint: 8.57.0 @@ -2023,13 +2023,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.10.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.10.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2041,11 +2041,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.10.0 '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2066,7 +2066,7 @@ packages: '@typescript-eslint/visitor-keys': 6.10.0 dev: true - /@typescript-eslint/type-utils@6.10.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.10.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2076,12 +2076,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -2096,7 +2096,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2111,13 +2111,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.10.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.10.0(typescript@5.4.5): resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2132,13 +2132,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2149,7 +2149,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -2158,7 +2158,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.10.0(eslint@8.57.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.10.0(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2169,7 +2169,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.10.0 '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -2233,7 +2233,7 @@ packages: '@unhead/shared': 1.8.11 hookable: 5.5.3 unhead: 1.8.11 - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) dev: true /@vercel/nft@0.24.4: @@ -2257,7 +2257,7 @@ packages: - supports-color dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.3.3): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -2278,25 +2278,25 @@ packages: '@babel/core': 7.24.0 '@babel/eslint-parser': 7.22.11(@babel/core@7.24.0)(eslint@8.57.0) '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-prettier: 9.0.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.10.0)(eslint-plugin-import@2.28.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.2.3)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.0.1(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-testing-library: 6.0.1(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.5(prettier@3.2.5) - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2315,7 +2315,7 @@ packages: '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) '@vue/babel-plugin-jsx': 1.2.1(@babel/core@7.24.0) vite: 5.1.4(@types/node@20.11.24) - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) transitivePeerDependencies: - supports-color dev: true @@ -2328,7 +2328,7 @@ packages: vue: ^3.2.25 dependencies: vite: 5.1.4(@types/node@20.11.24) - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) dev: true /@volar/language-core@2.1.0: @@ -2365,7 +2365,7 @@ packages: ast-kit: 0.11.2 local-pkg: 0.4.3 magic-string-ast: 0.3.0 - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) transitivePeerDependencies: - rollup dev: true @@ -2449,7 +2449,7 @@ packages: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} dev: true - /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.3): + /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -2460,17 +2460,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-plugin-vue: 9.22.0(eslint@8.57.0) - typescript: 5.3.3 + typescript: 5.4.5 vue-eslint-parser: 9.3.2(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /@vue/language-core@2.0.4(typescript@5.3.3): + /@vue/language-core@2.0.4(typescript@5.4.5): resolution: {integrity: sha512-IYlVEICXKRWYjRQ4JyPlXhydU/p0C7uY5LpqXyJzzJHWo44LWHZtTP3USfWNQif3VAK5QZpdZKQ5HYIeQL3BJQ==} peerDependencies: typescript: '*' @@ -2484,7 +2484,7 @@ packages: computeds: 0.0.1 minimatch: 9.0.3 path-browserify: 1.0.1 - typescript: 5.3.3 + typescript: 5.4.5 vue-template-compiler: 2.7.15 dev: true @@ -2513,7 +2513,7 @@ packages: dependencies: '@vue/compiler-ssr': 3.4.21 '@vue/shared': 3.4.21 - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) /@vue/shared@3.4.21: resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} @@ -3946,7 +3946,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.7 @@ -3998,7 +3998,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -4023,7 +4023,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4036,8 +4036,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4111,7 +4111,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.3.3) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5) dev: true /eslint-plugin-promise@6.1.1(eslint@8.57.0): @@ -4157,13 +4157,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.0.1(eslint@8.57.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.0.1(eslint@8.57.0)(typescript@5.4.5): resolution: {integrity: sha512-CEYtjpcF3hAaQtYsTZqciR7s5z+T0LCMTwJeW+pz6kBnGtc866wAKmhaiK2Gsjc2jWNP7Gt6zhNr2DE1ZW4e+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6271,7 +6271,7 @@ packages: fsevents: 2.3.3 dev: true - /nuxt@3.10.3(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4): + /nuxt@3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4): resolution: {integrity: sha512-NchGNiiz9g/ErJAb462W/lpX2NqcXYb9hugySKWvLXNdrjeAPiJ2/7mhgwUSiZA9MpjuQg3saiEajr1zlRIOCg==} engines: {node: ^14.18.0 || >=16.10.0} hasBin: true @@ -6290,7 +6290,7 @@ packages: '@nuxt/schema': 3.10.3 '@nuxt/telemetry': 2.5.3 '@nuxt/ui-templates': 1.3.1 - '@nuxt/vite-builder': 3.10.3(eslint@8.57.0)(typescript@5.3.3)(vue@3.4.21) + '@nuxt/vite-builder': 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vue@3.4.21) '@unhead/dom': 1.8.11 '@unhead/ssr': 1.8.11 '@unhead/vue': 1.8.11(vue@3.4.21) @@ -6335,7 +6335,7 @@ packages: unplugin: 1.8.0 unplugin-vue-router: 0.7.0(vue-router@4.3.0)(vue@3.4.21) untyped: 1.4.2 - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) vue-bundle-renderer: 2.0.0 vue-devtools-stub: 0.1.0 vue-router: 4.3.0(vue@3.4.21) @@ -7984,13 +7984,13 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-api-utils@1.0.2(typescript@5.3.3): + /ts-api-utils@1.0.2(typescript@5.4.5): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: true /tsconfig-paths@3.14.2: @@ -8010,14 +8010,14 @@ packages: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 + typescript: 5.4.5 dev: true /tuf-js@2.2.0: @@ -8161,8 +8161,8 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true @@ -8456,7 +8456,7 @@ packages: - terser dev: true - /vite-plugin-checker@0.6.4(eslint@8.57.0)(typescript@5.3.3)(vite@5.1.4): + /vite-plugin-checker@0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4): resolution: {integrity: sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==} engines: {node: '>=14.16'} peerDependencies: @@ -8499,7 +8499,7 @@ packages: semver: 7.6.0 strip-ansi: 6.0.1 tiny-invariant: 1.3.1 - typescript: 5.3.3 + typescript: 5.4.5 vite: 5.1.4(@types/node@20.11.24) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 @@ -8680,7 +8680,7 @@ packages: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.1 - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.21(typescript@5.4.5) dev: true /vue-template-compiler@2.7.15: @@ -8690,19 +8690,19 @@ packages: he: 1.2.0 dev: true - /vue-tsc@2.0.4(typescript@5.3.3): + /vue-tsc@2.0.4(typescript@5.4.5): resolution: {integrity: sha512-FJk+F1QhqROr6DK8raTuWk5ezNw1/kZ+7TYhc08k+cpvb1fmi7wguPZHX0svIhT4bAxCGDtF8534It8fiAkScg==} hasBin: true peerDependencies: typescript: '*' dependencies: '@volar/typescript': 2.1.0 - '@vue/language-core': 2.0.4(typescript@5.3.3) + '@vue/language-core': 2.0.4(typescript@5.4.5) semver: 7.6.0 - typescript: 5.3.3 + typescript: 5.4.5 dev: true - /vue@3.4.21(typescript@5.3.3): + /vue@3.4.21(typescript@5.4.5): resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: typescript: '*' @@ -8715,7 +8715,7 @@ packages: '@vue/runtime-dom': 3.4.21 '@vue/server-renderer': 3.4.21(vue@3.4.21) '@vue/shared': 3.4.21 - typescript: 5.3.3 + typescript: 5.4.5 /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} diff --git a/examples/with-yarn/apps/docs/package.json b/examples/with-yarn/apps/docs/package.json index 2dd1dee1f560b..eb845c7e990f9 100644 --- a/examples/with-yarn/apps/docs/package.json +++ b/examples/with-yarn/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-yarn/apps/web/package.json b/examples/with-yarn/apps/web/package.json index a8434439bfed7..27541b2cf01d6 100644 --- a/examples/with-yarn/apps/web/package.json +++ b/examples/with-yarn/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-yarn/packages/eslint-config/package.json b/examples/with-yarn/packages/eslint-config/package.json index 4f6bbc55b65e0..ebd4e2d326443 100644 --- a/examples/with-yarn/packages/eslint-config/package.json +++ b/examples/with-yarn/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" } } diff --git a/examples/with-yarn/packages/ui/package.json b/examples/with-yarn/packages/ui/package.json index 4ecb4b6a89190..aaed64f7b9b78 100644 --- a/examples/with-yarn/packages/ui/package.json +++ b/examples/with-yarn/packages/ui/package.json @@ -19,7 +19,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "^5.3.3" + "typescript": "5.4.5" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-yarn/yarn.lock b/examples/with-yarn/yarn.lock index 6c89d95a0f55f..bcbaf645125f9 100644 --- a/examples/with-yarn/yarn.lock +++ b/examples/with-yarn/yarn.lock @@ -4322,7 +4322,7 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@^5.3.3: +typescript@5.4.5: version "5.4.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== diff --git a/package.json b/package.json index 71e0daebc1974..701edc544d4e1 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "lint-staged": "^13.1.0", "prettier": "^2.8.7", "semver": "^7.3.8", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 9f6bcb8ac5d30..d6b854641bd2e 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -46,7 +46,7 @@ "jest": "^27.4.3", "ts-jest": "^27.1.1", "tsup": "^6.7.0", - "typescript": "^5.2.2" + "typescript": "5.4.5" }, "files": [ "dist" diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index fd7d69b141d2b..6789d85b3c8cb 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -48,7 +48,7 @@ "json5": "^2.2.1", "ts-jest": "^27.1.1", "tsup": "^6.2.0", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "peerDependencies": { "eslint": ">6.6.0" diff --git a/packages/turbo-benchmark/package.json b/packages/turbo-benchmark/package.json index 96cdd33b0e518..26b536f979c53 100644 --- a/packages/turbo-benchmark/package.json +++ b/packages/turbo-benchmark/package.json @@ -40,6 +40,6 @@ "@types/ndjson": "^2.0.2", "@types/node": "^18.17.4", "@types/node-fetch": "^2.6.6", - "typescript": "^5.2.2" + "typescript": "5.4.5" } } diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 73285f3fdbec9..ba9e7cf2830b5 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -59,7 +59,7 @@ "semver": "^7.3.5", "ts-jest": "^27.1.1", "tsup": "^6.7.0", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "files": [ "dist" diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index c61e3ed4e6746..5839d18ad5d1d 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -46,7 +46,7 @@ "jest": "^27.4.3", "ts-jest": "^27.1.1", "tsup": "^6.7.0", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "files": [ "dist" diff --git a/packages/turbo-gen/src/utils/plop.ts b/packages/turbo-gen/src/utils/plop.ts index 295dba929fe9e..a4c7de62d23b4 100644 --- a/packages/turbo-gen/src/utils/plop.ts +++ b/packages/turbo-gen/src/utils/plop.ts @@ -96,7 +96,7 @@ export function getPlop({ // add in all the workspace configs workspaceConfigs.forEach((c) => { try { - plop?.load(c.config, { + plop.load(c.config, { destBasePath: c.root, force: false, }); diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 8979cfec48dae..096c22c423d1a 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -41,6 +41,6 @@ "jest": "^27.4.3", "ts-jest": "^27.1.1", "tsup": "^5.12.1", - "typescript": "5.3.3" + "typescript": "5.4.5" } } diff --git a/packages/turbo-repository/package.json b/packages/turbo-repository/package.json index 6a00004fa52f8..ce0a41bc16e43 100644 --- a/packages/turbo-repository/package.json +++ b/packages/turbo-repository/package.json @@ -18,7 +18,7 @@ "execa": "^8.0.1", "fs-extra": "^11.1.1", "prettier": "^3.2.5", - "tsx": "^4.7.2" + "tsx": "4.19.1" }, "main": "dist/index.js", "napi": { diff --git a/packages/turbo-telemetry/package.json b/packages/turbo-telemetry/package.json index 76dbfb495489d..d5fb68cc5212e 100644 --- a/packages/turbo-telemetry/package.json +++ b/packages/turbo-telemetry/package.json @@ -38,8 +38,8 @@ "@turbo/utils": "workspace:*", "@types/node": "^20.11.30", "dirs-next": "0.0.1-canary.1", - "tsx": "^4.7.2", - "typescript": "5.3.3" + "tsx": "4.19.1", + "typescript": "5.4.5" }, "peerDependencies": { "commander": "^11.0.0" diff --git a/packages/turbo-test-utils/package.json b/packages/turbo-test-utils/package.json index 475eb40099dc6..a459513c39228 100644 --- a/packages/turbo-test-utils/package.json +++ b/packages/turbo-test-utils/package.json @@ -30,7 +30,7 @@ "@types/node": "^18.17.2", "jest": "^27.4.3", "ts-jest": "^27.1.1", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "dependencies": { "fs-extra": "^11.1.0", diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 9edc6ce3b92c6..5db7d68dfd257 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -25,7 +25,7 @@ "@turbo/tsconfig": "workspace:*", "@types/node": "^20", "ts-json-schema-generator": "2.3.0", - "tsx": "^4.19.0" + "tsx": "4.19.1" }, "files": [ "src", diff --git a/packages/turbo-utils/package.json b/packages/turbo-utils/package.json index 3c00e1566a6aa..1c7adffe460d2 100644 --- a/packages/turbo-utils/package.json +++ b/packages/turbo-utils/package.json @@ -50,6 +50,6 @@ "picocolors": "1.0.1", "tar": "6.1.13", "ts-jest": "^27.1.1", - "typescript": "5.3.3" + "typescript": "5.4.5" } } diff --git a/packages/turbo-utils/src/createProject.ts b/packages/turbo-utils/src/createProject.ts index 798c24b564af6..cddabeac680c6 100644 --- a/packages/turbo-utils/src/createProject.ts +++ b/packages/turbo-utils/src/createProject.ts @@ -154,8 +154,7 @@ export async function createProject({ try { if (!isDefaultExample && repoInfo) { loader.start(); - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- this is type guarded above (wtf TS) - await retry(() => downloadAndExtractRepo(root, repoInfo!), { + await retry(() => downloadAndExtractRepo(root, repoInfo), { retries: 3, }); } else { diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 066f5fc83e4fd..75ecd8a42315a 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -56,7 +56,7 @@ "strip-ansi": "^6.0.1", "ts-jest": "^27.1.1", "tsup": "^5.10.3", - "typescript": "5.3.3" + "typescript": "5.4.5" }, "files": [ "dist" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea2b5fcefa3b8..14577d7577066 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: ^7.3.8 version: 7.5.0 typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 .github/actions/cargo-sweep: dependencies: @@ -82,10 +82,14 @@ importers: specifier: 4.19.1 version: 4.19.1 typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 - examples: {} + examples: + devDependencies: + tsx: + specifier: 4.19.1 + version: 4.19.1 packages/create-turbo: dependencies: @@ -149,19 +153,19 @@ importers: version: 27.5.1(ts-node@10.9.1) ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.2.2) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(typescript@5.2.2) + version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: 5.4.5 + version: 5.4.5 packages/eslint-config: devDependencies: '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.3.3) + version: 5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.4.5) packages/eslint-config-turbo: dependencies: @@ -223,13 +227,13 @@ importers: version: 2.2.3 ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^6.2.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.3.3) + version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/prysk: {} @@ -302,8 +306,8 @@ importers: specifier: ^2.6.6 version: 2.6.6 typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-codemod: dependencies: @@ -406,13 +410,13 @@ importers: version: 3.1.1 ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.3.3) + version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-exe-stub: {} @@ -444,7 +448,7 @@ importers: version: 6.2.2 ts-node: specifier: ^10.9.1 - version: 10.9.1(@types/node@18.17.4)(typescript@5.3.3) + version: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) update-check: specifier: ^1.5.4 version: 1.5.4 @@ -484,13 +488,13 @@ importers: version: 27.5.1(ts-node@10.9.1) ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.3.3) + version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-ignore: dependencies: @@ -530,13 +534,13 @@ importers: version: 27.5.1(ts-node@10.9.1) ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^5.12.1 - version: 5.12.9(typescript@5.3.3) + version: 5.12.9(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-repository: devDependencies: @@ -553,8 +557,8 @@ importers: specifier: ^3.2.5 version: 3.3.3 tsx: - specifier: ^4.7.2 - version: 4.7.2 + specifier: 4.19.1 + version: 4.19.1 packages/turbo-telemetry: dependencies: @@ -596,11 +600,11 @@ importers: specifier: 0.0.1-canary.1 version: 0.0.1-canary.1 tsx: - specifier: ^4.7.2 - version: 4.7.2 + specifier: 4.19.1 + version: 4.19.1 typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-test-utils: dependencies: @@ -637,10 +641,10 @@ importers: version: 27.5.1(ts-node@10.9.1) ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-types: devDependencies: @@ -657,8 +661,8 @@ importers: specifier: 2.3.0 version: 2.3.0 tsx: - specifier: ^4.19.0 - version: 4.19.0 + specifier: 4.19.1 + version: 4.19.1 packages/turbo-utils: devDependencies: @@ -736,10 +740,10 @@ importers: version: 6.1.13 ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 packages/turbo-vsc: dependencies: @@ -846,13 +850,13 @@ importers: version: 6.0.1 ts-jest: specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.3.3) + version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) tsup: specifier: ^5.10.3 - version: 5.12.9(typescript@5.3.3) + version: 5.12.9(typescript@5.4.5) typescript: - specifier: 5.3.3 - version: 5.3.3 + specifier: 5.4.5 + version: 5.4.5 turborepo-tests/example-basic: dependencies: @@ -1005,7 +1009,7 @@ packages: /@actions/core@1.10.1: resolution: {integrity: sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g==} dependencies: - '@actions/http-client': 2.1.1 + '@actions/http-client': 2.2.0 uuid: 8.3.2 dev: false @@ -1032,12 +1036,6 @@ packages: tunnel: 0.0.6 dev: false - /@actions/http-client@2.1.1: - resolution: {integrity: sha512-qhrkRMB40bbbLo7gF+0vu+X+UawOvQQqNAA/5Unx774RS8poaOhThDOG6BGmxvAnxhQnDp2BG/ZUm65xZILTpw==} - dependencies: - tunnel: 0.0.6 - dev: false - /@actions/http-client@2.2.0: resolution: {integrity: sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==} dependencies: @@ -1438,15 +1436,6 @@ packages: dev: false optional: true - /@esbuild/aix-ppc64@0.19.12: - resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [aix] - requiresBuild: true - dev: true - optional: true - /@esbuild/aix-ppc64@0.23.1: resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==} engines: {node: '>=18'} @@ -1465,15 +1454,6 @@ packages: dev: true optional: true - /@esbuild/android-arm64@0.19.12: - resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm64@0.23.1: resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==} engines: {node: '>=18'} @@ -1492,15 +1472,6 @@ packages: dev: true optional: true - /@esbuild/android-arm@0.19.12: - resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-arm@0.23.1: resolution: {integrity: sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==} engines: {node: '>=18'} @@ -1519,15 +1490,6 @@ packages: dev: true optional: true - /@esbuild/android-x64@0.19.12: - resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - /@esbuild/android-x64@0.23.1: resolution: {integrity: sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==} engines: {node: '>=18'} @@ -1546,15 +1508,6 @@ packages: dev: true optional: true - /@esbuild/darwin-arm64@0.19.12: - resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-arm64@0.23.1: resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==} engines: {node: '>=18'} @@ -1573,15 +1526,6 @@ packages: dev: true optional: true - /@esbuild/darwin-x64@0.19.12: - resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - /@esbuild/darwin-x64@0.23.1: resolution: {integrity: sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==} engines: {node: '>=18'} @@ -1600,15 +1544,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-arm64@0.19.12: - resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-arm64@0.23.1: resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==} engines: {node: '>=18'} @@ -1627,15 +1562,6 @@ packages: dev: true optional: true - /@esbuild/freebsd-x64@0.19.12: - resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/freebsd-x64@0.23.1: resolution: {integrity: sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==} engines: {node: '>=18'} @@ -1654,15 +1580,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm64@0.19.12: - resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm64@0.23.1: resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==} engines: {node: '>=18'} @@ -1681,15 +1598,6 @@ packages: dev: true optional: true - /@esbuild/linux-arm@0.19.12: - resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-arm@0.23.1: resolution: {integrity: sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==} engines: {node: '>=18'} @@ -1708,15 +1616,6 @@ packages: dev: true optional: true - /@esbuild/linux-ia32@0.19.12: - resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ia32@0.23.1: resolution: {integrity: sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==} engines: {node: '>=18'} @@ -1743,15 +1642,6 @@ packages: dev: true optional: true - /@esbuild/linux-loong64@0.19.12: - resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-loong64@0.23.1: resolution: {integrity: sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==} engines: {node: '>=18'} @@ -1770,15 +1660,6 @@ packages: dev: true optional: true - /@esbuild/linux-mips64el@0.19.12: - resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-mips64el@0.23.1: resolution: {integrity: sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==} engines: {node: '>=18'} @@ -1797,15 +1678,6 @@ packages: dev: true optional: true - /@esbuild/linux-ppc64@0.19.12: - resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-ppc64@0.23.1: resolution: {integrity: sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==} engines: {node: '>=18'} @@ -1824,15 +1696,6 @@ packages: dev: true optional: true - /@esbuild/linux-riscv64@0.19.12: - resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-riscv64@0.23.1: resolution: {integrity: sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==} engines: {node: '>=18'} @@ -1851,15 +1714,6 @@ packages: dev: true optional: true - /@esbuild/linux-s390x@0.19.12: - resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-s390x@0.23.1: resolution: {integrity: sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==} engines: {node: '>=18'} @@ -1878,15 +1732,6 @@ packages: dev: true optional: true - /@esbuild/linux-x64@0.19.12: - resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@esbuild/linux-x64@0.23.1: resolution: {integrity: sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==} engines: {node: '>=18'} @@ -1905,15 +1750,6 @@ packages: dev: true optional: true - /@esbuild/netbsd-x64@0.19.12: - resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/netbsd-x64@0.23.1: resolution: {integrity: sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==} engines: {node: '>=18'} @@ -1941,15 +1777,6 @@ packages: dev: true optional: true - /@esbuild/openbsd-x64@0.19.12: - resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - /@esbuild/openbsd-x64@0.23.1: resolution: {integrity: sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==} engines: {node: '>=18'} @@ -1968,15 +1795,6 @@ packages: dev: true optional: true - /@esbuild/sunos-x64@0.19.12: - resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - /@esbuild/sunos-x64@0.23.1: resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==} engines: {node: '>=18'} @@ -1995,15 +1813,6 @@ packages: dev: true optional: true - /@esbuild/win32-arm64@0.19.12: - resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-arm64@0.23.1: resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==} engines: {node: '>=18'} @@ -2022,15 +1831,6 @@ packages: dev: true optional: true - /@esbuild/win32-ia32@0.19.12: - resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-ia32@0.23.1: resolution: {integrity: sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==} engines: {node: '>=18'} @@ -2049,15 +1849,6 @@ packages: dev: true optional: true - /@esbuild/win32-x64@0.19.12: - resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - /@esbuild/win32-x64@0.23.1: resolution: {integrity: sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==} engines: {node: '>=18'} @@ -2948,7 +2739,7 @@ packages: /@types/hast@3.0.4: resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: - '@types/unist': 3.0.3 + '@types/unist': 2.0.10 dev: false /@types/http-cache-semantics@4.0.1: @@ -3032,7 +2823,7 @@ packages: /@types/mdast@4.0.4: resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: - '@types/unist': 3.0.3 + '@types/unist': 2.0.10 dev: false /@types/minimatch@5.1.1: @@ -3151,6 +2942,10 @@ packages: /@types/tinycolor2@1.4.3: resolution: {integrity: sha512-Kf1w9NE5HEgGxCRyIcRXR/ZYtDv0V8FVPtYHwLxl0O+maGX0erE77pQlD0gpP+/KByMZ87mOA79SjifhSB3PjQ==} + /@types/unist@2.0.10: + resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + dev: false + /@types/unist@3.0.3: resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} dev: false @@ -3177,7 +2972,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3189,10 +2984,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/type-utils': 6.18.1(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.55.0 @@ -3200,13 +2995,13 @@ packages: ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.18.1(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/parser@6.18.1(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3218,11 +3013,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.55.0 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -3243,7 +3038,7 @@ packages: '@typescript-eslint/visitor-keys': 6.18.1 dev: true - /@typescript-eslint/type-utils@6.18.1(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/type-utils@6.18.1(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3253,12 +3048,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) + '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) debug: 4.3.4 eslint: 8.55.0 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true @@ -3273,7 +3068,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3288,13 +3083,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.3.3) - typescript: 5.3.3 + tsutils: 3.21.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.4.5): resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3310,13 +3105,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.3.3) - typescript: 5.3.3 + ts-api-utils: 1.0.2(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3327,7 +3122,7 @@ packages: '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) eslint: 8.55.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -3336,7 +3131,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.18.1(eslint@8.55.0)(typescript@5.3.3): + /@typescript-eslint/utils@6.18.1(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3347,7 +3142,7 @@ packages: '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -3389,7 +3184,7 @@ packages: hasBin: true dev: true - /@vercel/style-guide@5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.3.3): + /@vercel/style-guide@5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.4.5): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -3410,25 +3205,25 @@ packages: '@babel/core': 7.23.6 '@babel/eslint-parser': 7.22.11(@babel/core@7.23.6)(eslint@8.55.0) '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) eslint: 8.55.0 eslint-config-prettier: 9.0.0(eslint@8.55.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.28.1)(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0) - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.3.3) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.55.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.2.3)(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) - eslint-plugin-testing-library: 6.0.1(eslint@8.55.0)(typescript@5.3.3) + eslint-plugin-testing-library: 6.0.1(eslint@8.55.0)(typescript@5.4.5) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.55.0) prettier: 2.8.7 prettier-plugin-packagejson: 2.4.5(prettier@2.8.7) - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -5535,37 +5330,6 @@ packages: '@esbuild/win32-x64': 0.17.18 dev: true - /esbuild@0.19.12: - resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/aix-ppc64': 0.19.12 - '@esbuild/android-arm': 0.19.12 - '@esbuild/android-arm64': 0.19.12 - '@esbuild/android-x64': 0.19.12 - '@esbuild/darwin-arm64': 0.19.12 - '@esbuild/darwin-x64': 0.19.12 - '@esbuild/freebsd-arm64': 0.19.12 - '@esbuild/freebsd-x64': 0.19.12 - '@esbuild/linux-arm': 0.19.12 - '@esbuild/linux-arm64': 0.19.12 - '@esbuild/linux-ia32': 0.19.12 - '@esbuild/linux-loong64': 0.19.12 - '@esbuild/linux-mips64el': 0.19.12 - '@esbuild/linux-ppc64': 0.19.12 - '@esbuild/linux-riscv64': 0.19.12 - '@esbuild/linux-s390x': 0.19.12 - '@esbuild/linux-x64': 0.19.12 - '@esbuild/netbsd-x64': 0.19.12 - '@esbuild/openbsd-x64': 0.19.12 - '@esbuild/sunos-x64': 0.19.12 - '@esbuild/win32-arm64': 0.19.12 - '@esbuild/win32-ia32': 0.19.12 - '@esbuild/win32-x64': 0.19.12 - dev: true - /esbuild@0.23.1: resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==} engines: {node: '>=18'} @@ -5714,7 +5478,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) debug: 3.2.7 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 @@ -5744,7 +5508,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -5769,7 +5533,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.3.3): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5782,8 +5546,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.3.3) - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.4.5) eslint: 8.55.0 transitivePeerDependencies: - supports-color @@ -5825,7 +5589,7 @@ packages: optional: true dependencies: eslint: 8.55.0 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.3.3) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): @@ -5862,13 +5626,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.0.1(eslint@8.55.0)(typescript@5.3.3): + /eslint-plugin-testing-library@6.0.1(eslint@8.55.0)(typescript@5.4.5): resolution: {integrity: sha512-CEYtjpcF3hAaQtYsTZqciR7s5z+T0LCMTwJeW+pz6kBnGtc866wAKmhaiK2Gsjc2jWNP7Gt6zhNr2DE1ZW4e+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.3.3) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.4.5) eslint: 8.55.0 transitivePeerDependencies: - supports-color @@ -6517,12 +6281,6 @@ packages: resolve-pkg-maps: 1.0.0 dev: true - /get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} - dependencies: - resolve-pkg-maps: 1.0.0 - dev: true - /get-tsconfig@4.7.6: resolution: {integrity: sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==} dependencies: @@ -7742,7 +7500,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.3.3) + ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) transitivePeerDependencies: - bufferutil - canvas @@ -9595,7 +9353,7 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.3.3) + ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) yaml: 1.10.2 dev: true @@ -10904,20 +10662,20 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false - /ts-api-utils@1.0.2(typescript@5.3.3): + /ts-api-utils@1.0.2(typescript@5.4.5): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.3.3 + typescript: 5.4.5 dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.3.3): + /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -10949,11 +10707,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.3.3 + typescript: 5.4.5 yargs-parser: 20.2.9 dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.2.2): + /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5): resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} hasBin: true @@ -10985,43 +10743,7 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.5.4 - typescript: 5.2.2 - yargs-parser: 20.2.9 - dev: true - - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.3.3): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - hasBin: true - peerDependencies: - '@babel/core': '>=7.0.0-beta.0 <8' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' - esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' - peerDependenciesMeta: - '@babel/core': - optional: true - '@types/jest': - optional: true - babel-jest: - optional: true - esbuild: - optional: true - dependencies: - '@babel/core': 7.23.6 - '@types/jest': 27.5.2 - bs-logger: 0.2.6 - esbuild: 0.17.18 - fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 - json5: 2.2.3 - lodash.memoize: 4.1.2 - make-error: 1.3.6 - semver: 7.5.4 - typescript: 5.3.3 + typescript: 5.4.5 yargs-parser: 20.2.9 dev: true @@ -11037,10 +10759,10 @@ packages: normalize-path: 3.0.0 safe-stable-stringify: 2.4.3 tslib: 2.6.3 - typescript: 5.6.3 + typescript: 5.4.5 dev: true - /ts-node@10.9.1(@types/node@18.17.4)(typescript@5.3.3): + /ts-node@10.9.1(@types/node@18.17.4)(typescript@5.4.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -11066,7 +10788,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.3.3 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -11089,7 +10811,7 @@ packages: /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /tsup@5.12.9(typescript@5.3.3): + /tsup@5.12.9(typescript@5.4.5): resolution: {integrity: sha512-dUpuouWZYe40lLufo64qEhDpIDsWhRbr2expv5dHEMjwqeKJS2aXA/FPqs1dxO4T6mBojo7rvo3jP9NNzaKyDg==} hasBin: true peerDependencies: @@ -11118,49 +10840,13 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.24.0 tree-kill: 1.2.2 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - - ts-node - dev: true - - /tsup@6.7.0(ts-node@10.9.1)(typescript@5.3.3): - resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} - engines: {node: '>=14.18'} - hasBin: true - peerDependencies: - '@swc/core': ^1 - postcss: ^8.4.12 - typescript: '>=4.1.0' - peerDependenciesMeta: - '@swc/core': - optional: true - postcss: - optional: true - typescript: - optional: true - dependencies: - bundle-require: 4.0.1(esbuild@0.17.18) - cac: 6.7.12 - chokidar: 3.5.3 - debug: 4.3.4 - esbuild: 0.17.18 - execa: 5.1.1 - globby: 11.1.0 - joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) - resolve-from: 5.0.0 - rollup: 3.21.5 - source-map: 0.8.0-beta.0 - sucrase: 3.24.0 - tree-kill: 1.2.2 - typescript: 5.3.3 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsup@6.7.0(typescript@5.2.2): + /tsup@6.7.0(ts-node@10.9.1)(typescript@5.4.5): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -11190,31 +10876,20 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.24.0 tree-kill: 1.2.2 - typescript: 5.2.2 + typescript: 5.4.5 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.3.3): + /tsutils@3.21.0(typescript@5.4.5): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.3.3 - dev: true - - /tsx@4.19.0: - resolution: {integrity: sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - esbuild: 0.23.1 - get-tsconfig: 4.7.6 - optionalDependencies: - fsevents: 2.3.3 + typescript: 5.4.5 dev: true /tsx@4.19.1: @@ -11228,17 +10903,6 @@ packages: fsevents: 2.3.3 dev: true - /tsx@4.7.2: - resolution: {integrity: sha512-BCNd4kz6fz12fyrgCTEdZHGJ9fWTGeUzXmQysh0RVocDY3h4frk05ZNCXSy4kIenF7y/QnrdiVpTsyNRn6vlAw==} - engines: {node: '>=18.0.0'} - hasBin: true - dependencies: - esbuild: 0.19.12 - get-tsconfig: 4.7.3 - optionalDependencies: - fsevents: 2.3.3 - dev: true - /tunnel@0.0.6: resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} @@ -11323,22 +10987,10 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true - dev: true - - /typescript@5.3.3: - resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} - engines: {node: '>=14.17'} - hasBin: true - - /typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - dev: true /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} From 2d5200f863ec0f10473cf49420f061c37982481a Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Thu, 24 Oct 2024 11:14:01 -0400 Subject: [PATCH 114/218] fix(test-utils): return promise from lifecycle (#9331) ### Description From Jest docs ([here](https://jestjs.io/docs/setup-teardown#repeating-setup)) > beforeEach and afterEach can handle asynchronous code in the same ways that [tests can handle asynchronous code](https://jestjs.io/docs/asynchronous) - they can either take a done parameter or return a promise ### Testing Instructions --- packages/turbo-test-utils/src/useFixtures.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/turbo-test-utils/src/useFixtures.ts b/packages/turbo-test-utils/src/useFixtures.ts index 1c632efe19468..37b43fa49548a 100644 --- a/packages/turbo-test-utils/src/useFixtures.ts +++ b/packages/turbo-test-utils/src/useFixtures.ts @@ -28,7 +28,7 @@ export function setupTestFixtures({ const parentDirectory = path.join(directory, test ? test : randomUUID()); afterEach(async () => { - await Promise.all( + return Promise.all( fixtures.map((fixture) => rm(fixture, { retryDelay: 50, @@ -41,7 +41,7 @@ export function setupTestFixtures({ }); afterAll(async () => { - await rm(parentDirectory, { + return rm(parentDirectory, { retryDelay: 50, maxRetries: 5, recursive: true, From 1b1f98edd0945c3748e54e89c2a92b7415530bac Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 24 Oct 2024 13:43:47 -0400 Subject: [PATCH 115/218] fix(watch): stopping persistent tasks (#9330) ### Description We were accidentally stopping persistent tasks when we shouldn't have because we were reusing the same stopper. ### Testing Instructions We need a way to test persistent stuff and also run construction stuff. --- crates/turborepo-lib/src/run/mod.rs | 8 +++++++- crates/turborepo-lib/src/run/watch.rs | 1 - 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 4ae3d2c85e085..c94fb8fed7d3b 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -137,7 +137,13 @@ impl Run { } pub fn create_run_for_non_interruptible_tasks(&self) -> Self { - let mut new_run = self.clone(); + let mut new_run = Self { + // ProcessManager is shared via an `Arc`, + // so we want to explicitly recreate it instead of cloning + processes: ProcessManager::new(self.processes.use_pty()), + ..self.clone() + }; + let new_engine = new_run.engine.create_engine_for_non_interruptible_tasks(); new_run.engine = Arc::new(new_engine); diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index ca115532898d1..43b3675bdb8da 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -390,7 +390,6 @@ impl WatchClient { ), }); - // But we still run the regular tasks blocking let non_persistent_run = self.run.create_run_for_interruptible_tasks(); let ui_sender = self.ui_sender.clone(); Ok(RunHandle { From ddf731654429e09968f501d03dc39faaac9782ec Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 25 Oct 2024 10:53:48 -0400 Subject: [PATCH 116/218] refactor(test): rust integration tests (#9314) ### Description Fleshing out the rust integration tests. Added a macro for creating an integration test. The macro isn't perfect since it doesn't support running non-turbo commands for setup, and multiple arguments aren't implemented. ### Testing Instructions --------- Co-authored-by: Chris Olszewski --- Cargo.lock | 3 + crates/turborepo/Cargo.toml | 4 +- crates/turborepo/tests/common/mod.rs | 73 +++++ .../snapshots/query__common__check_query.snap | 23 ++ crates/turborepo/tests/query.rs | 78 ++--- ...c_repro_get_dependencies_(npm@10.5.0).snap | 23 ++ ...pro_get_dependencies_(npm@10.5.0)_err.snap | 8 + ...c_repro_get_dependencies_(npm@10.5.0).snap | 23 ++ ...n.tsx`_with_dependencies_(npm@10.5.0).snap | 16 + ...ar.ts`_with_dependencies_(npm@10.5.0).snap | 20 ++ ...id.ts`_with_dependencies_(npm@10.5.0).snap | 27 ++ ...urbo_trace_get_`main.ts`_(npm@10.5.0).snap | 11 + ...e_get_`main.ts`_with_ast_(npm@10.5.0).snap | 309 ++++++++++++++++++ ...in.ts`_with_dependencies_(npm@10.5.0).snap | 29 ++ ...`main.ts`_with_depth_=_0_(npm@10.5.0).snap | 26 ++ ...n.tsx`_with_dependencies_(npm@10.5.0).snap | 16 + ...x`_with_dependencies_(npm@10.5.0)_err.snap | 8 + ...ar.ts`_with_dependencies_(npm@10.5.0).snap | 20 ++ ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 + ...id.ts`_with_dependencies_(npm@10.5.0).snap | 27 ++ ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 + ...urbo_trace_get_`main.ts`_(npm@10.5.0).snap | 11 + ..._trace_get_`main.ts`_(npm@10.5.0)_err.snap | 8 + ...e_get_`main.ts`_with_ast_(npm@10.5.0).snap | 309 ++++++++++++++++++ ...t_`main.ts`_with_ast_(npm@10.5.0)_err.snap | 8 + ...in.ts`_with_dependencies_(npm@10.5.0).snap | 29 ++ ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 + ...`main.ts`_with_depth_=_0_(npm@10.5.0).snap | 26 ++ ...n.ts`_with_depth_=_0_(npm@10.5.0)_err.snap | 8 + 29 files changed, 1121 insertions(+), 46 deletions(-) create mode 100644 crates/turborepo/tests/common/mod.rs create mode 100644 crates/turborepo/tests/common/snapshots/query__common__check_query.snap create mode 100644 crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap diff --git a/Cargo.lock b/Cargo.lock index 64c5cacc0eaff..ae5ea50a5fe37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2633,6 +2633,7 @@ dependencies = [ "console", "lazy_static", "linked-hash-map", + "regex", "serde", "similar", ] @@ -6053,7 +6054,9 @@ dependencies = [ "pretty_assertions", "serde_json", "tempfile", + "turbopath", "turborepo-lib", + "which", "winapi", ] diff --git a/crates/turborepo/Cargo.toml b/crates/turborepo/Cargo.toml index 3e993d58acbc9..c052e574b87d3 100644 --- a/crates/turborepo/Cargo.toml +++ b/crates/turborepo/Cargo.toml @@ -21,11 +21,13 @@ build-target = "0.4.0" [dev-dependencies] assert_cmd = { workspace = true } camino = { workspace = true } -insta = { version = "1.40.0", features = ["json"] } +insta = { version = "1.40.0", features = ["json", "filters"] } itertools = { workspace = true } pretty_assertions = { workspace = true } serde_json = { workspace = true } tempfile = { workspace = true } +turbopath = { workspace = true } +which = { workspace = true } [lints] diff --git a/crates/turborepo/tests/common/mod.rs b/crates/turborepo/tests/common/mod.rs new file mode 100644 index 0000000000000..d362457a81d9b --- /dev/null +++ b/crates/turborepo/tests/common/mod.rs @@ -0,0 +1,73 @@ +use std::{path::Path, process::Command}; + +use turbopath::AbsoluteSystemPath; +use which::which; + +pub fn setup_fixture( + fixture: &str, + package_manager: &str, + test_dir: &Path, +) -> Result<(), anyhow::Error> { + let script_path = AbsoluteSystemPath::new(env!("CARGO_MANIFEST_DIR"))?.join_components(&[ + "..", + "..", + "turborepo-tests", + "helpers", + "setup_integration_test.sh", + ]); + + let unix_script_path = if cfg!(windows) { + script_path.as_str().replace("\\", "/") + } else { + script_path.to_string() + }; + + let bash = which("bash")?; + + Command::new(bash) + .arg("-c") + .arg(format!( + "{} {} {}", + unix_script_path, fixture, package_manager + )) + .current_dir(test_dir) + .spawn()? + .wait()?; + + Ok(()) +} + +/// Executes a command with different arguments in a specific fixture and +/// package manager and snapshots the output as JSON. +/// Creates a snapshot file for each set of arguments. +/// Note that the command must return valid JSON +#[macro_export] +macro_rules! check_json { + ($fixture:expr, $package_manager:expr, $command:expr, $($name:expr => $query:expr,)*) => { + { + let tempdir = tempfile::tempdir()?; + crate::common::setup_fixture($fixture, $package_manager, tempdir.path())?; + $( + let output = assert_cmd::Command::cargo_bin("turbo")? + .arg($command) + .arg($query) + .current_dir(tempdir.path()) + .output()?; + + let stdout = String::from_utf8(output.stdout)?; + let stderr = String::from_utf8_lossy(&output.stderr); + + println!("stderr: {}", stderr); + + let query_output: serde_json::Value = serde_json::from_str(&stdout)?; + let test_name = format!( + "{}_{}_({})", + $fixture, + $name.replace(' ', "_"), + $package_manager + ); + insta::assert_json_snapshot!(test_name, query_output); + )* + } + } +} diff --git a/crates/turborepo/tests/common/snapshots/query__common__check_query.snap b/crates/turborepo/tests/common/snapshots/query__common__check_query.snap new file mode 100644 index 0000000000000..890664e035247 --- /dev/null +++ b/crates/turborepo/tests/common/snapshots/query__common__check_query.snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo-lib/tests/common/mod.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "index.js", + "dependencies": { + "files": { + "items": [ + { + "path": "nm/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 99bea9d9573e0..b6767a60c5b2c 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -1,52 +1,13 @@ -use std::{path::Path, process::Command}; - -use camino::Utf8Path; - -fn setup_fixture( - fixture: &str, - package_manager: Option<&str>, - test_dir: &Path, -) -> Result<(), anyhow::Error> { - let script_path = Utf8Path::new(env!("CARGO_MANIFEST_DIR")) - .join("../../turborepo-tests/helpers/setup_integration_test.sh"); - - Command::new("bash") - .arg("-c") - .arg(format!( - "{} {} {}", - script_path, - fixture, - package_manager.unwrap_or("npm@10.5.0") - )) - .current_dir(test_dir) - .spawn()? - .wait()?; - - Ok(()) -} - -fn check_query(fixture: &str, query: &str) -> Result<(), anyhow::Error> { - let tempdir = tempfile::tempdir()?; - setup_fixture(fixture, None, tempdir.path())?; - let output = assert_cmd::Command::cargo_bin("turbo")? - .arg("query") - .arg(query) - .current_dir(tempdir.path()) - .output()?; - - let stdout = String::from_utf8(output.stdout)?; - let query_output: serde_json::Value = serde_json::from_str(&stdout)?; - insta::assert_json_snapshot!(query_output); - - Ok(()) -} +mod common; #[cfg(not(windows))] #[test] fn test_double_symlink() -> Result<(), anyhow::Error> { - check_query( + check_json!( "oxc_repro", - "query { + "npm@10.5.0", + "query", + "get_dependencies" => "query { file(path: \"./index.js\") { path dependencies { @@ -55,6 +16,33 @@ fn test_double_symlink() -> Result<(), anyhow::Error> { } } }", - )?; + ); Ok(()) } + +#[test] +fn test_trace() -> Result<(), anyhow::Error> { + // Separate because the `\\` -> `/` filter isn't compatible with ast + check_json!( + "turbo_trace", + "npm@10.5.0", + "query", + "get `main.ts` with ast" => "query { file(path: \"main.ts\") { path ast } }", + ); + + insta::with_settings!({ filters => vec![(r"\\\\", "/")]}, { + check_json!( + "turbo_trace", + "npm@10.5.0", + "query", + "get `main.ts`" => "query { file(path: \"main.ts\") { path } }", + "get `main.ts` with dependencies" => "query { file(path: \"main.ts\") { path, dependencies { files { items { path } } } } }", + "get `button.tsx` with dependencies" => "query { file(path: \"button.tsx\") { path, dependencies { files { items { path } } } } }", + "get `circular.ts` with dependencies" => "query { file(path: \"circular.ts\") { path dependencies { files { items { path } } } } }", + "get `invalid.ts` with dependencies" => "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", + "get `main.ts` with depth = 0" => "query { file(path: \"main.ts\") { path dependencies(depth: 1) { files { items { path } } } } }", + ); + + Ok(()) + }) +} diff --git a/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..2e879b27d8d8f --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "index.js", + "dependencies": { + "files": { + "items": [ + { + "path": "nm/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..2e879b27d8d8f --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "index.js", + "dependencies": { + "files": { + "items": [ + { + "path": "nm/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..183e2c8e75dd7 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "button.tsx", + "dependencies": { + "files": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..e4950e2aa3f9d --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "circular.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "circular2.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..8354df28773f7 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,27 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "invalid.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + } + ] + }, + "errors": { + "items": [ + { + "message": "failed to resolve import" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap new file mode 100644 index 0000000000000..41503d9c76a44 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap @@ -0,0 +1,11 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts" + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap new file mode 100644 index 0000000000000..863d9791335e2 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap @@ -0,0 +1,309 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "ast": { + "type": "Module", + "span": { + "start": 1, + "end": 169 + }, + "body": [ + { + "type": "ImportDeclaration", + "span": { + "start": 1, + "end": 35 + }, + "specifiers": [ + { + "type": "ImportSpecifier", + "span": { + "start": 10, + "end": 16 + }, + "local": { + "type": "Identifier", + "span": { + "start": 10, + "end": 16 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "imported": null, + "isTypeOnly": false + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 24, + "end": 34 + }, + "value": "./button", + "raw": "\"./button\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 36, + "end": 60 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 43, + "end": 46 + }, + "local": { + "type": "Identifier", + "span": { + "start": 43, + "end": 46 + }, + "ctxt": 0, + "value": "foo", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 52, + "end": 59 + }, + "value": "./foo", + "raw": "\"./foo\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 61, + "end": 96 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 68, + "end": 74 + }, + "local": { + "type": "Identifier", + "span": { + "start": 68, + "end": 74 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 80, + "end": 95 + }, + "value": "repeat-string", + "raw": "\"repeat-string\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "VariableDeclaration", + "span": { + "start": 98, + "end": 126 + }, + "ctxt": 0, + "kind": "const", + "declare": false, + "declarations": [ + { + "type": "VariableDeclarator", + "span": { + "start": 104, + "end": 125 + }, + "id": { + "type": "Identifier", + "span": { + "start": 104, + "end": 110 + }, + "ctxt": 0, + "value": "button", + "optional": false, + "typeAnnotation": null + }, + "init": { + "type": "NewExpression", + "span": { + "start": 113, + "end": 125 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 117, + "end": 123 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "arguments": [], + "typeArguments": null + }, + "definite": false + } + ] + }, + { + "type": "ExpressionStatement", + "span": { + "start": 128, + "end": 144 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 128, + "end": 143 + }, + "ctxt": 0, + "callee": { + "type": "MemberExpression", + "span": { + "start": 128, + "end": 141 + }, + "object": { + "type": "Identifier", + "span": { + "start": 128, + "end": 134 + }, + "ctxt": 0, + "value": "button", + "optional": false + }, + "property": { + "type": "Identifier", + "span": { + "start": 135, + "end": 141 + }, + "value": "render" + } + }, + "arguments": [], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 145, + "end": 162 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 145, + "end": 161 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 145, + "end": 151 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "StringLiteral", + "span": { + "start": 152, + "end": 157 + }, + "value": "foo", + "raw": "\"foo\"" + } + }, + { + "spread": null, + "expression": { + "type": "NumericLiteral", + "span": { + "start": 159, + "end": 160 + }, + "value": 5.0, + "raw": "5" + } + } + ], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 163, + "end": 169 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 163, + "end": 168 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 163, + "end": 166 + }, + "ctxt": 0, + "value": "foo", + "optional": false + }, + "arguments": [], + "typeArguments": null + } + } + ], + "interpreter": null + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..d4762d093daf4 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,29 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "bar.js" + }, + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules/repeat-string/index.js" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap new file mode 100644 index 0000000000000..d555c7a390292 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules/repeat-string/index.js" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..183e2c8e75dd7 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "button.tsx", + "dependencies": { + "files": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..e4950e2aa3f9d --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "circular.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "circular2.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..8354df28773f7 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,27 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "invalid.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + } + ] + }, + "errors": { + "items": [ + { + "message": "failed to resolve import" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0).snap new file mode 100644 index 0000000000000..41503d9c76a44 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0).snap @@ -0,0 +1,11 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts" + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap new file mode 100644 index 0000000000000..863d9791335e2 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap @@ -0,0 +1,309 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "ast": { + "type": "Module", + "span": { + "start": 1, + "end": 169 + }, + "body": [ + { + "type": "ImportDeclaration", + "span": { + "start": 1, + "end": 35 + }, + "specifiers": [ + { + "type": "ImportSpecifier", + "span": { + "start": 10, + "end": 16 + }, + "local": { + "type": "Identifier", + "span": { + "start": 10, + "end": 16 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "imported": null, + "isTypeOnly": false + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 24, + "end": 34 + }, + "value": "./button", + "raw": "\"./button\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 36, + "end": 60 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 43, + "end": 46 + }, + "local": { + "type": "Identifier", + "span": { + "start": 43, + "end": 46 + }, + "ctxt": 0, + "value": "foo", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 52, + "end": 59 + }, + "value": "./foo", + "raw": "\"./foo\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "ImportDeclaration", + "span": { + "start": 61, + "end": 96 + }, + "specifiers": [ + { + "type": "ImportDefaultSpecifier", + "span": { + "start": 68, + "end": 74 + }, + "local": { + "type": "Identifier", + "span": { + "start": 68, + "end": 74 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + } + } + ], + "source": { + "type": "StringLiteral", + "span": { + "start": 80, + "end": 95 + }, + "value": "repeat-string", + "raw": "\"repeat-string\"" + }, + "typeOnly": false, + "with": null, + "phase": "evaluation" + }, + { + "type": "VariableDeclaration", + "span": { + "start": 98, + "end": 126 + }, + "ctxt": 0, + "kind": "const", + "declare": false, + "declarations": [ + { + "type": "VariableDeclarator", + "span": { + "start": 104, + "end": 125 + }, + "id": { + "type": "Identifier", + "span": { + "start": 104, + "end": 110 + }, + "ctxt": 0, + "value": "button", + "optional": false, + "typeAnnotation": null + }, + "init": { + "type": "NewExpression", + "span": { + "start": 113, + "end": 125 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 117, + "end": 123 + }, + "ctxt": 0, + "value": "Button", + "optional": false + }, + "arguments": [], + "typeArguments": null + }, + "definite": false + } + ] + }, + { + "type": "ExpressionStatement", + "span": { + "start": 128, + "end": 144 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 128, + "end": 143 + }, + "ctxt": 0, + "callee": { + "type": "MemberExpression", + "span": { + "start": 128, + "end": 141 + }, + "object": { + "type": "Identifier", + "span": { + "start": 128, + "end": 134 + }, + "ctxt": 0, + "value": "button", + "optional": false + }, + "property": { + "type": "Identifier", + "span": { + "start": 135, + "end": 141 + }, + "value": "render" + } + }, + "arguments": [], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 145, + "end": 162 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 145, + "end": 161 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 145, + "end": 151 + }, + "ctxt": 0, + "value": "repeat", + "optional": false + }, + "arguments": [ + { + "spread": null, + "expression": { + "type": "StringLiteral", + "span": { + "start": 152, + "end": 157 + }, + "value": "foo", + "raw": "\"foo\"" + } + }, + { + "spread": null, + "expression": { + "type": "NumericLiteral", + "span": { + "start": 159, + "end": 160 + }, + "value": 5.0, + "raw": "5" + } + } + ], + "typeArguments": null + } + }, + { + "type": "ExpressionStatement", + "span": { + "start": 163, + "end": 169 + }, + "expression": { + "type": "CallExpression", + "span": { + "start": 163, + "end": 168 + }, + "ctxt": 0, + "callee": { + "type": "Identifier", + "span": { + "start": 163, + "end": 166 + }, + "ctxt": 0, + "value": "foo", + "optional": false + }, + "arguments": [], + "typeArguments": null + } + } + ], + "interpreter": null + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..d4762d093daf4 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,29 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "bar.js" + }, + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules/repeat-string/index.js" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap new file mode 100644 index 0000000000000..d555c7a390292 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "main.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "button.tsx" + }, + { + "path": "foo.js" + }, + { + "path": "node_modules/repeat-string/index.js" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap new file mode 100644 index 0000000000000..cd71b526b9bce --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap @@ -0,0 +1,8 @@ +--- +source: crates/turborepo/tests/query.rs +expression: stderr +--- + WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. +turbo 2.2.4-canary.0 + + WARNING query command is experimental and may change in the future From a9a0ef5d5f63570d1ff1ba91abc6c5a78afa719c Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Fri, 25 Oct 2024 13:37:12 -0400 Subject: [PATCH 117/218] updates `jest`/`ts-jest` to latest (#9155) --- crates/turborepo-lib/src/turbo_json/loader.rs | 4 +- docs/repo-docs/reference/run.mdx | 2 +- examples/kitchen-sink/apps/api/package.json | 2 +- .../apps/api/src/__tests__/server.test.ts | 1 + .../{jest-preset.js => jest-preset.ts} | 8 +- .../node/{jest-preset.js => jest-preset.ts} | 8 +- .../packages/jest-presets/package.json | 9 +- .../kitchen-sink/packages/logger/package.json | 2 +- .../packages/logger/src/__tests__/log.test.ts | 1 + .../kitchen-sink/packages/ui/package.json | 2 +- .../ui/src/counter-button/index.test.tsx | 1 + .../packages/ui/src/link/index.test.tsx | 1 + examples/kitchen-sink/pnpm-lock.yaml | 30 +- examples/with-docker/apps/api/package.json | 2 +- .../apps/api/src/__tests__/server.test.ts | 1 + .../node/{jest-preset.js => jest-preset.ts} | 8 +- .../packages/jest-presets/package.json | 7 +- .../with-docker/packages/logger/package.json | 2 +- .../packages/logger/src/__tests__/log.test.ts | 1 + examples/with-docker/yarn.lock | 84 +- examples/with-nestjs/apps/api/jest.config.js | 4 - examples/with-nestjs/apps/api/jest.config.ts | 3 + examples/with-nestjs/apps/api/package.json | 8 +- .../apps/api/src/app.controller.spec.ts | 1 + .../api/src/links/links.controller.spec.ts | 1 + .../apps/api/src/links/links.service.spec.ts | 1 + .../with-nestjs/apps/api/test/app.e2e-spec.ts | 1 + examples/with-nestjs/apps/web/jest.config.js | 3 - examples/with-nestjs/apps/web/jest.config.ts | 3 + examples/with-nestjs/apps/web/package.json | 4 +- .../with-nestjs/apps/web/test/layout.spec.tsx | 1 + .../with-nestjs/apps/web/test/page.spec.tsx | 5 +- .../with-nestjs/packages/api/package.json | 2 +- .../with-nestjs/packages/jest-config/base.js | 198 -- .../with-nestjs/packages/jest-config/base.ts | 9 + .../packages/jest-config/{nest.js => nest.ts} | 10 +- .../with-nestjs/packages/jest-config/next.js | 31 - .../with-nestjs/packages/jest-config/next.ts | 16 + .../packages/jest-config/package.json | 3 +- examples/with-nestjs/pnpm-lock.yaml | 142 +- .../__test__/todo-service.test.ts | 12 +- .../typeorm-service/__test__/typeorm.test.ts | 10 +- packages/create-turbo/__tests__/git.test.ts | 7 +- packages/create-turbo/__tests__/index.test.ts | 9 +- .../{jest.config.js => jest.config.ts} | 9 +- packages/create-turbo/package.json | 6 +- packages/eslint-config/library.js | 19 + .../__fixtures__/workspace/package-lock.json | 12 +- .../eslint-plugin-turbo/__tests__/cwd.test.ts | 1 + .../{jest.config.js => jest.config.ts} | 9 +- packages/eslint-plugin-turbo/package.json | 6 +- packages/turbo-benchmark/package.json | 3 + packages/turbo-benchmark/src/generate.mjs | 6 +- .../{jest.config.js => jest.config.ts} | 8 +- .../src/templates/src/__tests__/index.test.ts | 1 + .../__tests__/add-package-manager.test.ts | 29 +- .../__tests__/add-package-names.test.ts | 23 +- .../__tests__/clean-globs.test.ts | 15 +- .../__tests__/create-turbo-config.test.ts | 81 +- .../__tests__/generate-package-name.test.ts | 1 + .../get-transforms-for-migration.test.ts | 3 +- .../get-turbo-upgrade-command.test.ts | 11 +- .../__tests__/migrate-dot-env.test.ts | 35 +- .../migrate-env-var-dependencies.test.ts | 189 +- .../turbo-codemod/__tests__/migrate.test.ts | 3 +- .../__tests__/rename-output-mode.test.ts | 39 +- .../__tests__/rename-pipeline.ts | 15 +- .../__tests__/set-default-outputs.test.ts | 39 +- .../__tests__/stabilize-env-mode.test.ts | 33 +- .../__tests__/stabilize-ui.test.ts | 13 +- ...ransform-env-literals-to-wildcards.test.ts | 21 +- .../turbo-codemod/__tests__/transform.test.ts | 3 +- .../{jest.config.js => jest.config.ts} | 9 +- packages/turbo-codemod/package.json | 6 +- .../generators/templates/transformer.test.hbs | 5 +- packages/turbo-gen/__tests__/raw.test.ts | 3 +- .../{jest.config.js => jest.config.ts} | 9 +- packages/turbo-gen/package.json | 8 +- .../__tests__/checkCommit.test.ts | 1 + .../turbo-ignore/__tests__/errors.test.ts | 1 + .../__tests__/getComparison.test.ts | 162 +- .../turbo-ignore/__tests__/getTask.test.ts | 20 +- .../__tests__/getTurboVersion.test.ts | 12 +- .../__tests__/getWorkspace.test.ts | 11 +- .../turbo-ignore/__tests__/ignore.test.ts | 273 +-- .../{jest.config.js => jest.config.ts} | 9 +- packages/turbo-ignore/package.json | 6 +- .../__tests__/affected-packages.test.ts | 4 +- packages/turbo-telemetry/src/config.test.ts | 48 +- packages/turbo-telemetry/src/utils.test.ts | 8 +- packages/turbo-test-utils/package.json | 7 +- packages/turbo-test-utils/src/mockEnv.ts | 2 + packages/turbo-test-utils/src/spyConsole.ts | 9 +- packages/turbo-test-utils/src/spyExit.ts | 5 +- packages/turbo-test-utils/src/useFixtures.ts | 1 + packages/turbo-test-utils/src/validateLogs.ts | 24 +- packages/turbo-types/schemas/schema.json | 2 +- packages/turbo-types/schemas/schema.v1.json | 2 +- packages/turbo-types/schemas/schema.v2.json | 2 +- packages/turbo-types/src/types/config-v1.ts | 2 +- packages/turbo-types/src/types/config-v2.ts | 2 +- .../turbo-utils/__tests__/convertCase.test.ts | 1 + .../turbo-utils/__tests__/examples.test.ts | 7 +- .../__tests__/getTurboConfigs.test.ts | 73 +- .../__tests__/getTurboRoot.test.ts | 9 +- .../__tests__/isFolderEmpty.test.ts | 5 +- .../turbo-utils/__tests__/isWritable.test.ts | 7 +- .../{jest.config.js => jest.config.ts} | 9 +- packages/turbo-utils/package.json | 6 +- .../turbo-workspaces/__tests__/index.test.ts | 7 +- .../__tests__/managers.test.ts | 15 +- .../turbo-workspaces/__tests__/utils.test.ts | 3 +- .../{jest.config.js => jest.config.ts} | 9 +- packages/turbo-workspaces/package.json | 6 +- pnpm-lock.yaml | 1953 +++++++++-------- turborepo-tests/integration/package.json | 1 + 116 files changed, 2117 insertions(+), 1940 deletions(-) rename examples/kitchen-sink/packages/jest-presets/browser/{jest-preset.js => jest-preset.ts} (74%) rename examples/kitchen-sink/packages/jest-presets/node/{jest-preset.js => jest-preset.ts} (72%) rename examples/with-docker/packages/jest-presets/node/{jest-preset.js => jest-preset.ts} (72%) delete mode 100644 examples/with-nestjs/apps/api/jest.config.js create mode 100644 examples/with-nestjs/apps/api/jest.config.ts delete mode 100644 examples/with-nestjs/apps/web/jest.config.js create mode 100644 examples/with-nestjs/apps/web/jest.config.ts delete mode 100644 examples/with-nestjs/packages/jest-config/base.js create mode 100644 examples/with-nestjs/packages/jest-config/base.ts rename examples/with-nestjs/packages/jest-config/{nest.js => nest.ts} (57%) delete mode 100644 examples/with-nestjs/packages/jest-config/next.js create mode 100644 examples/with-nestjs/packages/jest-config/next.ts rename packages/create-turbo/{jest.config.js => jest.config.ts} (82%) rename packages/eslint-plugin-turbo/{jest.config.js => jest.config.ts} (79%) rename packages/turbo-benchmark/src/templates/{jest.config.js => jest.config.ts} (72%) rename packages/turbo-codemod/{jest.config.js => jest.config.ts} (87%) rename packages/turbo-gen/{jest.config.js => jest.config.ts} (82%) rename packages/turbo-ignore/{jest.config.js => jest.config.ts} (83%) rename packages/turbo-utils/{jest.config.js => jest.config.ts} (73%) rename packages/turbo-workspaces/{jest.config.js => jest.config.ts} (84%) diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs index b01fb054babfc..603ec5297306c 100644 --- a/crates/turborepo-lib/src/turbo_json/loader.rs +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -356,9 +356,9 @@ mod test { use crate::{task_graph::TaskDefinition, turbo_json::CONFIG_FILE}; #[test_case(r"{}", TurboJson::default() ; "empty")] - #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.js"] }"#, + #[test_case(r#"{ "globalDependencies": ["tsconfig.json", "jest.config.ts"] }"#, TurboJson { - global_deps: vec!["jest.config.js".to_string(), "tsconfig.json".to_string()], + global_deps: vec!["jest.config.ts".to_string(), "tsconfig.json".to_string()], ..TurboJson::default() } ; "global dependencies (sorted)")] diff --git a/docs/repo-docs/reference/run.mdx b/docs/repo-docs/reference/run.mdx index e4f950669bd59..7b71f34025351 100644 --- a/docs/repo-docs/reference/run.mdx +++ b/docs/repo-docs/reference/run.mdx @@ -283,7 +283,7 @@ Specify glob of global filesystem dependencies to be hashed. Useful for `.env` a ```bash title="Terminal" turbo run build --global-deps=".env" -turbo run build --global-deps=".env.*" --global-deps=".eslintrc" --global-deps="jest.config.js" +turbo run build --global-deps=".env.*" --global-deps=".eslintrc" --global-deps="jest.config.ts" ``` diff --git a/examples/kitchen-sink/apps/api/package.json b/examples/kitchen-sink/apps/api/package.json index 9dbe81050df59..b62f2a2dc6a4b 100644 --- a/examples/kitchen-sink/apps/api/package.json +++ b/examples/kitchen-sink/apps/api/package.json @@ -22,13 +22,13 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/body-parser": "^1.19.5", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", "@types/morgan": "^1.9.9", "@types/node": "^20.11.24", "@types/supertest": "^6.0.2", diff --git a/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts index e72e8886e015f..8d0bb06b95ea2 100644 --- a/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts +++ b/examples/kitchen-sink/apps/api/src/__tests__/server.test.ts @@ -1,4 +1,5 @@ import supertest from "supertest"; +import { describe, it, expect } from "@jest/globals"; import { createServer } from "../server"; describe("Server", () => { diff --git a/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js b/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts similarity index 74% rename from examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js rename to examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts index 3173ffd6fbac0..86e7e0f7aedf5 100644 --- a/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.js +++ b/examples/kitchen-sink/packages/jest-presets/browser/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], testEnvironment: "jsdom", transform: { @@ -11,4 +13,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/kitchen-sink/packages/jest-presets/node/jest-preset.js b/examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts similarity index 72% rename from examples/kitchen-sink/packages/jest-presets/node/jest-preset.js rename to examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts index b6c259304707f..f043d01b500ab 100644 --- a/examples/kitchen-sink/packages/jest-presets/node/jest-preset.js +++ b/examples/kitchen-sink/packages/jest-presets/node/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -10,4 +12,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/kitchen-sink/packages/jest-presets/package.json b/examples/kitchen-sink/packages/jest-presets/package.json index 3086e4107dbf3..e6567cc7dcd1b 100644 --- a/examples/kitchen-sink/packages/jest-presets/package.json +++ b/examples/kitchen-sink/packages/jest-presets/package.json @@ -4,13 +4,14 @@ "private": true, "license": "MIT", "files": [ - "browser/jest-preset.js", - "node/jest-preset.js" + "browser/jest-preset.ts", + "node/jest-preset.ts" ], "dependencies": { - "ts-jest": "^29.1.2" + "jest": "^29.7.0", + "ts-jest": "^29.2.5" }, "devDependencies": { "jest-environment-jsdom": "^29.7.0" } -} \ No newline at end of file +} diff --git a/examples/kitchen-sink/packages/logger/package.json b/examples/kitchen-sink/packages/logger/package.json index c2f53f4b7ffae..8f796e3f5c46d 100644 --- a/examples/kitchen-sink/packages/logger/package.json +++ b/examples/kitchen-sink/packages/logger/package.json @@ -18,10 +18,10 @@ "preset": "@repo/jest-presets/node" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "jest": "^29.7.0", "tsup": "^8.0.2", diff --git a/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts b/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts index e196fcc99f77b..55fd698fa28a9 100644 --- a/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts +++ b/examples/kitchen-sink/packages/logger/src/__tests__/log.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { log } from ".."; jest.spyOn(global.console, "log"); diff --git a/examples/kitchen-sink/packages/ui/package.json b/examples/kitchen-sink/packages/ui/package.json index f205d17522fe3..c071dad4460d8 100644 --- a/examples/kitchen-sink/packages/ui/package.json +++ b/examples/kitchen-sink/packages/ui/package.json @@ -31,10 +31,10 @@ "preset": "@repo/jest-presets/browser" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "workspace:*", "@repo/jest-presets": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "@types/react": "^18.2.62", "@types/react-dom": "^18.2.19", diff --git a/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx b/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx index fc548077c7b36..7e3a16b41403d 100644 --- a/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx +++ b/examples/kitchen-sink/packages/ui/src/counter-button/index.test.tsx @@ -1,3 +1,4 @@ +import { describe, it } from "@jest/globals"; import { createRoot } from "react-dom/client"; import { CounterButton } from "."; diff --git a/examples/kitchen-sink/packages/ui/src/link/index.test.tsx b/examples/kitchen-sink/packages/ui/src/link/index.test.tsx index d1a954e8a79fd..82a2e1a8fb6cd 100644 --- a/examples/kitchen-sink/packages/ui/src/link/index.test.tsx +++ b/examples/kitchen-sink/packages/ui/src/link/index.test.tsx @@ -1,3 +1,4 @@ +import { describe, it } from "@jest/globals"; import { createRoot } from "react-dom/client"; import { Link } from "."; diff --git a/examples/kitchen-sink/pnpm-lock.yaml b/examples/kitchen-sink/pnpm-lock.yaml index cfec1dc36b181..94a3a6c4ce7f0 100644 --- a/examples/kitchen-sink/pnpm-lock.yaml +++ b/examples/kitchen-sink/pnpm-lock.yaml @@ -67,6 +67,9 @@ importers: specifier: ^1.10.0 version: 1.10.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../../packages/config-eslint @@ -85,9 +88,6 @@ importers: '@types/express': specifier: ^4.17.21 version: 4.17.21 - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/morgan': specifier: ^1.9.9 version: 1.9.9 @@ -236,8 +236,11 @@ importers: packages/jest-presets: dependencies: + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.16.5) ts-jest: - specifier: ^29.1.2 + specifier: ^29.2.5 version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5) devDependencies: jest-environment-jsdom: @@ -246,6 +249,9 @@ importers: packages/logger: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../config-eslint @@ -255,9 +261,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../config-typescript - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/node': specifier: ^20.11.24 version: 20.16.5 @@ -273,6 +276,9 @@ importers: packages/ui: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@repo/eslint-config': specifier: workspace:* version: link:../config-eslint @@ -282,9 +288,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../config-typescript - '@types/jest': - specifier: ^29.5.12 - version: 29.5.13 '@types/node': specifier: ^20.11.24 version: 20.16.5 @@ -2539,13 +2542,6 @@ packages: dependencies: '@types/istanbul-lib-report': 3.0.3 - /@types/jest@29.5.13: - resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: diff --git a/examples/with-docker/apps/api/package.json b/examples/with-docker/apps/api/package.json index 0831bd2aeec15..ea10e6d1a55d9 100644 --- a/examples/with-docker/apps/api/package.json +++ b/examples/with-docker/apps/api/package.json @@ -21,13 +21,13 @@ "morgan": "^1.10.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "*", "@repo/jest-presets": "*", "@repo/typescript-config": "*", "@types/body-parser": "^1.19.5", "@types/cors": "^2.8.17", "@types/express": "^4.17.21", - "@types/jest": "^29.5.12", "@types/morgan": "^1.9.9", "@types/node": "^20.11.24", "@types/supertest": "^6.0.2", diff --git a/examples/with-docker/apps/api/src/__tests__/server.test.ts b/examples/with-docker/apps/api/src/__tests__/server.test.ts index 1385679fb36a5..55503bd86e8b4 100644 --- a/examples/with-docker/apps/api/src/__tests__/server.test.ts +++ b/examples/with-docker/apps/api/src/__tests__/server.test.ts @@ -1,4 +1,5 @@ import supertest from "supertest"; +import { describe, it, expect } from "@jest/globals"; import { createServer } from "../server"; describe("server", () => { diff --git a/examples/with-docker/packages/jest-presets/node/jest-preset.js b/examples/with-docker/packages/jest-presets/node/jest-preset.ts similarity index 72% rename from examples/with-docker/packages/jest-presets/node/jest-preset.js rename to examples/with-docker/packages/jest-presets/node/jest-preset.ts index b6c259304707f..f043d01b500ab 100644 --- a/examples/with-docker/packages/jest-presets/node/jest-preset.js +++ b/examples/with-docker/packages/jest-presets/node/jest-preset.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -10,4 +12,6 @@ module.exports = { "/dist", ], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/examples/with-docker/packages/jest-presets/package.json b/examples/with-docker/packages/jest-presets/package.json index 7457684ee21fe..6247a847d4a96 100644 --- a/examples/with-docker/packages/jest-presets/package.json +++ b/examples/with-docker/packages/jest-presets/package.json @@ -4,9 +4,10 @@ "private": true, "license": "MIT", "files": [ - "node/jest-preset.js" + "node/jest-preset.ts" ], "dependencies": { - "ts-jest": "^29.1.1" + "jest": "^29.7.0", + "ts-jest": "^29.2.5" } -} \ No newline at end of file +} diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index 2deb2618d1a0e..504e8e2f78fbb 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -18,10 +18,10 @@ "preset": "@repo/jest-presets/node" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@repo/eslint-config": "*", "@repo/jest-presets": "*", "@repo/typescript-config": "*", - "@types/jest": "^29.5.12", "@types/node": "^20.11.24", "eslint": "^8.57.0", "jest": "^29.7.0", diff --git a/examples/with-docker/packages/logger/src/__tests__/log.test.ts b/examples/with-docker/packages/logger/src/__tests__/log.test.ts index 0da12534d68e4..a31c4fc65c28d 100644 --- a/examples/with-docker/packages/logger/src/__tests__/log.test.ts +++ b/examples/with-docker/packages/logger/src/__tests__/log.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { log } from ".."; jest.spyOn(global.console, "log"); diff --git a/examples/with-docker/yarn.lock b/examples/with-docker/yarn.lock index c4f531eaacf78..ad143d2e1de25 100644 --- a/examples/with-docker/yarn.lock +++ b/examples/with-docker/yarn.lock @@ -988,14 +988,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^29.5.12": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== - dependencies: - expect "^29.0.0" - pretty-format "^29.0.0" - "@types/json-schema@^7.0.12", "@types/json-schema@^7.0.9": version "7.0.15" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" @@ -1577,6 +1569,11 @@ ast-types-flow@^0.0.8: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.8.tgz#0a85e1c92695769ac13a428bb653e7538bea27d6" integrity sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ== +async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + asynciterator.prototype@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/asynciterator.prototype/-/asynciterator.prototype-1.0.0.tgz#8c5df0514936cdd133604dfcc9d3fb93f09b2b62" @@ -1733,7 +1730,7 @@ browserslist@^4.22.2: node-releases "^2.0.14" update-browserslist-db "^1.0.13" -bs-logger@0.x: +bs-logger@^0.2.6: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== @@ -1807,7 +1804,7 @@ chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2127,6 +2124,13 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== +ejs@^3.1.10: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + electron-to-chromium@^1.4.648: version "1.4.652" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.652.tgz#1591c7542d43c990de786374c07a9d6ad2b63787" @@ -2642,7 +2646,7 @@ exit@^0.1.2: resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== -expect@^29.0.0, expect@^29.7.0: +expect@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== @@ -2742,6 +2746,13 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3450,6 +3461,16 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + jest-changed-files@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" @@ -3946,7 +3967,7 @@ locate-path@^6.0.0: dependencies: p-locate "^5.0.0" -lodash.memoize@4.x: +lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== @@ -3994,7 +4015,7 @@ make-dir@^4.0.0: dependencies: semver "^7.5.3" -make-error@1.x: +make-error@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== @@ -4085,6 +4106,13 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: dependencies: brace-expansion "^1.1.7" +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + minimist@^1.2.0, minimist@^1.2.6: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" @@ -4476,7 +4504,7 @@ prettier@^3.2.5: resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.5.tgz#e52bc3090586e824964a8813b09aba6233b28368" integrity sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A== -pretty-format@^29.0.0, pretty-format@^29.7.0: +pretty-format@^29.7.0: version "29.7.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== @@ -4783,6 +4811,11 @@ semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4: dependencies: lru-cache "^6.0.0" +semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + send@0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" @@ -5201,19 +5234,20 @@ ts-api-utils@^1.0.1: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.0.3.tgz#f12c1c781d04427313dbac808f453f050e54a331" integrity sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg== -ts-jest@^29.1.1: - version "29.1.2" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.2.tgz#7613d8c81c43c8cb312c6904027257e814c40e09" - integrity sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g== +ts-jest@^29.2.5: + version "29.2.5" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.2.5.tgz#591a3c108e1f5ebd013d3152142cb5472b399d63" + integrity sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA== dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" + bs-logger "^0.2.6" + ejs "^3.1.10" + fast-json-stable-stringify "^2.1.0" jest-util "^29.0.0" json5 "^2.2.3" - lodash.memoize "4.x" - make-error "1.x" - semver "^7.5.3" - yargs-parser "^21.0.1" + lodash.memoize "^4.1.2" + make-error "^1.3.6" + semver "^7.6.3" + yargs-parser "^21.1.1" tsconfig-paths@^3.15.0: version "3.15.0" @@ -5545,7 +5579,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^21.0.1, yargs-parser@^21.1.1: +yargs-parser@^21.1.1: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== diff --git a/examples/with-nestjs/apps/api/jest.config.js b/examples/with-nestjs/apps/api/jest.config.js deleted file mode 100644 index 755178fb43109..0000000000000 --- a/examples/with-nestjs/apps/api/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -/** @type {import('jest').Config} */ -module.exports = { - ...require('@repo/jest-config/nest'), -}; diff --git a/examples/with-nestjs/apps/api/jest.config.ts b/examples/with-nestjs/apps/api/jest.config.ts new file mode 100644 index 0000000000000..ddfc984b6385c --- /dev/null +++ b/examples/with-nestjs/apps/api/jest.config.ts @@ -0,0 +1,3 @@ +import { config } from '@repo/jest-config/nest'; + +export default config; diff --git a/examples/with-nestjs/apps/api/package.json b/examples/with-nestjs/apps/api/package.json index a60e6a5b62900..26f0718bad3d1 100644 --- a/examples/with-nestjs/apps/api/package.json +++ b/examples/with-nestjs/apps/api/package.json @@ -23,6 +23,7 @@ "rxjs": "^7.8.1" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@nestjs/cli": "^10.0.0", "@nestjs/schematics": "^10.0.0", "@nestjs/testing": "^10.0.0", @@ -30,15 +31,14 @@ "@repo/jest-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/express": "^4.17.17", - "@types/jest": "^29.5.2", "@types/node": "^20.3.1", "@types/supertest": "^6.0.0", - "jest": "^29.5.0", + "jest": "^29.7.0", "source-map-support": "^0.5.21", "supertest": "^6.3.3", - "ts-jest": "^29.1.0", + "ts-jest": "^29.2.5", "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", "typescript": "5.4.5" } diff --git a/examples/with-nestjs/apps/api/src/app.controller.spec.ts b/examples/with-nestjs/apps/api/src/app.controller.spec.ts index d22f3890a380c..939c4ac913396 100644 --- a/examples/with-nestjs/apps/api/src/app.controller.spec.ts +++ b/examples/with-nestjs/apps/api/src/app.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { AppController } from './app.controller'; import { AppService } from './app.service'; diff --git a/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts b/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts index fdff163822a7c..23368ce420c74 100644 --- a/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts +++ b/examples/with-nestjs/apps/api/src/links/links.controller.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { LinksController } from './links.controller'; import { LinksService } from './links.service'; diff --git a/examples/with-nestjs/apps/api/src/links/links.service.spec.ts b/examples/with-nestjs/apps/api/src/links/links.service.spec.ts index 7b1acd4266d9e..71cfcbccefb2f 100644 --- a/examples/with-nestjs/apps/api/src/links/links.service.spec.ts +++ b/examples/with-nestjs/apps/api/src/links/links.service.spec.ts @@ -1,4 +1,5 @@ import { Test, TestingModule } from '@nestjs/testing'; +import { describe, it, expect, beforeEach } from '@jest/globals'; import { LinksService } from './links.service'; describe('LinksService', () => { diff --git a/examples/with-nestjs/apps/api/test/app.e2e-spec.ts b/examples/with-nestjs/apps/api/test/app.e2e-spec.ts index 9ceebc4bec55a..6e55bca0066b1 100644 --- a/examples/with-nestjs/apps/api/test/app.e2e-spec.ts +++ b/examples/with-nestjs/apps/api/test/app.e2e-spec.ts @@ -1,5 +1,6 @@ import { Test, TestingModule } from '@nestjs/testing'; import { INestApplication } from '@nestjs/common'; +import { describe, it, beforeEach } from '@jest/globals'; import request from 'supertest'; import { AppModule } from './../src/app.module'; diff --git a/examples/with-nestjs/apps/web/jest.config.js b/examples/with-nestjs/apps/web/jest.config.js deleted file mode 100644 index 40a0467550b96..0000000000000 --- a/examples/with-nestjs/apps/web/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -const config = require('@repo/jest-config/next'); - -module.exports = config(); diff --git a/examples/with-nestjs/apps/web/jest.config.ts b/examples/with-nestjs/apps/web/jest.config.ts new file mode 100644 index 0000000000000..c348184f71bca --- /dev/null +++ b/examples/with-nestjs/apps/web/jest.config.ts @@ -0,0 +1,3 @@ +import config from '@repo/jest-config/next'; + +export default config; diff --git a/examples/with-nestjs/apps/web/package.json b/examples/with-nestjs/apps/web/package.json index a94cd0a8e9c1e..38ba0609562a1 100644 --- a/examples/with-nestjs/apps/web/package.json +++ b/examples/with-nestjs/apps/web/package.json @@ -18,6 +18,7 @@ "react-dom": "^18.2.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@next/eslint-plugin-next": "^14.1.1", "@playwright/test": "^1.44.0", "@repo/api": "workspace:*", @@ -26,11 +27,10 @@ "@repo/typescript-config": "workspace:*", "@testing-library/jest-dom": "^6.4.5", "@testing-library/react": "^15.0.7", - "@types/jest": "^29.5.2", "@types/node": "^20.11.24", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", - "jest": "^29.5.0", + "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "typescript": "5.4.5" } diff --git a/examples/with-nestjs/apps/web/test/layout.spec.tsx b/examples/with-nestjs/apps/web/test/layout.spec.tsx index 483ad004a088d..82d6383e775ea 100644 --- a/examples/with-nestjs/apps/web/test/layout.spec.tsx +++ b/examples/with-nestjs/apps/web/test/layout.spec.tsx @@ -1,4 +1,5 @@ import { metadata } from '../app/layout'; +import { describe, it, expect } from '@jest/globals'; describe('Root layout', () => { describe('metadata', () => { diff --git a/examples/with-nestjs/apps/web/test/page.spec.tsx b/examples/with-nestjs/apps/web/test/page.spec.tsx index b2128288ea258..56c1a40ee7fcc 100644 --- a/examples/with-nestjs/apps/web/test/page.spec.tsx +++ b/examples/with-nestjs/apps/web/test/page.spec.tsx @@ -1,4 +1,5 @@ import { render } from '@testing-library/react'; +import { describe, it, expect, jest, afterAll } from '@jest/globals'; import RootPage from '../app/page'; @@ -6,12 +7,12 @@ window.fetch = jest.fn().mockImplementation(() => Promise.resolve({ ok: true, json: () => [], - }), + }) ); describe('Root page', () => { const { container, unmount } = render( - , + ); it('should match the snapshot', () => { diff --git a/examples/with-nestjs/packages/api/package.json b/examples/with-nestjs/packages/api/package.json index 3ec3c824e99c2..3a2b64cb30459 100644 --- a/examples/with-nestjs/packages/api/package.json +++ b/examples/with-nestjs/packages/api/package.json @@ -41,7 +41,7 @@ "@repo/typescript-config": "workspace:*", "@types/node": "^20.3.1", "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "typescript": "5.4.5" } } diff --git a/examples/with-nestjs/packages/jest-config/base.js b/examples/with-nestjs/packages/jest-config/base.js deleted file mode 100644 index 31bff6b3ba381..0000000000000 --- a/examples/with-nestjs/packages/jest-config/base.js +++ /dev/null @@ -1,198 +0,0 @@ -/** - * For a detailed explanation regarding each configuration property, visit: - * https://jestjs.io/docs/configuration - */ - -/** @type {import('jest').Config} */ -const config = { - // All imported modules in your tests should be mocked automatically - // automock: false, - - // Stop running tests after `n` failures - // bail: 0, - - // The directory where Jest should store its cached dependency information - // cacheDirectory: "cacheDirectory", - - // Automatically clear mock calls, instances, contexts and results before every test - // clearMocks: false, - - // Indicates whether the coverage information should be collected while executing the test - collectCoverage: true, - - // An array of glob patterns indicating a set of files for which coverage information should be collected - // collectCoverageFrom: undefined, - - // The directory where Jest should output its coverage files - coverageDirectory: 'coverage', - - // An array of regexp pattern strings used to skip coverage collection - // coveragePathIgnorePatterns: [ - // "\\\\node_modules\\\\" - // ], - - // Indicates which provider should be used to instrument code for coverage - coverageProvider: 'v8', - - // A list of reporter names that Jest uses when writing coverage reports - // coverageReporters: [ - // "json", - // "text", - // "lcov", - // "clover" - // ], - - // An object that configures minimum threshold enforcement for coverage results - // coverageThreshold: undefined, - - // A path to a custom dependency extractor - // dependencyExtractor: undefined, - - // Make calling deprecated APIs throw helpful error messages - // errorOnDeprecated: false, - - // The default configuration for fake timers - // fakeTimers: { - // "enableGlobally": false - // }, - - // Force coverage collection from ignored files using an array of glob patterns - // forceCoverageMatch: [], - - // A path to a module which exports an async function that is triggered once before all test suites - // globalSetup: undefined, - - // A path to a module which exports an async function that is triggered once after all test suites - // globalTeardown: undefined, - - // A set of global variables that need to be available in all test environments - // globals: {}, - - // The maximum amount of workers used to run your tests. Can be specified as % or a number. E.g. maxWorkers: 10% will use 10% of your CPU amount + 1 as the maximum worker number. maxWorkers: 2 will use a maximum of 2 workers. - // maxWorkers: "50%", - - // An array of directory names to be searched recursively up from the requiring module's location - // moduleDirectories: [ - // "node_modules" - // ], - - // An array of file extensions your modules use - moduleFileExtensions: [ - 'js', - // "mjs", - // "cjs", - // "jsx", - 'ts', - // "tsx", - 'json', - // "node" - ], - - // A map from regular expressions to module names or to arrays of module names that allow to stub out resources with a single module - // moduleNameMapper: {}, - - // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader - // modulePathIgnorePatterns: [], - - // Activates notifications for test results - // notify: false, - - // An enum that specifies notification mode. Requires { notify: true } - // notifyMode: "failure-change", - - // A preset that is used as a base for Jest's configuration - // preset: undefined, - - // Run tests from one or more projects - // projects: undefined, - - // Use this configuration option to add custom reporters to Jest - // reporters: undefined, - - // Automatically reset mock state before every test - // resetMocks: false, - - // Reset the module registry before running each individual test - // resetModules: false, - - // A path to a custom resolver - // resolver: undefined, - - // Automatically restore mock state and implementation before every test - // restoreMocks: false, - - // The root directory that Jest should scan for tests and modules within - // rootDir: undefined, - - // A list of paths to directories that Jest should use to search for files in - // roots: [ - // "" - // ], - - // Allows you to use a custom runner instead of Jest's default test runner - // runner: "jest-runner", - - // The paths to modules that run some code to configure or set up the testing environment before each test - // setupFiles: [], - - // A list of paths to modules that run some code to configure or set up the testing framework before each test - // setupFilesAfterEnv: [], - - // The number of seconds after which a test is considered as slow and reported as such in the results. - // slowTestThreshold: 5, - - // A list of paths to snapshot serializer modules Jest should use for snapshot testing - // snapshotSerializers: [], - - // The test environment that will be used for testing - testEnvironment: 'jsdom', - - // Options that will be passed to the testEnvironment - // testEnvironmentOptions: {}, - - // Adds a location field to test results - // testLocationInResults: false, - - // The glob patterns Jest uses to detect test files - // testMatch: [ - // "**/__tests__/**/*.[jt]s?(x)", - // "**/?(*.)+(spec|test).[tj]s?(x)" - // ], - - // An array of regexp pattern strings that are matched against all test paths, matched tests are skipped - // testPathIgnorePatterns: [ - // "\\\\node_modules\\\\" - // ], - - // The regexp pattern or array of patterns that Jest uses to detect test files - // testRegex: [], - - // This option allows the use of a custom results processor - // testResultsProcessor: undefined, - - // This option allows use of a custom test runner - // testRunner: "jest-circus/runner", - - // A map from regular expressions to paths to transformers - // transform: undefined, - - // An array of regexp pattern strings that are matched against all source file paths, matched files will skip transformation - // transformIgnorePatterns: [ - // "\\\\node_modules\\\\", - // "\\.pnp\\.[^\\\\]+$" - // ], - - // An array of regexp pattern strings that are matched against all modules before the module loader will automatically return a mock for them - // unmockedModulePathPatterns: undefined, - - // Indicates whether each individual test should be reported during the run - // verbose: undefined, - - // An array of regexp patterns that are matched against all source file paths before re-running tests in watch mode - // watchPathIgnorePatterns: [], - - // Whether to use watchman for file crawling - // watchman: true, -}; - -module.exports = config; diff --git a/examples/with-nestjs/packages/jest-config/base.ts b/examples/with-nestjs/packages/jest-config/base.ts new file mode 100644 index 0000000000000..4e6320105fe40 --- /dev/null +++ b/examples/with-nestjs/packages/jest-config/base.ts @@ -0,0 +1,9 @@ +import type { Config } from 'jest'; + +export const config = { + collectCoverage: true, + coverageDirectory: 'coverage', + coverageProvider: 'v8', + moduleFileExtensions: ['js', 'ts', 'json'], + testEnvironment: 'jsdom', +} as const satisfies Config; diff --git a/examples/with-nestjs/packages/jest-config/nest.js b/examples/with-nestjs/packages/jest-config/nest.ts similarity index 57% rename from examples/with-nestjs/packages/jest-config/nest.js rename to examples/with-nestjs/packages/jest-config/nest.ts index 95fc615358378..c2345675ec11f 100644 --- a/examples/with-nestjs/packages/jest-config/nest.js +++ b/examples/with-nestjs/packages/jest-config/nest.ts @@ -1,6 +1,8 @@ -/** @type {import('jest').Config} */ -module.exports = { - ...require('./base'), +import type { Config } from 'jest'; +import { config as baseConfig } from './base'; + +export const config = { + ...baseConfig, rootDir: 'src', testRegex: '.*\\.spec\\.ts$', transform: { @@ -9,4 +11,4 @@ module.exports = { collectCoverageFrom: ['**/*.(t|j)s'], coverageDirectory: '../coverage', testEnvironment: 'node', -}; +} as const satisfies Config; diff --git a/examples/with-nestjs/packages/jest-config/next.js b/examples/with-nestjs/packages/jest-config/next.js deleted file mode 100644 index 3d9631da7c697..0000000000000 --- a/examples/with-nestjs/packages/jest-config/next.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * @typedef {import('jest').Config} JestConfig - */ - -const nextJest = require('next/jest'); -const baseJest = require('./base'); - -const createJestConfig = nextJest({ - dir: './', -}); - -/** @type JestConfig */ -const config = { - ...baseJest, - moduleFileExtensions: [ - ...(baseJest.moduleFileExtensions ?? []), - 'jsx', - 'tsx', - ], -}; - -/** - * @type {(configOverwrite?: JestConfig) => Promise} - * - * @description Callable function. - * - * Can receive a `JestConfig` as value to overwrite the default values. - * - */ -module.exports = (configOverwrite) => - createJestConfig({ ...config, ...configOverwrite }); diff --git a/examples/with-nestjs/packages/jest-config/next.ts b/examples/with-nestjs/packages/jest-config/next.ts new file mode 100644 index 0000000000000..860c80916066a --- /dev/null +++ b/examples/with-nestjs/packages/jest-config/next.ts @@ -0,0 +1,16 @@ +import type { Config } from 'jest'; +// unfortunately, need to disambiguate the `Config` namespace @jest/types uses (via next/jest) and the `Config` type we want for typing our config here +import type { Config as ConfigNamespace } from '@jest/types'; +import nextJest from 'next/jest'; +import { config as baseConfig } from './base'; + +const createJestConfig = nextJest({ + dir: './', +}); + +const config = { + ...baseConfig, + moduleFileExtensions: [...baseConfig.moduleFileExtensions, 'jsx', 'tsx'], +} as const satisfies Config; + +export default createJestConfig(config); diff --git a/examples/with-nestjs/packages/jest-config/package.json b/examples/with-nestjs/packages/jest-config/package.json index de3eaa8e74ba8..4abb9616bbbc1 100644 --- a/examples/with-nestjs/packages/jest-config/package.json +++ b/examples/with-nestjs/packages/jest-config/package.json @@ -7,7 +7,8 @@ "access": "public" }, "devDependencies": { - "jest": "^29.5.0", + "@jest/types": "^29.6.3", + "jest": "^29.7.0", "next": "^14.1.1" } } diff --git a/examples/with-nestjs/pnpm-lock.yaml b/examples/with-nestjs/pnpm-lock.yaml index 6aad84f593522..4a14241853d38 100644 --- a/examples/with-nestjs/pnpm-lock.yaml +++ b/examples/with-nestjs/pnpm-lock.yaml @@ -42,6 +42,9 @@ importers: specifier: ^7.8.1 version: 7.8.1 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@nestjs/cli': specifier: ^10.0.0 version: 10.3.2 @@ -63,9 +66,6 @@ importers: '@types/express': specifier: ^4.17.17 version: 4.17.21 - '@types/jest': - specifier: ^29.5.2 - version: 29.5.12 '@types/node': specifier: ^20.3.1 version: 20.11.24 @@ -73,8 +73,8 @@ importers: specifier: ^6.0.0 version: 6.0.2 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -82,14 +82,14 @@ importers: specifier: ^6.3.3 version: 6.3.4 ts-jest: - specifier: ^29.1.0 - version: 29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) ts-loader: specifier: ^9.4.3 version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -112,6 +112,9 @@ importers: specifier: ^18.2.0 version: 18.2.0(react@18.2.0) devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@next/eslint-plugin-next': specifier: ^14.1.1 version: 14.1.1 @@ -132,13 +135,10 @@ importers: version: link:../../packages/typescript-config '@testing-library/jest-dom': specifier: ^6.4.5 - version: 6.4.5(@types/jest@29.5.12)(jest@29.7.0) + version: 6.4.5(@jest/globals@29.7.0)(jest@29.7.0) '@testing-library/react': specifier: ^15.0.7 version: 15.0.7(@types/react@18.2.61)(react-dom@18.2.0)(react@18.2.0) - '@types/jest': - specifier: ^29.5.2 - version: 29.5.12 '@types/node': specifier: ^20.11.24 version: 20.11.24 @@ -149,8 +149,8 @@ importers: specifier: ^18.2.19 version: 18.2.19 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-environment-jsdom: specifier: ^29.7.0 version: 29.7.0 @@ -177,8 +177,8 @@ importers: specifier: ^9.4.3 version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -212,9 +212,12 @@ importers: packages/jest-config: devDependencies: + '@jest/types': + specifier: ^29.6.3 + version: 29.6.3 jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) next: specifier: ^14.1.1 version: 14.1.1(@babel/core@7.24.5)(react-dom@18.2.0)(react@18.2.0) @@ -767,7 +770,7 @@ packages: slash: 3.0.0 dev: true - /@jest/core@29.7.0(ts-node@10.9.1): + /@jest/core@29.7.0(ts-node@10.9.2): resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -788,7 +791,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1407,7 +1410,7 @@ packages: pretty-format: 27.5.1 dev: true - /@testing-library/jest-dom@6.4.5(@types/jest@29.5.12)(jest@29.7.0): + /@testing-library/jest-dom@6.4.5(@jest/globals@29.7.0)(jest@29.7.0): resolution: {integrity: sha512-AguB9yvTXmCnySBP1lWjfNNUwpbElsaQ567lt2VdGqAdHtpieLgjmcVyv1q7PMIvLbgpDdkWV5Ydv3FEejyp2A==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} peerDependencies: @@ -1430,12 +1433,12 @@ packages: dependencies: '@adobe/css-tools': 4.3.3 '@babel/runtime': 7.23.2 - '@types/jest': 29.5.12 + '@jest/globals': 29.7.0 aria-query: 5.3.0 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 - jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) lodash: 4.17.21 redent: 3.0.0 dev: true @@ -1496,7 +1499,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.0 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -1658,13 +1661,6 @@ packages: '@types/istanbul-lib-report': 3.0.3 dev: true - /@types/jest@29.5.12: - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} - dependencies: - expect: 29.7.0 - pretty-format: 29.7.0 - dev: true - /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: @@ -2569,6 +2565,10 @@ packages: tslib: 2.6.2 dev: true + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -3129,7 +3129,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3138,7 +3138,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3435,6 +3435,14 @@ packages: /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 + dependencies: + jake: 10.9.2 + dev: true + /electron-to-chromium@1.4.768: resolution: {integrity: sha512-z2U3QcvNuxdkk33YV7R1bVMNq7fL23vq3WfO5BHcqrm4TnDGReouBfYKLEFh5umoK1XACjEwp8mmnhXk2EJigw==} @@ -4234,6 +4242,12 @@ packages: flat-cache: 3.0.4 dev: true + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.6 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -5255,6 +5269,17 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: 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} @@ -5293,7 +5318,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5303,14 +5328,14 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5321,7 +5346,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5356,7 +5381,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -5677,7 +5702,7 @@ packages: supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.11.24)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -5687,10 +5712,10 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 29.7.0(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6063,6 +6088,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimatch@8.0.4: resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} engines: {node: '>=16 || 14 >=14.17'} @@ -7122,6 +7154,12 @@ packages: lru-cache: 6.0.0 dev: true + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /send@0.18.0: resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} engines: {node: '>= 0.8.0'} @@ -7752,12 +7790,13 @@ packages: typescript: 5.4.5 dev: true - /ts-jest@29.1.2(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): - resolution: {integrity: sha512-br6GJoH/WUX4pu7FbZXuWGKGNDuU7b8Uj77g/Sp7puZV6EXzuByl6JrECvm0MzVzSTkSHWTihsXt+5XYER5b+g==} - engines: {node: ^16.10.0 || ^18.0.0 || >=20.0.0} + /ts-jest@29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + 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: '*' @@ -7766,6 +7805,8 @@ packages: peerDependenciesMeta: '@babel/core': optional: true + '@jest/transform': + optional: true '@jest/types': optional: true babel-jest: @@ -7775,13 +7816,14 @@ packages: dependencies: '@babel/core': 7.24.5 bs-logger: 0.2.6 + ejs: 3.1.10 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.11.24)(ts-node@10.9.2) jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 yargs-parser: 21.1.1 dev: true @@ -7802,8 +7844,8 @@ packages: webpack: 5.91.0 dev: true - /ts-node@10.9.1(@types/node@20.11.24)(typescript@5.4.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.11.24)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' diff --git a/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts b/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts index ef9d484256852..a6731f1d8d4e4 100644 --- a/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts +++ b/examples/with-typeorm/packages/typeorm-service/__test__/todo-service.test.ts @@ -1,4 +1,4 @@ -import { suite, expect, test, beforeEach, vi } from "vitest"; +import { suite, expect, it, beforeEach, vi } from "vitest"; import { TodoService } from "../src/domain/todo/todo.service"; import { TodoRepository } from "../src/domain/todo/todo.repository"; import { Todo } from "../src/domain/todo/todo.entity"; @@ -27,7 +27,7 @@ suite("TodoService Unit Tests", () => { todoService = new TodoService(mockTodoRepo as TodoRepository); }); - test("Insert", async () => { + it("Insert", async () => { const newTodo = await todoService.add("Hello World"); expect(newTodo.content).toBe("Hello World"); @@ -35,26 +35,26 @@ suite("TodoService Unit Tests", () => { expect(mockTodoRepo.insert).toHaveBeenCalledWith("Hello World"); }); - test("Select", async () => { + it("Select", async () => { const todo = await todoService.findById(1); expect(todo?.content).toBe("Hello World"); expect(mockTodoRepo.findById).toHaveBeenCalledWith(1); }); - test("Update", async () => { + it("Update", async () => { await todoService.complete(1); expect(mockTodoRepo.update).toHaveBeenCalledWith(1); }); - test("Delete", async () => { + it("Delete", async () => { await todoService.deleteById(1); expect(mockTodoRepo.delete).toHaveBeenCalledWith(1); }); - test("Find All", async () => { + it("Find All", async () => { const todoList = await todoService.findAll(); expect(todoList).toEqual([mockTodo]); diff --git a/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts b/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts index 28aaa562dfed6..3b63db193f9d3 100755 --- a/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts +++ b/examples/with-typeorm/packages/typeorm-service/__test__/typeorm.test.ts @@ -1,4 +1,4 @@ -import { suite, test, beforeEach, expect } from "vitest"; +import { suite, it, beforeEach, expect } from "vitest"; import "reflect-metadata"; import { DataSource, @@ -44,7 +44,7 @@ suite("typeorm with SQL.js", () => { todoRepo = dataSource.getRepository(Todo); }); - test("Insert", async () => { + it("Insert", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -53,7 +53,7 @@ suite("typeorm with SQL.js", () => { expect(newTodo.complete).toBeFalsy(); }); - test("Select", async () => { + it("Select", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -63,7 +63,7 @@ suite("typeorm with SQL.js", () => { expect(todo?.content).toBe("Hello World"); }); - test("Update", async () => { + it("Update", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, @@ -73,7 +73,7 @@ suite("typeorm with SQL.js", () => { expect(todo?.complete).toBeTruthy(); }); - test("Delete", async () => { + it("Delete", async () => { const newTodo = await todoRepo.save({ content: "Hello World", complete: false, diff --git a/packages/create-turbo/__tests__/git.test.ts b/packages/create-turbo/__tests__/git.test.ts index 4c6b239b8af75..a78698f60d0cf 100644 --- a/packages/create-turbo/__tests__/git.test.ts +++ b/packages/create-turbo/__tests__/git.test.ts @@ -1,4 +1,7 @@ -import path from "path"; +import path from "node:path"; +import childProcess from "node:child_process"; +import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { DEFAULT_IGNORE, GIT_REPO_COMMAND, @@ -7,8 +10,6 @@ import { isInMercurialRepository, tryGitInit, } from "../src/utils/git"; -import childProcess from "child_process"; -import { setupTestFixtures } from "@turbo/test-utils"; describe("git", () => { // just to make sure this doesn't get lost diff --git a/packages/create-turbo/__tests__/index.test.ts b/packages/create-turbo/__tests__/index.test.ts index eb54a78b2541c..262e953240ae1 100644 --- a/packages/create-turbo/__tests__/index.test.ts +++ b/packages/create-turbo/__tests__/index.test.ts @@ -8,11 +8,12 @@ import type { PackageManager } from "@turbo/utils"; import * as turboWorkspaces from "@turbo/workspaces"; import { CreateTurboTelemetry, TelemetryConfig } from "@turbo/telemetry"; import * as turboUtils from "@turbo/utils"; +import { describe, it, expect, jest } from "@jest/globals"; import type { CreateCommandArgument } from "../src/commands/create/types"; import { create } from "../src/commands/create"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -41,7 +42,7 @@ describe("create-turbo", () => { }), }); - test.each<{ packageManager: PackageManager }>([ + it.each<{ packageManager: PackageManager }>([ { packageManager: "yarn" }, { packageManager: "npm" }, { packageManager: "pnpm" }, @@ -124,7 +125,7 @@ describe("create-turbo", () => { } ); - test.each<{ packageManager: PackageManager }>([ + it.each<{ packageManager: PackageManager }>([ { packageManager: "yarn" }, { packageManager: "npm" }, { packageManager: "pnpm" }, @@ -206,7 +207,7 @@ describe("create-turbo", () => { } ); - test("throws correct error message when a download error is encountered", async () => { + it("throws correct error message when a download error is encountered", async () => { const { root } = useFixture({ fixture: `create-turbo` }); const packageManager = "pnpm"; const mockAvailablePackageManagers = jest diff --git a/packages/create-turbo/jest.config.js b/packages/create-turbo/jest.config.ts similarity index 82% rename from packages/create-turbo/jest.config.js rename to packages/create-turbo/jest.config.ts index f81b1d034970b..69fb67e03cc6d 100644 --- a/packages/create-turbo/jest.config.js +++ b/packages/create-turbo/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/", "/__tests__/test-utils.ts"], @@ -9,4 +10,6 @@ module.exports = { collectCoverage: true, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index d6b854641bd2e..77b1f22533753 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -32,6 +32,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/telemetry": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -40,11 +41,10 @@ "@turbo/workspaces": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/inquirer": "^7.3.1", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/semver": "^7.3.9", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/eslint-config/library.js b/packages/eslint-config/library.js index eb796a199281e..04882e6e3d938 100644 --- a/packages/eslint-config/library.js +++ b/packages/eslint-config/library.js @@ -27,4 +27,23 @@ module.exports = { { peerDependencies: true, includeTypes: true }, ], }, + overrides: [ + { + files: ["*.test.ts"], + rules: { + "@typescript-eslint/consistent-type-imports": [ + "error", + { + disallowTypeAnnotations: false, // this is needed for `jest.mock` + }, + ], + }, + }, + { + files: ["jest.config.ts", "*/jest-config/*.ts", "jest-preset.ts"], + rules: { + "import/no-default-export": ["off"], + }, + }, + ], }; diff --git a/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json b/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json index fc022e93cc969..136760f7f1289 100644 --- a/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json +++ b/packages/eslint-plugin-turbo/__fixtures__/workspace/package-lock.json @@ -18,11 +18,11 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", + "@types/jest": "^29.5.13", "@types/node": "^16.11.12", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.3.3" }, @@ -45,11 +45,11 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", + "@types/jest": "^29.5.13", "@types/node": "^16.11.12", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.3.3" } diff --git a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts index 3901a1cbcd512..e7f32a3a15873 100644 --- a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts +++ b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts @@ -3,6 +3,7 @@ import { execSync } from "node:child_process"; import { type Schema } from "@turbo/types"; import { parse, stringify } from "json5"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; describe("eslint settings check", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/eslint-plugin-turbo/jest.config.js b/packages/eslint-plugin-turbo/jest.config.ts similarity index 79% rename from packages/eslint-plugin-turbo/jest.config.js rename to packages/eslint-plugin-turbo/jest.config.ts index 286c1a0613822..d0d72e5dd409f 100644 --- a/packages/eslint-plugin-turbo/jest.config.js +++ b/packages/eslint-plugin-turbo/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: [""], transform: { "^.+\\.tsx?$": "ts-jest", @@ -11,4 +12,6 @@ module.exports = { preset: "ts-jest", verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6789d85b3c8cb..78cb0120863ca 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -35,6 +35,7 @@ "dotenv": "16.0.3" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", @@ -42,11 +43,10 @@ "@turbo/utils": "workspace:*", "@types/eslint": "^8.4.5", "@types/estree": "^1.0.0", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", - "jest": "^27.4.3", + "jest": "^29.7.0", "json5": "^2.2.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.2.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-benchmark/package.json b/packages/turbo-benchmark/package.json index 26b536f979c53..4c0ffeed86515 100644 --- a/packages/turbo-benchmark/package.json +++ b/packages/turbo-benchmark/package.json @@ -34,12 +34,15 @@ "vega": "^5.27.0" }, "devDependencies": { + "@jest/globals": "29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/tsconfig": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/ndjson": "^2.0.2", "@types/node": "^18.17.4", "@types/node-fetch": "^2.6.6", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "typescript": "5.4.5" } } diff --git a/packages/turbo-benchmark/src/generate.mjs b/packages/turbo-benchmark/src/generate.mjs index 96cf2d72f88a3..926ae7aa1d8d4 100644 --- a/packages/turbo-benchmark/src/generate.mjs +++ b/packages/turbo-benchmark/src/generate.mjs @@ -238,9 +238,9 @@ module.exports = { types: "dist/index.d.ts", devDependencies: { typescript: "^4.6.3", - jest: "^27.0.0", - "ts-jest": "^27.0.0", - "@types/jest": "^27.0.0", + jest: "^29.7.0", + "ts-jest": "^29.2.5", + "@types/jest": "^29.5.13", }, scripts: { build: "tsc", diff --git a/packages/turbo-benchmark/src/templates/jest.config.js b/packages/turbo-benchmark/src/templates/jest.config.ts similarity index 72% rename from packages/turbo-benchmark/src/templates/jest.config.js rename to packages/turbo-benchmark/src/templates/jest.config.ts index 05483066e69d8..de524eda5d3fb 100644 --- a/packages/turbo-benchmark/src/templates/jest.config.js +++ b/packages/turbo-benchmark/src/templates/jest.config.ts @@ -1,4 +1,6 @@ -module.exports = { +import type { Config } from "jest"; + +const config = { roots: ["/src"], transform: { "^.+\\.tsx?$": "ts-jest", @@ -7,4 +9,6 @@ module.exports = { moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], modulePathIgnorePatterns: ["/src/__fixtures__"], preset: "ts-jest", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts b/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts index 9a4831a645b0a..6a91522a3409b 100644 --- a/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts +++ b/packages/turbo-benchmark/src/templates/src/__tests__/index.test.ts @@ -1,4 +1,5 @@ import { sum } from "../."; +import { describe, it, expect } from "@jest/globals"; describe("Hello", () => { it("renders without crashing", () => { diff --git a/packages/turbo-codemod/__tests__/add-package-manager.test.ts b/packages/turbo-codemod/__tests__/add-package-manager.test.ts index 02dc3b16e360f..374997e222e69 100644 --- a/packages/turbo-codemod/__tests__/add-package-manager.test.ts +++ b/packages/turbo-codemod/__tests__/add-package-manager.test.ts @@ -2,12 +2,13 @@ import fs from "fs-extra"; import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { transformer } from "../src/transforms/add-package-manager"; import type { TransformerResults } from "../src/runner"; import type { TransformerOptions } from "../src/types"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -121,7 +122,7 @@ describe("add-package-manager-2", () => { test: "add-package-manager", }); - test.each(TEST_CASES)( + it.each(TEST_CASES)( "$fixture - $name with $packageManager@$packageManagerVersion using $options", async ({ fixture, @@ -193,7 +194,7 @@ describe("add-package-manager-2", () => { ); describe("errors", () => { - test("unable to determine workspace manager", async () => { + it("unable to determine workspace manager", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -221,7 +222,7 @@ describe("add-package-manager-2", () => { mockGetWorkspaceDetails.mockRestore(); }); - test("unable to determine package manager version", async () => { + it("unable to determine package manager version", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -265,7 +266,7 @@ describe("add-package-manager-2", () => { mockGetWorkspaceDetails.mockRestore(); }); - test("unable to write json", async () => { + it("unable to write json", async () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-manager" }); @@ -317,15 +318,15 @@ describe("add-package-manager-2", () => { "Encountered an error while transforming files" ); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { - "action": "error", - "additions": 1, - "deletions": 0, - "error": [Error: could not write file], - }, - } - `); + { + "package.json": { + "action": "error", + "additions": 1, + "deletions": 0, + "error": [Error: could not write file], + }, + } + `); mockWriteJsonSync.mockRestore(); mockGetAvailablePackageManagers.mockRestore(); diff --git a/packages/turbo-codemod/__tests__/add-package-names.test.ts b/packages/turbo-codemod/__tests__/add-package-names.test.ts index 603d6e5621751..bf66f60b9978a 100644 --- a/packages/turbo-codemod/__tests__/add-package-names.test.ts +++ b/packages/turbo-codemod/__tests__/add-package-names.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/add-package-names"; describe("add-package-names", () => { @@ -7,7 +8,7 @@ describe("add-package-names", () => { test: "add-package-names", }); - test("missing names", async () => { + it("missing names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "missing-names", @@ -22,13 +23,13 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "packages/ui/package.json": Object { + { + "packages/ui/package.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/utils/package.json": Object { + "packages/utils/package.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -49,7 +50,7 @@ describe("add-package-names", () => { } }); - test("duplicate names", async () => { + it("duplicate names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "duplicate-names", @@ -64,8 +65,8 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "packages/utils/package.json": Object { + { + "packages/utils/package.json": { "action": "modified", "additions": 1, "deletions": 1, @@ -86,7 +87,7 @@ describe("add-package-names", () => { } }); - test("correct names", async () => { + it("correct names", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "correct-names", @@ -100,7 +101,7 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); - expect(result.changes).toMatchInlineSnapshot(`Object {}`); + expect(result.changes).toMatchInlineSnapshot(`{}`); // validate unique names const names = new Set(); @@ -115,7 +116,7 @@ describe("add-package-names", () => { } }); - test("ignored packages", async () => { + it("ignored packages", async () => { // load the fixture for the test const { root, readJson } = useFixture({ fixture: "ignored-packages", @@ -129,7 +130,7 @@ describe("add-package-names", () => { // result should be correct expect(result.fatalError).toBeUndefined(); - expect(result.changes).toMatchInlineSnapshot(`Object {}`); + expect(result.changes).toMatchInlineSnapshot(`{}`); // validate unique names const names = new Set(); diff --git a/packages/turbo-codemod/__tests__/clean-globs.test.ts b/packages/turbo-codemod/__tests__/clean-globs.test.ts index 67e4e03f6d2b3..63a9622fb4a23 100644 --- a/packages/turbo-codemod/__tests__/clean-globs.test.ts +++ b/packages/turbo-codemod/__tests__/clean-globs.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer, fixGlobPattern } from "../src/transforms/clean-globs"; describe("clean-globs", () => { @@ -7,7 +8,7 @@ describe("clean-globs", () => { test: "clean-globs", }); - test("basic", () => { + it("basic", () => { // load the fixture for the test const { root } = useFixture({ fixture: "clean-globs", @@ -22,8 +23,8 @@ describe("clean-globs", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 6, "deletions": 6, @@ -32,7 +33,7 @@ describe("clean-globs", () => { `); }); - test("collapses back-to-back doublestars", () => { + it("collapses back-to-back doublestars", () => { const badGlobPatterns = [ ["../../app-store/**/**", "../../app-store/**"], ["**/**/result.json", "**/result.json"], @@ -48,12 +49,12 @@ describe("clean-globs", () => { }); }); - test("doesn't update valid globs and prints a message", () => { + it("doesn't update valid globs and prints a message", () => { // Now let's test the function expect(fixGlobPattern("a/b/c/*")).toBe("a/b/c/*"); }); - test("transforms '**ext' to '**/*ext'", () => { + it("transforms '**ext' to '**/*ext'", () => { const badGlobPatterns = [ ["cypress/integration/**.test.ts", "cypress/integration/**/*.test.ts"], ["scripts/**.mjs", "scripts/**/*.mjs"], @@ -70,7 +71,7 @@ describe("clean-globs", () => { }); }); - test("transforms 'pre**' to pre*/**", () => { + it("transforms 'pre**' to pre*/**", () => { const badGlobPatterns = [ ["pre**", "pre*/**"], ["pre**/foo", "pre*/**/foo"], diff --git a/packages/turbo-codemod/__tests__/create-turbo-config.test.ts b/packages/turbo-codemod/__tests__/create-turbo-config.test.ts index d3165f07dac83..d7bf60e04fe08 100644 --- a/packages/turbo-codemod/__tests__/create-turbo-config.test.ts +++ b/packages/turbo-codemod/__tests__/create-turbo-config.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import fs from "fs-extra"; import { transformer } from "../src/transforms/create-turbo-config"; @@ -8,7 +9,7 @@ describe("create-turbo-config", () => { test: "create-turbo-config", }); - test("package.json config exists but no turbo.json config - basic", () => { + it("package.json config exists but no turbo.json config - basic", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -30,13 +31,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -45,7 +46,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - repeat run", () => { + it("package.json config exists but no turbo.json config - repeat run", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -67,13 +68,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -89,13 +90,13 @@ describe("create-turbo-config", () => { // result should be correct expect(repeatResult.fatalError).toBeUndefined(); expect(repeatResult.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -104,7 +105,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - dry", () => { + it("package.json config exists but no turbo.json config - dry", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -126,13 +127,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "skipped", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "skipped", "additions": 1, "deletions": 0, @@ -141,7 +142,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - print", () => { + it("package.json config exists but no turbo.json config - print", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -163,13 +164,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "modified", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 0, @@ -178,7 +179,7 @@ describe("create-turbo-config", () => { `); }); - test("package.json config exists but no turbo.json config - dry & print", () => { + it("package.json config exists but no turbo.json config - dry & print", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -200,13 +201,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "skipped", "additions": 0, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "skipped", "additions": 1, "deletions": 0, @@ -215,7 +216,7 @@ describe("create-turbo-config", () => { `); }); - test("no package.json config or turbo.json file exists", () => { + it("no package.json config or turbo.json file exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-json-config" }); @@ -241,13 +242,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -256,7 +257,7 @@ describe("create-turbo-config", () => { `); }); - test("no package.json file exists", () => { + it("no package.json file exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-package-json-file" }); @@ -278,7 +279,7 @@ describe("create-turbo-config", () => { ); }); - test("turbo.json file exists and no package.json config exists", () => { + it("turbo.json file exists and no package.json config exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "turbo-json-config" }); @@ -305,13 +306,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -320,7 +321,7 @@ describe("create-turbo-config", () => { `); }); - test("turbo.json file exists and package.json config exists", () => { + it("turbo.json file exists and package.json config exists", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "both-configs" }); @@ -348,13 +349,13 @@ describe("create-turbo-config", () => { // result should be correct expect(result.fatalError?.message).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "turbo.json": Object { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -363,7 +364,7 @@ describe("create-turbo-config", () => { `); }); - test("errors when unable to write json", () => { + it("errors when unable to write json", () => { // load the fixture for the test const { root, read } = useFixture({ fixture: "no-turbo-json-config" }); @@ -395,14 +396,14 @@ describe("create-turbo-config", () => { "Encountered an error while transforming files" ); expect(result.changes).toMatchInlineSnapshot(` - Object { - "package.json": Object { + { + "package.json": { "action": "error", "additions": 0, "deletions": 1, "error": [Error: could not write file], }, - "turbo.json": Object { + "turbo.json": { "action": "error", "additions": 1, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/generate-package-name.test.ts b/packages/turbo-codemod/__tests__/generate-package-name.test.ts index 9a4e210471113..a42d120191181 100644 --- a/packages/turbo-codemod/__tests__/generate-package-name.test.ts +++ b/packages/turbo-codemod/__tests__/generate-package-name.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { getNewPkgName } from "../src/transforms/add-package-names"; describe("getNewPkgName", () => { diff --git a/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts b/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts index f30cd9ea08cc6..e1ddf72ecaa38 100644 --- a/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts +++ b/packages/turbo-codemod/__tests__/get-transforms-for-migration.test.ts @@ -1,7 +1,8 @@ +import { describe, it, expect } from "@jest/globals"; import { getTransformsForMigration } from "../src/commands/migrate/steps/getTransformsForMigration"; describe("get-transforms-for-migration", () => { - test("ordering", () => { + it("ordering", () => { const results = getTransformsForMigration({ fromVersion: "1.0.0", toVersion: "1.10.0", diff --git a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts index 8bbee953f8c59..ac8b97dd4287c 100644 --- a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts +++ b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts @@ -1,11 +1,12 @@ import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getTurboUpgradeCommand } from "../src/commands/migrate/steps/getTurboUpgradeCommand"; import * as utils from "../src/commands/migrate/utils"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); @@ -430,7 +431,7 @@ describe("get-turbo-upgrade-command", () => { test: "get-turbo-upgrade-command", }); - test.each(LOCAL_INSTALL_COMMANDS)( + it.each(LOCAL_INSTALL_COMMANDS)( "returns correct upgrade command for local install of turbo@$version using $packageManager@$packageManagerVersion (fixture: $fixture)", async ({ version, @@ -492,7 +493,7 @@ describe("get-turbo-upgrade-command", () => { } ); - test.each(GLOBAL_INSTALL_COMMANDS)( + it.each(GLOBAL_INSTALL_COMMANDS)( "returns correct upgrade command for global install of turbo@$version using $packageManager@$packageManagerVersion (fixture: $fixture)", async ({ version, @@ -555,7 +556,7 @@ describe("get-turbo-upgrade-command", () => { ); describe("errors", () => { - test("fails gracefully if no package.json exists", async () => { + it("fails gracefully if no package.json exists", async () => { const { root } = useFixture({ fixture: "no-package", }); @@ -598,7 +599,7 @@ describe("get-turbo-upgrade-command", () => { mockGetWorkspaceDetails.mockRestore(); }); - test.each([ + it.each([ { fixture: "no-package", name: "fails gracefully if no package.json exists", diff --git a/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts b/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts index 0d299928ce740..9f4ec2c8a7843 100644 --- a/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts +++ b/packages/turbo-codemod/__tests__/migrate-dot-env.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/migrate-dot-env"; describe("migrate-dot-env", () => { @@ -35,8 +36,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 3, "deletions": 3, @@ -100,23 +101,23 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -144,8 +145,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 3, "deletions": 3, @@ -182,8 +183,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 3, "deletions": 3, @@ -211,8 +212,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 3, "deletions": 3, @@ -241,8 +242,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -280,8 +281,8 @@ describe("migrate-dot-env", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts b/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts index e9c047d21d6cb..d15031ef7b300 100644 --- a/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts +++ b/packages/turbo-codemod/__tests__/migrate-env-var-dependencies.test.ts @@ -1,6 +1,7 @@ import merge from "deepmerge"; import type { SchemaV1, SchemaV2 } from "@turbo/types"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { hasLegacyEnvVarDependencies, migratePipeline, @@ -44,12 +45,12 @@ describe("migrate-env-var-dependencies", () => { const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ - "$GLOBAL_ENV_KEY", - "$TASK_ENV_KEY", - "$ANOTHER_ENV_KEY", - ] - `); + [ + "$GLOBAL_ENV_KEY", + "$TASK_ENV_KEY", + "$ANOTHER_ENV_KEY", + ] + `); }); it("finds env keys in legacy turbo.json - multiple pipeline keys", () => { @@ -59,13 +60,13 @@ describe("migrate-env-var-dependencies", () => { const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ - "$GLOBAL_ENV_KEY", - "$MY_ENV", - "$TASK_ENV_KEY", - "$ANOTHER_ENV_KEY", - ] - `); + [ + "$GLOBAL_ENV_KEY", + "$MY_ENV", + "$TASK_ENV_KEY", + "$ANOTHER_ENV_KEY", + ] + `); }); it("finds env keys in legacy turbo.json - no keys", () => { @@ -76,7 +77,7 @@ describe("migrate-env-var-dependencies", () => { }); const { hasKeys, envVars } = hasLegacyEnvVarDependencies(config); expect(hasKeys).toEqual(false); - expect(envVars).toMatchInlineSnapshot(`Array []`); + expect(envVars).toMatchInlineSnapshot(`[]`); }); it("finds env keys in turbo.json - no global", () => { @@ -85,7 +86,7 @@ describe("migrate-env-var-dependencies", () => { }); expect(hasKeys).toEqual(true); expect(envVars).toMatchInlineSnapshot(` - Array [ + [ "$cool", ] `); @@ -99,13 +100,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(build); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -117,7 +118,7 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline.env).toBeUndefined(); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -131,12 +132,12 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -152,13 +153,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", "SUPER_COOL", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -174,13 +175,13 @@ describe("migrate-env-var-dependencies", () => { const pipeline = migratePipeline(test); expect(pipeline).toHaveProperty("env"); expect(pipeline.env).toMatchInlineSnapshot(` - Array [ + [ "$MY_ENV", "MY_ENV", ] `); expect(pipeline.dependsOn).toMatchInlineSnapshot(` - Array [ + [ "^build", ] `); @@ -192,37 +193,37 @@ describe("migrate-env-var-dependencies", () => { const config = getTestTurboConfig(); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -240,30 +241,30 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -280,41 +281,41 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "$MY_ENV", "SUPER_COOL", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -331,41 +332,41 @@ describe("migrate-env-var-dependencies", () => { }); const pipeline = migrateConfig(config); expect(pipeline).toMatchInlineSnapshot(` - Object { + { "$schema": "./docs/public/schema.json", - "globalEnv": Array [ + "globalEnv": [ "GLOBAL_ENV_KEY", ], - "pipeline": Object { - "build": Object { - "dependsOn": Array [ + "pipeline": { + "build": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "TASK_ENV_KEY", "ANOTHER_ENV_KEY", ], - "outputs": Array [ + "outputs": [ "dist/**/*", ".next/**/*", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "^build", ], - "env": Array [ + "env": [ "$MY_ENV", "MY_ENV", ], - "outputs": Array [ + "outputs": [ "coverage/**/*", ], }, @@ -421,8 +422,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -495,18 +496,18 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/web/turbo.json": Object { + { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -555,8 +556,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -572,8 +573,8 @@ describe("migrate-env-var-dependencies", () => { expect(repeatResult.fatalError).toBeUndefined(); expect(repeatResult.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -601,8 +602,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 4, "deletions": 4, @@ -651,8 +652,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -680,8 +681,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 4, "deletions": 4, @@ -708,8 +709,8 @@ describe("migrate-env-var-dependencies", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/migrate.test.ts b/packages/turbo-codemod/__tests__/migrate.test.ts index 021b5016fb8da..23b7acdd88c51 100644 --- a/packages/turbo-codemod/__tests__/migrate.test.ts +++ b/packages/turbo-codemod/__tests__/migrate.test.ts @@ -2,6 +2,7 @@ import childProcess from "node:child_process"; import * as turboUtils from "@turbo/utils"; import * as turboWorkspaces from "@turbo/workspaces"; import { setupTestFixtures, spyExit } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { migrate } from "../src/commands/migrate"; import * as checkGitStatus from "../src/utils/checkGitStatus"; import * as getCurrentVersion from "../src/commands/migrate/steps/getCurrentVersion"; @@ -9,7 +10,7 @@ import * as getLatestVersion from "../src/commands/migrate/steps/getLatestVersio import * as getTurboUpgradeCommand from "../src/commands/migrate/steps/getTurboUpgradeCommand"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); diff --git a/packages/turbo-codemod/__tests__/rename-output-mode.test.ts b/packages/turbo-codemod/__tests__/rename-output-mode.test.ts index caa422db48fc2..d54a597b495da 100644 --- a/packages/turbo-codemod/__tests__/rename-output-mode.test.ts +++ b/packages/turbo-codemod/__tests__/rename-output-mode.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/rename-output-mode"; describe("rename-output-mode", () => { @@ -34,8 +35,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -99,23 +100,23 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -143,8 +144,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 2, @@ -180,8 +181,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -209,8 +210,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 2, @@ -270,8 +271,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 10, "deletions": 10, @@ -300,8 +301,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -339,8 +340,8 @@ describe("rename-output-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/rename-pipeline.ts b/packages/turbo-codemod/__tests__/rename-pipeline.ts index 18e2cec7e6798..38c197bcf5ff1 100644 --- a/packages/turbo-codemod/__tests__/rename-pipeline.ts +++ b/packages/turbo-codemod/__tests__/rename-pipeline.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/rename-pipeline"; describe("rename-pipeline", () => { @@ -31,8 +32,8 @@ describe("rename-pipeline", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, @@ -94,23 +95,23 @@ describe("rename-pipeline", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, diff --git a/packages/turbo-codemod/__tests__/set-default-outputs.test.ts b/packages/turbo-codemod/__tests__/set-default-outputs.test.ts index b6ef9e537bf58..60460ec21ea1a 100644 --- a/packages/turbo-codemod/__tests__/set-default-outputs.test.ts +++ b/packages/turbo-codemod/__tests__/set-default-outputs.test.ts @@ -1,5 +1,6 @@ import { setupTestFixtures } from "@turbo/test-utils"; import { type Schema } from "@turbo/types"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/set-default-outputs"; describe("set-default-outputs", () => { @@ -34,8 +35,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -99,23 +100,23 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/web/turbo.json": Object { + "apps/web/turbo.json": { "action": "modified", "additions": 1, "deletions": 0, }, - "packages/ui/turbo.json": Object { + "packages/ui/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -143,8 +144,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 1, @@ -180,8 +181,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 1, @@ -209,8 +210,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "skipped", "additions": 2, "deletions": 1, @@ -270,8 +271,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 6, "deletions": 5, @@ -300,8 +301,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -341,8 +342,8 @@ describe("set-default-outputs", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 0, diff --git a/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts b/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts index 750646a2db078..d60af37412524 100644 --- a/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts +++ b/packages/turbo-codemod/__tests__/stabilize-env-mode.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/stabilize-env-mode"; describe("stabilize-env-mode", () => { @@ -34,8 +35,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 4, @@ -76,8 +77,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 6, @@ -110,8 +111,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -141,8 +142,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -175,8 +176,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -209,8 +210,8 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 2, @@ -270,18 +271,18 @@ describe("stabilize-env-mode", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 1, "deletions": 1, }, - "apps/website/turbo.json": Object { + "apps/website/turbo.json": { "action": "modified", "additions": 1, "deletions": 2, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 2, "deletions": 4, diff --git a/packages/turbo-codemod/__tests__/stabilize-ui.test.ts b/packages/turbo-codemod/__tests__/stabilize-ui.test.ts index 48f3e955010c6..4973b3cf8813b 100644 --- a/packages/turbo-codemod/__tests__/stabilize-ui.test.ts +++ b/packages/turbo-codemod/__tests__/stabilize-ui.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/stabilize-ui"; describe("stabilize-ui", () => { @@ -30,8 +31,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -63,8 +64,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 0, "deletions": 1, @@ -97,8 +98,8 @@ describe("stabilize-ui", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 1, "deletions": 1, diff --git a/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts b/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts index fd383e5d024e1..8e2e2b03b3dda 100644 --- a/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts +++ b/packages/turbo-codemod/__tests__/transform-env-literals-to-wildcards.test.ts @@ -1,4 +1,5 @@ import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { transformer } from "../src/transforms/transform-env-literals-to-wildcards"; describe.only("transform-env-literals-to-wildcards", () => { @@ -33,8 +34,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -64,8 +65,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "unchanged", "additions": 0, "deletions": 0, @@ -100,8 +101,8 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "turbo.json": Object { + { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, @@ -156,18 +157,18 @@ describe.only("transform-env-literals-to-wildcards", () => { expect(result.fatalError).toBeUndefined(); expect(result.changes).toMatchInlineSnapshot(` - Object { - "apps/docs/turbo.json": Object { + { + "apps/docs/turbo.json": { "action": "modified", "additions": 2, "deletions": 2, }, - "apps/website/turbo.json": Object { + "apps/website/turbo.json": { "action": "modified", "additions": 2, "deletions": 2, }, - "turbo.json": Object { + "turbo.json": { "action": "modified", "additions": 4, "deletions": 4, diff --git a/packages/turbo-codemod/__tests__/transform.test.ts b/packages/turbo-codemod/__tests__/transform.test.ts index 84e68fb007f0e..3c2c7d8097d51 100644 --- a/packages/turbo-codemod/__tests__/transform.test.ts +++ b/packages/turbo-codemod/__tests__/transform.test.ts @@ -1,12 +1,13 @@ import * as turboWorkspaces from "@turbo/workspaces"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures, spyExit } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { transform } from "../src/commands/transform"; import * as checkGitStatus from "../src/utils/checkGitStatus"; import type { MigrateCommandArgument } from "../src/commands"; import { getWorkspaceDetailsMockReturnValue } from "./test-utils"; -jest.mock("@turbo/workspaces", () => ({ +jest.mock("@turbo/workspaces", () => ({ __esModule: true, ...jest.requireActual("@turbo/workspaces"), })); diff --git a/packages/turbo-codemod/jest.config.js b/packages/turbo-codemod/jest.config.ts similarity index 87% rename from packages/turbo-codemod/jest.config.js rename to packages/turbo-codemod/jest.config.ts index e2d0aef7a2614..9028a4075459c 100644 --- a/packages/turbo-codemod/jest.config.js +++ b/packages/turbo-codemod/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", transformIgnorePatterns: ["node_modules/*", "packages/turbo-workspaces/*"], @@ -27,4 +28,6 @@ module.exports = { }, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index ba9e7cf2830b5..b1c96aeeffa6c 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -38,6 +38,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/gen": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -49,15 +50,14 @@ "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", "@types/inquirer": "^8.2.0", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/semver": "^7.3.9", "@types/uuid": "^9.0.0", "deepmerge": "^4.2.2", - "jest": "^27.4.3", + "jest": "^29.7.0", "plop": "^3.1.1", "semver": "^7.3.5", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs b/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs index c63a9df4bf4ca..80df9d4d368eb 100644 --- a/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs +++ b/packages/turbo-codemod/turbo/generators/templates/transformer.test.hbs @@ -1,11 +1,12 @@ +import { describe, it, expect } from '@jest/globals'; import { transformer } from "../src/transforms/{{ name }}"; import { setupTestFixtures } from "./test-utils"; describe("{{ name }}", () => { - + const { useFixture } = setupTestFixtures({ test: "{{ name }}" }); - test("basic", () => { + it("basic", () => { // load the fixture for the test const { root, read, readJson } = useFixture({ fixture: "specific-fixture", diff --git a/packages/turbo-gen/__tests__/raw.test.ts b/packages/turbo-gen/__tests__/raw.test.ts index 48169ddcba541..127a03d15bace 100644 --- a/packages/turbo-gen/__tests__/raw.test.ts +++ b/packages/turbo-gen/__tests__/raw.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect, jest } from "@jest/globals"; import { raw } from "../src/commands/raw"; import * as run from "../src/commands/run"; import * as workspace from "../src/commands/workspace"; @@ -135,7 +136,7 @@ describe("raw", () => { }, }, ]; - test.each(testMatrix)( + it.each(testMatrix)( "$command and $options calls $target with $calledWith", async ({ command, options, target, calledWith }) => { // mock generation functions, we only care if they are called, diff --git a/packages/turbo-gen/jest.config.js b/packages/turbo-gen/jest.config.ts similarity index 82% rename from packages/turbo-gen/jest.config.js rename to packages/turbo-gen/jest.config.ts index 9e9d6c5f19aab..6e4b65153f944 100644 --- a/packages/turbo-gen/jest.config.js +++ b/packages/turbo-gen/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["__fixtures__/", "/__tests__/test-utils.ts"], @@ -9,4 +10,6 @@ module.exports = { collectCoverage: true, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 5839d18ad5d1d..d61ef8a87f868 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -29,22 +29,22 @@ "node-plop": "^0.26.3", "picocolors": "1.0.1", "proxy-agent": "^6.2.2", - "ts-node": "^10.9.1", + "ts-node": "^10.9.2", "update-check": "^1.5.4", "validate-npm-package-name": "^5.0.0" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", "@turbo/utils": "workspace:*", "@types/fs-extra": "^9.0.13", "@types/inquirer": "^8.2.5", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "@types/validate-npm-package-name": "^4.0.0", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^6.7.0", "typescript": "5.4.5" }, diff --git a/packages/turbo-ignore/__tests__/checkCommit.test.ts b/packages/turbo-ignore/__tests__/checkCommit.test.ts index a5a94da80d112..f5e8881e75077 100644 --- a/packages/turbo-ignore/__tests__/checkCommit.test.ts +++ b/packages/turbo-ignore/__tests__/checkCommit.test.ts @@ -1,6 +1,7 @@ // eslint-disable-next-line camelcase -- this is a good exception to this rule import child_process from "node:child_process"; import { mockEnv } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { checkCommit } from "../src/checkCommit"; describe("checkCommit()", () => { diff --git a/packages/turbo-ignore/__tests__/errors.test.ts b/packages/turbo-ignore/__tests__/errors.test.ts index 02e40b52cd97b..da8e3b47ec329 100644 --- a/packages/turbo-ignore/__tests__/errors.test.ts +++ b/packages/turbo-ignore/__tests__/errors.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { shouldWarn, NON_FATAL_ERRORS } from "../src/errors"; describe("shouldWarn()", () => { diff --git a/packages/turbo-ignore/__tests__/getComparison.test.ts b/packages/turbo-ignore/__tests__/getComparison.test.ts index 8635964a53aa5..7a194353e364f 100644 --- a/packages/turbo-ignore/__tests__/getComparison.test.ts +++ b/packages/turbo-ignore/__tests__/getComparison.test.ts @@ -1,6 +1,7 @@ // eslint-disable-next-line camelcase -- This is a test file import child_process from "node:child_process"; import { spyConsole, mockEnv, validateLogs } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getComparison } from "../src/getComparison"; describe("getComparison()", () => { @@ -9,37 +10,38 @@ describe("getComparison()", () => { it("uses headRelative comparison when not running Vercel CI", () => { expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^", - "type": "headRelative", - } - `); + { + "ref": "HEAD^", + "type": "headRelative", + } + `); expect(mockConsole.log).toHaveBeenCalledTimes(0); }); it("uses fallback comparison if provided when not running Vercel CI", () => { expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); - validateLogs(["Falling back to ref HEAD^2"], mockConsole.log, { - prefix: "≫ ", - }); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + "Falling back to ref HEAD^2" + ); }); it("returns null when running in Vercel CI with no VERCEL_GIT_PREVIOUS_SHA", () => { process.env.VERCEL = "1"; process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - [ - 'No previous deployments found for "test-workspace" on branch "my-branch"', - ], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'No previous deployments found for "test-workspace" on branch "my-branch"' ); }); @@ -48,40 +50,35 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", 'No previous deployments found for "test-workspace" on branch "my-branch"', - "Falling back to ref HEAD^2", ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "Falling back to ref HEAD^2"], + ]); }); it("modifies output when running in Vercel CI with no VERCEL_GIT_PREVIOUS_SHA and no VERCEL_GIT_COMMIT_REF", () => { process.env.VERCEL = "1"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); - - validateLogs( - [ - 'No previous deployments found for "test-workspace"', - "Falling back to ref HEAD^2", - ], - mockConsole.log, - { prefix: "≫ " } - ); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); + + validateLogs(mockConsole.log, [ + ["≫ ", 'No previous deployments found for "test-workspace"'], + ["≫ ", "Falling back to ref HEAD^2"], + ]); }); it("uses previousDeploy when running in Vercel CI with VERCEL_GIT_PREVIOUS_SHA", () => { @@ -94,18 +91,16 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "mygitsha", - "type": "previousDeploy", - } - `); - - validateLogs( - [ - 'Found previous deployment ("mygitsha") for "test-workspace" on branch "my-branch"', - ], - mockConsole.log, - { prefix: "≫ " } + { + "ref": "mygitsha", + "type": "previousDeploy", + } + `); + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Found previous deployment ("mygitsha") for "test-workspace" on branch "my-branch"' ); mockExec.mockRestore(); @@ -123,20 +118,19 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace", fallback: "HEAD^2" })) .toMatchInlineSnapshot(` - Object { - "ref": "HEAD^2", - "type": "customFallback", - } - `); + { + "ref": "HEAD^2", + "type": "customFallback", + } + `); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.', - "Falling back to ref HEAD^2", ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "Falling back to ref HEAD^2"], + ]); mockExec.mockRestore(); }); @@ -153,12 +147,10 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_COMMIT_REF = "my-branch"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - [ - 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.', - ], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Previous deployment ("mygitsha") for "test-workspace" on branch "my-branch" is unreachable.' ); mockExec.mockRestore(); @@ -173,16 +165,16 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_PREVIOUS_SHA = "mygitsha"; expect(getComparison({ workspace: "test-workspace" })) .toMatchInlineSnapshot(` - Object { - "ref": "mygitsha", - "type": "previousDeploy", - } - `); - - validateLogs( - ['Found previous deployment ("mygitsha") for "test-workspace"'], - mockConsole.log, - { prefix: "≫ " } + { + "ref": "mygitsha", + "type": "previousDeploy", + } + `); + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Found previous deployment ("mygitsha") for "test-workspace"' ); mockExec.mockRestore(); @@ -199,10 +191,10 @@ describe("getComparison()", () => { process.env.VERCEL_GIT_PREVIOUS_SHA = "mygitsha"; expect(getComparison({ workspace: "test-workspace" })).toBeNull(); - validateLogs( - ['Previous deployment ("mygitsha") for "test-workspace" is unreachable.'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Previous deployment ("mygitsha") for "test-workspace" is unreachable.' ); mockExec.mockRestore(); diff --git a/packages/turbo-ignore/__tests__/getTask.test.ts b/packages/turbo-ignore/__tests__/getTask.test.ts index e5040b41c089c..7c23eb3b16576 100644 --- a/packages/turbo-ignore/__tests__/getTask.test.ts +++ b/packages/turbo-ignore/__tests__/getTask.test.ts @@ -1,14 +1,15 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTask } from "../src/getTask"; describe("getWorkspace()", () => { const mockConsole = spyConsole(); it("getTask defaults to build", () => { expect(getTask({})).toEqual("build"); - validateLogs( - ['Using "build" as the task as it was unspecified'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "build" as the task as it was unspecified' ); }); @@ -18,10 +19,11 @@ describe("getWorkspace()", () => { task: "workspace#task", }) ).toEqual(`"workspace#task"`); - validateLogs( - ['Using "workspace#task" as the task from the arguments'], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "workspace#task" as the task from the arguments' ); }); }); diff --git a/packages/turbo-ignore/__tests__/getTurboVersion.test.ts b/packages/turbo-ignore/__tests__/getTurboVersion.test.ts index 5852abd19114e..0e41c42fd7fd5 100644 --- a/packages/turbo-ignore/__tests__/getTurboVersion.test.ts +++ b/packages/turbo-ignore/__tests__/getTurboVersion.test.ts @@ -1,4 +1,5 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTurboVersion } from "../src/getTurboVersion"; describe("getWorkspace()", () => { @@ -12,10 +13,11 @@ describe("getWorkspace()", () => { "./__fixtures__/app" ) ).toEqual("1.2.3"); - validateLogs( - ['Using turbo version "1.2.3" from arguments'], - mockConsole.log, - { prefix: "≫ " } + + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using turbo version "1.2.3" from arguments' ); }); diff --git a/packages/turbo-ignore/__tests__/getWorkspace.test.ts b/packages/turbo-ignore/__tests__/getWorkspace.test.ts index 7384ce8efd79f..42a4f693a6722 100644 --- a/packages/turbo-ignore/__tests__/getWorkspace.test.ts +++ b/packages/turbo-ignore/__tests__/getWorkspace.test.ts @@ -1,4 +1,5 @@ -import { spyConsole, validateLogs } from "@turbo/test-utils"; +import { spyConsole } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getWorkspace } from "../src/getWorkspace"; describe("getWorkspace()", () => { @@ -9,10 +10,10 @@ describe("getWorkspace()", () => { workspace: "test-workspace", }) ).toEqual("test-workspace"); - validateLogs( - ['Using "test-workspace" as workspace from arguments'], - mockConsole.log, - { prefix: "≫ " } + expect(mockConsole.log).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Using "test-workspace" as workspace from arguments' ); }); diff --git a/packages/turbo-ignore/__tests__/ignore.test.ts b/packages/turbo-ignore/__tests__/ignore.test.ts index a21268d3ea613..b5fe5f42a9b1b 100644 --- a/packages/turbo-ignore/__tests__/ignore.test.ts +++ b/packages/turbo-ignore/__tests__/ignore.test.ts @@ -10,6 +10,7 @@ import { mockEnv, validateLogs, } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { TurboIgnoreTelemetry, TelemetryConfig } from "@turbo/telemetry"; import { turboIgnore } from "../src/ignore"; @@ -64,9 +65,11 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs(["UNKNOWN_ERROR: error details"], mockConsole.error, { - prefix: "≫ ", - }); + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + "UNKNOWN_ERROR: error details" + ); expectBuild(mockExit); mockExec.mockRestore(); @@ -97,12 +100,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - no package manager detected, please commit a lockfile, or set "packageManager" in your root "package.json"`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - no package manager detected, please commit a lockfile, or set "packageManager" in your root "package.json"` ); expectBuild(mockExit); @@ -142,12 +143,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - a ref or SHA is invalid. It could have been removed from the branch history via a force push, or this could be a shallow clone with insufficient history`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - a ref or SHA is invalid. It could have been removed from the branch history via a force push, or this could be a shallow clone with insufficient history` ); expectBuild(mockExit); @@ -180,12 +179,10 @@ describe("turboIgnore()", () => { expect.anything() ); - validateLogs( - [ - `turbo-ignore could not complete - parent commit does not exist or is unreachable`, - ], - mockConsole.warn, - { prefix: "≫ " } + expect(mockConsole.warn).toHaveBeenNthCalledWith( + 1, + "≫ ", + `turbo-ignore could not complete - parent commit does not exist or is unreachable` ); expectBuild(mockExit); @@ -194,32 +191,23 @@ describe("turboIgnore()", () => { it("skips checks and allows build when no workspace can be found", () => { turboIgnore(undefined, { directory: "__fixtures__/no-app" }); - validateLogs( - [ - () => [ - "≫ ", - expect.stringContaining( - " could not be found. turbo-ignore inferencing failed" - ), - ], - ], - mockConsole.error, - { prefix: "≫ " } + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + expect.stringContaining( + " could not be found. turbo-ignore inferencing failed" + ) ); + expectBuild(mockExit); }); it("skips checks and allows build when a workspace with no name is found", () => { turboIgnore(undefined, { directory: "__fixtures__/invalid-app" }); - validateLogs( - [ - () => [ - "≫ ", - expect.stringContaining(' is missing the "name" field (required).'), - ], - ], - mockConsole.error, - { prefix: "≫ " } + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + expect.stringContaining(' is missing the "name" field (required).') ); expectBuild(mockExit); }); @@ -227,7 +215,8 @@ describe("turboIgnore()", () => { it("skips checks and allows build when no monorepo root can be found", () => { turboIgnore(undefined, { directory: "/" }); expectBuild(mockExit); - expect(mockConsole.error).toHaveBeenLastCalledWith( + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, "≫ ", "Monorepo root not found. turbo-ignore inferencing failed" ); @@ -279,20 +268,25 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", `Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"`, + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - "This project and its dependencies are not affected", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "This project and its dependencies are not affected"], + [expect.stringContaining("⏭ Ignoring the change")], + ]); expectIgnore(mockExit); mockExecSync.mockRestore(); @@ -324,20 +318,25 @@ describe("turboIgnore()", () => { task: "workspace#build", directory: "__fixtures__/app", }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "workspace#build" as the task from the arguments', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "workspace#build" as the task from the arguments'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run "workspace#build" --filter="test-app...[last-deployed-sha]" --dry=json`', - 'This commit affects "test-app"', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app"'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -366,20 +365,25 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - 'This commit affects "test-app" and 1 dependency (ui)', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app" and 1 dependency (ui)'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -408,20 +412,28 @@ describe("turboIgnore()", () => { return {} as unknown as ChildProcess; }); turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", 'Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"', + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', + ], + [ + "≫ ", 'This commit affects "test-app" and 2 dependencies (ui, tsconfig)', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -459,21 +471,26 @@ describe("turboIgnore()", () => { fallback: "HEAD^2", directory: "__fixtures__/app", }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "workspace#build" as the task from the arguments', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "workspace#build" as the task from the arguments'], + [ + "≫ ", 'Previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch" is unreachable.', - "Falling back to ref HEAD^2", + ], + ["≫ ", "Falling back to ref HEAD^2"], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run "workspace#build" --filter="test-app...[HEAD^2]" --dry=json`', - 'This commit affects "test-app"', - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'This commit affects "test-app"'], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); mockExecSync.mockRestore(); @@ -497,12 +514,11 @@ describe("turboIgnore()", () => { expect.anything(), expect.anything() ); - validateLogs( - [ - 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.', - ], - mockConsole.error, - { prefix: "≫ " } + + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.' ); expectBuild(mockExit); @@ -530,12 +546,11 @@ describe("turboIgnore()", () => { expect.anything(), expect.anything() ); - validateLogs( - [ - 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.', - ], - mockConsole.error, - { prefix: "≫ " } + + expect(mockConsole.error).toHaveBeenNthCalledWith( + 1, + "≫ ", + 'Failed to parse JSON output from `npx -y turbo@^2 run build --filter="test-app...[HEAD^]" --dry=json`.' ); expectBuild(mockExit); @@ -548,18 +563,17 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', - "Found commit message: [vercel skip]", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + ["≫ ", "Found commit message: [vercel skip]"], + [expect.stringContaining("⏭ Ignoring the change")], + ]); expectIgnore(mockExit); }); @@ -570,18 +584,17 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', - "Found commit message: [vercel deploy]", - () => expect.stringContaining("✓ Proceeding with deployment"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + ["≫ ", "Found commit message: [vercel deploy]"], + [expect.stringContaining("✓ Proceeding with deployment")], + ]); expectBuild(mockExit); }); @@ -611,21 +624,29 @@ describe("turboIgnore()", () => { turboIgnore(undefined, { directory: "__fixtures__/app" }); - validateLogs( + validateLogs(mockConsole.log, [ [ + "≫ ", "Using Turborepo to determine if this project is affected by the commit...\n", - 'Inferred "test-app" as workspace from "package.json"', - 'Inferred turbo version ^2 based on "tasks" in "turbo.json"', - 'Using "build" as the task as it was unspecified', + ], + ["≫ ", 'Inferred "test-app" as workspace from "package.json"'], + ["≫ ", 'Inferred turbo version ^2 based on "tasks" in "turbo.json"'], + ["≫ ", 'Using "build" as the task as it was unspecified'], + [ + "≫ ", "Conflicting commit messages found: [vercel deploy] and [vercel skip]", + ], + [ + "≫ ", `Found previous deployment ("last-deployed-sha") for "test-app" on branch "my-branch"`, + ], + [ + "≫ ", 'Analyzing results of `npx -y turbo@^2 run build --filter="test-app...[last-deployed-sha]" --dry=json`', - "This project and its dependencies are not affected", - () => expect.stringContaining("⏭ Ignoring the change"), ], - mockConsole.log, - { prefix: "≫ " } - ); + ["≫ ", "This project and its dependencies are not affected"], + [expect.stringContaining("Ignoring the change")], + ]); expectIgnore(mockExit); mockExecSync.mockRestore(); diff --git a/packages/turbo-ignore/jest.config.js b/packages/turbo-ignore/jest.config.ts similarity index 83% rename from packages/turbo-ignore/jest.config.js rename to packages/turbo-ignore/jest.config.ts index 2b8bd07645c8c..63247ca62bd95 100644 --- a/packages/turbo-ignore/jest.config.js +++ b/packages/turbo-ignore/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/"], @@ -17,4 +18,6 @@ module.exports = { transformIgnorePatterns: ["node_modules/*"], verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 096c22c423d1a..1c3db20a114b1 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -29,17 +29,17 @@ "json5": "^2.2.3" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/telemetry": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", "@turbo/types": "workspace:*", "@turbo/utils": "workspace:*", - "@types/jest": "^27.4.0", "@types/node": "^18.17.2", "commander": "^11.0.0", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "ts-jest": "^29.2.5", "tsup": "^5.12.1", "typescript": "5.4.5" } diff --git a/packages/turbo-repository/__tests__/affected-packages.test.ts b/packages/turbo-repository/__tests__/affected-packages.test.ts index b91115a37ada9..9885078fd6ecb 100644 --- a/packages/turbo-repository/__tests__/affected-packages.test.ts +++ b/packages/turbo-repository/__tests__/affected-packages.test.ts @@ -1,4 +1,4 @@ -import { describe, test } from "node:test"; +import { describe, it } from "node:test"; import { strict as assert } from "node:assert"; import * as path from "node:path"; import { Workspace, Package, PackageManager } from "../js/dist/index.js"; @@ -43,7 +43,7 @@ describe("affectedPackages", () => { ]; for (const { description, files, expected } of tests) { - test(description, async () => { + it(description, async () => { const dir = path.resolve(__dirname, "./fixtures/monorepo"); const workspace = await Workspace.find(dir); diff --git a/packages/turbo-telemetry/src/config.test.ts b/packages/turbo-telemetry/src/config.test.ts index 2410ff83e758f..e1ad778cb1afa 100644 --- a/packages/turbo-telemetry/src/config.test.ts +++ b/packages/turbo-telemetry/src/config.test.ts @@ -1,4 +1,4 @@ -import { describe, test, mock, afterEach, beforeEach } from "node:test"; +import { describe, it, mock, afterEach, beforeEach } from "node:test"; import { strict as assert } from "node:assert"; import fs from "node:fs"; import { TelemetryConfig } from "./config"; @@ -28,7 +28,7 @@ describe("TelemetryConfig", () => { }); describe("fromDefaultConfig", () => { - test("should create TelemetryConfig instance from default config", async (t) => { + it("should create TelemetryConfig instance from default config", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const mockFileContent = JSON.stringify({ telemetry_enabled: true, @@ -53,7 +53,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.id, "654321"); }); - test("should generate new config if default config doesn't exist", async (t) => { + it("should generate new config if default config doesn't exist", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const mockDefaultConfigPath = mock.fn(() => mockConfigPath); const mockReadFileSync = mock.fn(() => { @@ -102,7 +102,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.config.telemetry_enabled, true); }); - test("should not throw if default config is missing a key", async (t) => { + it("should not throw if default config is missing a key", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const id = "654321"; const mockFileContent = JSON.stringify({ @@ -152,7 +152,7 @@ describe("TelemetryConfig", () => { assert.equal(result?.config.telemetry_enabled, true); }); - test("should not throw if default config has a key of the wrong type", async (t) => { + it("should not throw if default config has a key of the wrong type", async (t) => { const mockConfigPath = "/path/to/defaultConfig.json"; const salt = "default-salt"; const mockFileContent = JSON.stringify({ @@ -204,7 +204,7 @@ describe("TelemetryConfig", () => { }); describe("write", () => { - test("should write the config to the file", (t) => { + it("should write the config to the file", (t) => { const mockWriteFileSync = mock.fn(); t.mock.method(fs, "writeFileSync", mockWriteFileSync); @@ -217,7 +217,7 @@ describe("TelemetryConfig", () => { ]); }); - test("should not throw if write fails", (t) => { + it("should not throw if write fails", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync", () => { throw new Error("Write error"); }); @@ -233,7 +233,7 @@ describe("TelemetryConfig", () => { }); describe("hasSeenAlert", () => { - test("should return true if telemetry_alerted is defined", () => { + it("should return true if telemetry_alerted is defined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -249,7 +249,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return false if telemetry_alerted key exists but is undefined", () => { + it("should return false if telemetry_alerted key exists but is undefined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -264,7 +264,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return false if telemetry_alerted is undefined", () => { + it("should return false if telemetry_alerted is undefined", () => { const result = telemetryConfig.hasSeenAlert(); assert.equal(result, false); @@ -284,7 +284,7 @@ describe("TelemetryConfig", () => { { envVar: null, value: null, expectedResult: true }, ]; for (const { envVar, value, expectedResult } of testCases) { - test(`should return ${expectedResult} when ${envVar} is set to '${value}'`, () => { + it(`should return ${expectedResult} when ${envVar} is set to '${value}'`, () => { const config = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -305,7 +305,7 @@ describe("TelemetryConfig", () => { }); describe("isTelemetryWarningEnabled", () => { - test("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to '1'", () => { + it("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to '1'", () => { process.env.TURBO_TELEMETRY_MESSAGE_DISABLED = "1"; const result = telemetryConfig.isTelemetryWarningEnabled(); @@ -313,7 +313,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to 'true'", () => { + it("should return false if TURBO_TELEMETRY_MESSAGE_DISABLED is set to 'true'", () => { process.env.TURBO_TELEMETRY_MESSAGE_DISABLED = "true"; const result = telemetryConfig.isTelemetryWarningEnabled(); @@ -321,7 +321,7 @@ describe("TelemetryConfig", () => { assert.equal(result, false); }); - test("should return true if TURBO_TELEMETRY_MESSAGE_DISABLED is not set", () => { + it("should return true if TURBO_TELEMETRY_MESSAGE_DISABLED is not set", () => { const result = telemetryConfig.isTelemetryWarningEnabled(); assert.equal(result, true); @@ -329,13 +329,13 @@ describe("TelemetryConfig", () => { }); describe("showAlert", () => { - test("should log the telemetry alert if conditions are met", (t) => { + it("should log the telemetry alert if conditions are met", (t) => { const mockLog = t.mock.method(console, "log"); telemetryConfig.showAlert(); assert.equal(mockLog.mock.calls.length, 6); }); - test("should not log the telemetry alert if conditions are not met", (t) => { + it("should not log the telemetry alert if conditions are not met", (t) => { const mockLog = t.mock.method(console, "log"); telemetryConfig = new TelemetryConfig({ @@ -354,7 +354,7 @@ describe("TelemetryConfig", () => { }); describe("enable", () => { - test("should set telemetry_enabled to true and write the config", (t) => { + it("should set telemetry_enabled to true and write the config", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync"); telemetryConfig.enable(); @@ -368,7 +368,7 @@ describe("TelemetryConfig", () => { }); describe("disable", () => { - test("should set telemetry_enabled to false and write the config", (t) => { + it("should set telemetry_enabled to false and write the config", (t) => { const mockWriteFileSync = t.mock.method(fs, "writeFileSync"); telemetryConfig.disable(); @@ -382,7 +382,7 @@ describe("TelemetryConfig", () => { }); describe("alertShown", () => { - test("should return true if telemetry_alerted is defined", () => { + it("should return true if telemetry_alerted is defined", () => { telemetryConfig = new TelemetryConfig({ configPath: "/path/to/config.json", config: { @@ -398,7 +398,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should set telemetry_alerted to current date and write the config if telemetry_alerted is undefined", (t) => { + it("should set telemetry_alerted to current date and write the config if telemetry_alerted is undefined", (t) => { const mockWriteFileSync = mock.fn(); t.mock.method(fs, "writeFileSync", mockWriteFileSync); const result = telemetryConfig.alertShown(); @@ -414,7 +414,7 @@ describe("TelemetryConfig", () => { }); describe("oneWayHash", () => { - test("should call oneWayHashWithSalt with the input and telemetry_salt from the config", (t) => { + it("should call oneWayHashWithSalt with the input and telemetry_salt from the config", (t) => { const mockOneWayHashWithSalt = mock.fn(() => "hashed-value"); t.mock.method(utils, "oneWayHashWithSalt", mockOneWayHashWithSalt); @@ -430,7 +430,7 @@ describe("TelemetryConfig", () => { }); describe("isDebug", () => { - test("should return true if TURBO_TELEMETRY_DEBUG is set to '1'", () => { + it("should return true if TURBO_TELEMETRY_DEBUG is set to '1'", () => { process.env.TURBO_TELEMETRY_DEBUG = "1"; const result = TelemetryConfig.isDebug(); @@ -438,7 +438,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return true if TURBO_TELEMETRY_DEBUG is set to 'true'", () => { + it("should return true if TURBO_TELEMETRY_DEBUG is set to 'true'", () => { process.env.TURBO_TELEMETRY_DEBUG = "true"; const result = TelemetryConfig.isDebug(); @@ -446,7 +446,7 @@ describe("TelemetryConfig", () => { assert.equal(result, true); }); - test("should return false if TURBO_TELEMETRY_DEBUG is not set", () => { + it("should return false if TURBO_TELEMETRY_DEBUG is not set", () => { const result = TelemetryConfig.isDebug(); assert.equal(result, false); diff --git a/packages/turbo-telemetry/src/utils.test.ts b/packages/turbo-telemetry/src/utils.test.ts index ce62f367b69b9..81d4861beb842 100644 --- a/packages/turbo-telemetry/src/utils.test.ts +++ b/packages/turbo-telemetry/src/utils.test.ts @@ -1,10 +1,10 @@ -import { describe, test } from "node:test"; +import { describe, it } from "node:test"; import { strict as assert } from "node:assert"; import utils from "./utils"; describe("utils", () => { describe("oneWayHashWithSalt", () => { - test("should return the hashed value with salt", () => { + it("should return the hashed value with salt", () => { const input = "a-sensitive-value"; const salt = "private-salt"; @@ -15,7 +15,7 @@ describe("utils", () => { ); }); - test("should return consistent length", () => { + it("should return consistent length", () => { const input = "a-sensitive-value"; const salt = "private-salt"; @@ -30,7 +30,7 @@ describe("utils", () => { }); describe("defaultConfigPath", () => { - test("supports overriding by env var", async () => { + it("supports overriding by env var", async () => { process.env.TURBO_CONFIG_DIR_PATH = "/tmp"; const result = await utils.defaultConfigPath(); assert.equal(result, "/tmp/turborepo/telemetry.json"); diff --git a/packages/turbo-test-utils/package.json b/packages/turbo-test-utils/package.json index a459513c39228..482be4027d6e2 100644 --- a/packages/turbo-test-utils/package.json +++ b/packages/turbo-test-utils/package.json @@ -22,14 +22,15 @@ "lint:prettier": "prettier -c . --cache --ignore-path=../../.prettier-ignore" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/tsconfig": "workspace:*", "@types/fs-extra": "^9.0.13", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^18.17.2", - "jest": "^27.4.3", - "ts-jest": "^27.1.1", + "jest": "^29.7.0", + "jest-mock": "^29.7.0", + "ts-jest": "^29.2.5", "typescript": "5.4.5" }, "dependencies": { diff --git a/packages/turbo-test-utils/src/mockEnv.ts b/packages/turbo-test-utils/src/mockEnv.ts index ee8be377e683a..0104925cec3b7 100644 --- a/packages/turbo-test-utils/src/mockEnv.ts +++ b/packages/turbo-test-utils/src/mockEnv.ts @@ -1,3 +1,5 @@ +import { afterAll, beforeEach, jest } from "@jest/globals"; + export function mockEnv() { const OLD_ENV = process.env; diff --git a/packages/turbo-test-utils/src/spyConsole.ts b/packages/turbo-test-utils/src/spyConsole.ts index 9f5fee2fa9a74..e0728b652f387 100644 --- a/packages/turbo-test-utils/src/spyConsole.ts +++ b/packages/turbo-test-utils/src/spyConsole.ts @@ -1,9 +1,10 @@ -export type Spy = jest.SpyInstance | undefined; +import { afterAll, afterEach, jest, beforeEach } from "@jest/globals"; +import type { SpyInstance } from "jest-mock"; export interface SpyConsole { - log: Spy; - error: Spy; - warn: Spy; + log: SpyInstance | undefined; + error: SpyInstance | undefined; + warn: SpyInstance | undefined; } export function spyConsole() { diff --git a/packages/turbo-test-utils/src/spyExit.ts b/packages/turbo-test-utils/src/spyExit.ts index a8e6c19ececd4..78d9ca721e906 100644 --- a/packages/turbo-test-utils/src/spyExit.ts +++ b/packages/turbo-test-utils/src/spyExit.ts @@ -1,7 +1,8 @@ -type Spy = jest.SpyInstance | undefined; +import { afterAll, afterEach, beforeEach, jest } from "@jest/globals"; +import type { MockInstance } from "jest-mock"; export interface SpyExit { - exit: Spy; + exit: MockInstance<(code?: number) => never> | undefined; } export function spyExit() { diff --git a/packages/turbo-test-utils/src/useFixtures.ts b/packages/turbo-test-utils/src/useFixtures.ts index 37b43fa49548a..1d87a5aa9d7fa 100644 --- a/packages/turbo-test-utils/src/useFixtures.ts +++ b/packages/turbo-test-utils/src/useFixtures.ts @@ -10,6 +10,7 @@ import { } from "fs-extra"; import yaml from "js-yaml"; import { parse as JSON5Parse } from "json5"; +import { afterAll, afterEach } from "@jest/globals"; interface SetupTextFixtures { directory: string; diff --git a/packages/turbo-test-utils/src/validateLogs.ts b/packages/turbo-test-utils/src/validateLogs.ts index ca52ad3383526..8e11015fa7568 100644 --- a/packages/turbo-test-utils/src/validateLogs.ts +++ b/packages/turbo-test-utils/src/validateLogs.ts @@ -1,21 +1,13 @@ -import type { Spy } from "./spyConsole"; +import { expect } from "@jest/globals"; +import type { SpyConsole } from "./spyConsole"; + +type Matcher = ReturnType; export function validateLogs( - logs: Array boolean | Array)>, - mockConsole: Spy, - options: { prefix?: string } = {} + spy: SpyConsole[keyof SpyConsole], + args: Array> ) { - logs.forEach((log, idx) => { - if (typeof log === "function") { - const expected = log(); - expect(mockConsole).toHaveBeenNthCalledWith( - idx + 1, - ...(Array.isArray(expected) ? expected : [expected]) - ); - } else if (options.prefix) { - expect(mockConsole).toHaveBeenNthCalledWith(idx + 1, options.prefix, log); - } else { - expect(mockConsole).toHaveBeenNthCalledWith(idx + 1, log); - } + args.forEach((arg, idx) => { + expect(spy).toHaveBeenNthCalledWith(idx + 1, ...arg); }); } diff --git a/packages/turbo-types/schemas/schema.json b/packages/turbo-types/schemas/schema.json index a9cb513e7a1c1..86fdcf0476344 100644 --- a/packages/turbo-types/schemas/schema.json +++ b/packages/turbo-types/schemas/schema.json @@ -33,7 +33,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/schemas/schema.v1.json b/packages/turbo-types/schemas/schema.v1.json index eba389b8be596..1844f9a329dfb 100644 --- a/packages/turbo-types/schemas/schema.v1.json +++ b/packages/turbo-types/schemas/schema.v1.json @@ -170,7 +170,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/schemas/schema.v2.json b/packages/turbo-types/schemas/schema.v2.json index a9cb513e7a1c1..86fdcf0476344 100644 --- a/packages/turbo-types/schemas/schema.v2.json +++ b/packages/turbo-types/schemas/schema.v2.json @@ -33,7 +33,7 @@ "items": { "type": "string" }, - "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", + "description": "A list of globs to include in the set of implicit global hash dependencies.\n\nThe contents of these files will be included in the global hashing algorithm and affect the hashes of all tasks.\n\nThis is useful for busting the cache based on:\n\n- .env files (not in Git)\n\n- any root level file that impacts package tasks that are not represented in the traditional dependency graph (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.)\n\nDocumentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies", "default": [] }, "globalEnv": { diff --git a/packages/turbo-types/src/types/config-v1.ts b/packages/turbo-types/src/types/config-v1.ts index e3c24f591b683..d0e82503f89c2 100644 --- a/packages/turbo-types/src/types/config-v1.ts +++ b/packages/turbo-types/src/types/config-v1.ts @@ -221,7 +221,7 @@ export interface RootSchemaV1 extends BaseSchemaV1 { * * - any root level file that impacts package tasks * that are not represented in the traditional dependency graph - * (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.) + * (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.) * * Documentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies * diff --git a/packages/turbo-types/src/types/config-v2.ts b/packages/turbo-types/src/types/config-v2.ts index 910383bf5ac5d..1be725d352404 100644 --- a/packages/turbo-types/src/types/config-v2.ts +++ b/packages/turbo-types/src/types/config-v2.ts @@ -67,7 +67,7 @@ export interface RootSchema extends BaseSchema { * * - any root level file that impacts package tasks * that are not represented in the traditional dependency graph - * (e.g. a root tsconfig.json, jest.config.js, .eslintrc, etc.) + * (e.g. a root tsconfig.json, jest.config.ts, .eslintrc, etc.) * * Documentation: https://turbo.build/repo/docs/reference/configuration#globaldependencies * diff --git a/packages/turbo-utils/__tests__/convertCase.test.ts b/packages/turbo-utils/__tests__/convertCase.test.ts index a52ccfd180160..487714ade5218 100644 --- a/packages/turbo-utils/__tests__/convertCase.test.ts +++ b/packages/turbo-utils/__tests__/convertCase.test.ts @@ -1,3 +1,4 @@ +import { describe, it, expect } from "@jest/globals"; import { convertCase, type CaseOptions } from "../src/convertCase"; interface TestCase { diff --git a/packages/turbo-utils/__tests__/examples.test.ts b/packages/turbo-utils/__tests__/examples.test.ts index 9386b9415eb77..b607c40d6f05d 100644 --- a/packages/turbo-utils/__tests__/examples.test.ts +++ b/packages/turbo-utils/__tests__/examples.test.ts @@ -1,8 +1,9 @@ import got from "got"; import * as Got from "got"; +import { describe, it, expect, jest } from "@jest/globals"; import { isUrlOk, getRepoInfo, hasRepo } from "../src/examples"; -jest.mock("got", () => ({ +jest.mock("got", () => ({ __esModule: true, ...jest.requireActual("got"), })); @@ -37,7 +38,7 @@ describe("examples", () => { }); describe("getRepoInfo", () => { - test.each([ + it.each([ { repoUrl: "https://github.com/vercel/turborepo/", examplePath: undefined, @@ -104,7 +105,7 @@ describe("examples", () => { }); describe("hasRepo", () => { - test.each([ + it.each([ { repoInfo: { username: "vercel", diff --git a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts index 27b0e458e6917..de4bc8a0d3885 100644 --- a/packages/turbo-utils/__tests__/getTurboConfigs.test.ts +++ b/packages/turbo-utils/__tests__/getTurboConfigs.test.ts @@ -1,5 +1,6 @@ import path from "node:path"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; import { getTurboConfigs } from "../src/getTurboConfigs"; describe("getTurboConfigs", () => { @@ -14,40 +15,40 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(1); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalEnv": Array [ + "globalEnv": [ "UNORDERED", "CI", ], - "tasks": Object { - "build": Object { - "dependsOn": Array [ + "tasks": { + "build": { + "dependsOn": [ "^build", ], }, - "deploy": Object { - "dependsOn": Array [ + "deploy": { + "dependsOn": [ "build", "test", "lint", ], - "outputs": Array [], + "outputs": [], }, - "lint": Object { - "outputs": Array [], + "lint": { + "outputs": [], }, - "test": Object { - "dependsOn": Array [ + "test": { + "dependsOn": [ "build", ], - "inputs": Array [ + "inputs": [ "src/**/*.tsx", "src/**/*.ts", "test/**/*.ts", "test/**/*.tsx", ], - "outputs": Array [], + "outputs": [], }, }, } @@ -61,14 +62,14 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(3); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalEnv": Array [ + "globalEnv": [ "CI", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "ENV_1", ], }, @@ -77,14 +78,14 @@ describe("getTurboConfigs", () => { `); expect(configs[1].isRootConfig).toBe(false); expect(configs[1].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "extends": Array [ + "extends": [ "//", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "ENV_2", ], }, @@ -94,14 +95,14 @@ describe("getTurboConfigs", () => { expect(configs[2].isRootConfig).toBe(false); expect(configs[2].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "extends": Array [ + "extends": [ "//", ], - "tasks": Object { - "build": Object { - "env": Array [ + "tasks": { + "build": { + "env": [ "IS_SERVER", ], }, @@ -117,23 +118,23 @@ describe("getTurboConfigs", () => { expect(configs).toHaveLength(1); expect(configs[0].isRootConfig).toBe(true); expect(configs[0].config).toMatchInlineSnapshot(` - Object { + { "$schema": "https://turbo.build/schema.json", - "globalDependencies": Array [ + "globalDependencies": [ "**/.env.*local", ], - "tasks": Object { - "build": Object { - "outputs": Array [ + "tasks": { + "build": { + "outputs": [ ".next/**", "!.next/cache/**", ], }, - "dev": Object { + "dev": { "cache": false, "persistent": true, }, - "lint": Object {}, + "lint": {}, }, } `); diff --git a/packages/turbo-utils/__tests__/getTurboRoot.test.ts b/packages/turbo-utils/__tests__/getTurboRoot.test.ts index 94dffc38905eb..4ff3d0631b758 100644 --- a/packages/turbo-utils/__tests__/getTurboRoot.test.ts +++ b/packages/turbo-utils/__tests__/getTurboRoot.test.ts @@ -1,6 +1,7 @@ -import path from "path"; -import { getTurboRoot } from "../src/getTurboRoot"; +import path from "node:path"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; +import { getTurboRoot } from "../src/getTurboRoot"; describe("getTurboConfigs", () => { const { useFixture } = setupTestFixtures({ @@ -8,7 +9,7 @@ describe("getTurboConfigs", () => { test: "common", }); - test.each([[""], ["child"]])( + it.each([[""], ["child"]])( "finds the root in a non-monorepo (%s)", (repoPath) => { const { root } = useFixture({ fixture: `single-package` }); @@ -17,7 +18,7 @@ describe("getTurboConfigs", () => { } ); - test.each([ + it.each([ [""], ["apps"], ["apps/docs"], diff --git a/packages/turbo-utils/__tests__/isFolderEmpty.test.ts b/packages/turbo-utils/__tests__/isFolderEmpty.test.ts index b766f8278c690..80e8a1c3c487d 100644 --- a/packages/turbo-utils/__tests__/isFolderEmpty.test.ts +++ b/packages/turbo-utils/__tests__/isFolderEmpty.test.ts @@ -1,7 +1,8 @@ +import path from "node:path"; import fs from "fs-extra"; -import path from "path"; -import { isFolderEmpty } from "../src/isFolderEmpty"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; +import { isFolderEmpty } from "../src/isFolderEmpty"; describe("isFolderEmpty", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/turbo-utils/__tests__/isWritable.test.ts b/packages/turbo-utils/__tests__/isWritable.test.ts index 1544cbcb5b48c..de0b6d93f8686 100644 --- a/packages/turbo-utils/__tests__/isWritable.test.ts +++ b/packages/turbo-utils/__tests__/isWritable.test.ts @@ -1,7 +1,8 @@ -import path from "path"; -import { isWriteable } from "../src/isWriteable"; -import { setupTestFixtures } from "@turbo/test-utils"; +import path from "node:path"; import fs from "fs-extra"; +import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; +import { isWriteable } from "../src/isWriteable"; describe("isWriteable", () => { const { useFixture } = setupTestFixtures({ diff --git a/packages/turbo-utils/jest.config.js b/packages/turbo-utils/jest.config.ts similarity index 73% rename from packages/turbo-utils/jest.config.js rename to packages/turbo-utils/jest.config.ts index f109e6b44fa1f..5e62c50688bcb 100644 --- a/packages/turbo-utils/jest.config.js +++ b/packages/turbo-utils/jest.config.ts @@ -1,9 +1,12 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", modulePathIgnorePatterns: ["/node_modules", "/dist"], transformIgnorePatterns: ["/node_modules/(?!(ansi-regex)/)"], verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-utils/package.json b/packages/turbo-utils/package.json index 1c7adffe460d2..5ae64a8dbfdf0 100644 --- a/packages/turbo-utils/package.json +++ b/packages/turbo-utils/package.json @@ -25,6 +25,7 @@ "lint:prettier": "prettier -c . --cache --ignore-path=../../.prettierignore" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@manypkg/find-root": "^1.1.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", @@ -33,7 +34,6 @@ "@types/async-retry": "^1.4.5", "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^20.5.7", "@types/tar": "^6.1.4", @@ -43,13 +43,13 @@ "fs-extra": "^11.1.1", "got": "^11.8.6", "gradient-string": "^2.0.0", - "jest": "^27.4.3", + "jest": "^29.7.0", "js-yaml": "^4.1.0", "json5": "^2.2.3", "ora": "4.1.1", "picocolors": "1.0.1", "tar": "6.1.13", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "typescript": "5.4.5" } } diff --git a/packages/turbo-workspaces/__tests__/index.test.ts b/packages/turbo-workspaces/__tests__/index.test.ts index 623ea72aed569..7efa709643958 100644 --- a/packages/turbo-workspaces/__tests__/index.test.ts +++ b/packages/turbo-workspaces/__tests__/index.test.ts @@ -1,9 +1,10 @@ -import path from "path"; +import path from "node:path"; +import execa from "execa"; import * as turboUtils from "@turbo/utils"; import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { getWorkspaceDetails, convert } from "../src"; import { generateConvertMatrix } from "./test-utils"; -import execa from "execa"; jest.mock("execa", () => jest.fn()); @@ -13,7 +14,7 @@ describe("Node entrypoint", () => { }); describe("convert", () => { - test.each(generateConvertMatrix())( + it.each(generateConvertMatrix())( "detects $fixtureType project using $fixtureManager and converts to $toManager (interactive=$interactive dry=$dry install=$install)", async ({ fixtureManager, diff --git a/packages/turbo-workspaces/__tests__/managers.test.ts b/packages/turbo-workspaces/__tests__/managers.test.ts index 734b42d2fa6cd..84c09eef77742 100644 --- a/packages/turbo-workspaces/__tests__/managers.test.ts +++ b/packages/turbo-workspaces/__tests__/managers.test.ts @@ -2,6 +2,7 @@ import path from "node:path"; import { ensureDirSync, existsSync } from "fs-extra"; import { setupTestFixtures } from "@turbo/test-utils"; import type { PackageJson } from "@turbo/utils"; +import { describe, it, expect, jest } from "@jest/globals"; import { Logger } from "../src/logger"; import { MANAGERS } from "../src/managers"; import { @@ -21,7 +22,7 @@ describe("managers", () => { }); describe("detect", () => { - test.each(generateDetectMatrix())( + it.each(generateDetectMatrix())( "$project $type project detected by $manager manager - (expect: $result)", async ({ project, manager, type, result }) => { const { root } = useFixture({ fixture: `./${project}/${type}` }); @@ -36,7 +37,7 @@ describe("managers", () => { }); describe("create", () => { - test.each(generateCreateMatrix())( + it.each(generateCreateMatrix())( "creates $manager project from $project $type project (interactive=$interactive, dry=$dry)", async ({ project, manager, type, interactive, dry }) => { expect.assertions(2); @@ -72,7 +73,7 @@ describe("managers", () => { }); describe("remove", () => { - test.each(generateRemoveMatrix())( + it.each(generateRemoveMatrix())( "removes $fixtureManager from $fixtureManager $fixtureType project when moving to $toManager (withNodeModules=$withNodeModules, interactive=$interactive, dry=$dry)", async ({ fixtureManager, @@ -154,7 +155,7 @@ describe("managers", () => { }); describe("read", () => { - test.each(generateReadMatrix())( + it.each(generateReadMatrix())( "reads $toManager workspaces from $fixtureManager $fixtureType project - (shouldThrow: $shouldThrow)", async ({ fixtureManager, fixtureType, toManager, shouldThrow }) => { const { root, directoryName } = useFixture({ @@ -226,7 +227,7 @@ describe("managers", () => { }); describe("read - alternate workspace format", () => { - test.each(generateReadMatrix())( + it.each(generateReadMatrix())( "reads $toManager workspaces using alternate format from $fixtureManager $fixtureType project - (shouldThrow: $shouldThrow)", async ({ fixtureManager, fixtureType, toManager, shouldThrow }) => { const { root, directoryName, readJson, write } = useFixture({ @@ -308,7 +309,7 @@ describe("managers", () => { }); describe("clean", () => { - test.each(generateCleanMatrix())( + it.each(generateCleanMatrix())( "cleans $fixtureManager $fixtureType project (interactive=$interactive, dry=$dry)", async ({ fixtureManager, fixtureType, interactive, dry }) => { const { root } = useFixture({ @@ -336,7 +337,7 @@ describe("managers", () => { }); describe("convertLock", () => { - test.each(generateConvertLockMatrix())( + it.each(generateConvertLockMatrix())( "converts lockfile for $fixtureManager $fixtureType project to $toManager format (interactive=$interactive, dry=$dry)", async ({ fixtureManager, fixtureType, toManager, interactive, dry }) => { const { root, exists } = useFixture({ diff --git a/packages/turbo-workspaces/__tests__/utils.test.ts b/packages/turbo-workspaces/__tests__/utils.test.ts index 868f0802c0d8c..a3d10cc7d814e 100644 --- a/packages/turbo-workspaces/__tests__/utils.test.ts +++ b/packages/turbo-workspaces/__tests__/utils.test.ts @@ -1,9 +1,10 @@ +import { describe, it, expect } from "@jest/globals"; import type { Project } from "../src/types"; import { isCompatibleWithBunWorkspaces } from "../src/utils"; describe("utils", () => { describe("isCompatibleWithBunWorkspace", () => { - test.each([ + it.each([ { globs: ["apps/*"], expected: true }, { globs: ["apps/*", "packages/*"], expected: true }, { globs: ["*"], expected: true }, diff --git a/packages/turbo-workspaces/jest.config.js b/packages/turbo-workspaces/jest.config.ts similarity index 84% rename from packages/turbo-workspaces/jest.config.js rename to packages/turbo-workspaces/jest.config.ts index e79e95c8e9560..5415633a08ee9 100644 --- a/packages/turbo-workspaces/jest.config.js +++ b/packages/turbo-workspaces/jest.config.ts @@ -1,5 +1,6 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { +import type { Config } from "jest"; + +const config = { preset: "ts-jest/presets/js-with-ts", testEnvironment: "node", testPathIgnorePatterns: ["/__fixtures__/", "/__tests__/test-utils.ts"], @@ -17,4 +18,6 @@ module.exports = { }, verbose: process.env.RUNNER_DEBUG === "1", silent: process.env.RUNNER_DEBUG !== "1", -}; +} as const satisfies Config; + +export default config; diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 75ecd8a42315a..68acc961195c2 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -39,6 +39,7 @@ "update-check": "^1.5.4" }, "devDependencies": { + "@jest/globals": "^29.7.0", "@turbo/eslint-config": "workspace:*", "@turbo/test-utils": "workspace:*", "@turbo/tsconfig": "workspace:*", @@ -46,15 +47,14 @@ "@types/fs-extra": "^9.0.13", "@types/gradient-string": "^1.1.2", "@types/inquirer": "^7.3.1", - "@types/jest": "^27.4.0", "@types/js-yaml": "^4.0.5", "@types/node": "^18.17.2", "@types/rimraf": "^3.0.2", "@types/semver": "^7.3.9", - "jest": "^27.4.3", + "jest": "^29.7.0", "semver": "^7.3.5", "strip-ansi": "^6.0.1", - "ts-jest": "^27.1.1", + "ts-jest": "^29.2.5", "tsup": "^5.10.3", "typescript": "5.4.5" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 14577d7577066..63e0fe08675d6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -115,6 +115,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -139,9 +142,6 @@ importers: '@types/inquirer': specifier: ^7.3.1 version: 7.3.3 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -149,14 +149,14 @@ importers: specifier: ^7.3.9 version: 7.3.12 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -192,6 +192,9 @@ importers: specifier: '>6.6.0' version: 8.47.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -213,24 +216,21 @@ importers: '@types/estree': specifier: ^1.0.0 version: 1.0.0 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) json5: specifier: ^2.2.1 version: 2.2.3 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.2.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -287,6 +287,9 @@ importers: specifier: ^5.27.0 version: 5.27.0 devDependencies: + '@jest/globals': + specifier: 29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -305,6 +308,12 @@ importers: '@types/node-fetch': specifier: ^2.6.6 version: 2.6.6 + jest: + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) + ts-jest: + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -354,6 +363,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -387,9 +399,6 @@ importers: '@types/inquirer': specifier: ^8.2.0 version: 8.2.5 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -403,17 +412,17 @@ importers: specifier: ^4.2.2 version: 4.2.2 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) plop: specifier: ^3.1.1 version: 3.1.1 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -447,8 +456,8 @@ importers: specifier: ^6.2.2 version: 6.2.2 ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) update-check: specifier: ^1.5.4 version: 1.5.4 @@ -456,6 +465,9 @@ importers: specifier: ^5.0.0 version: 5.0.0 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -474,9 +486,6 @@ importers: '@types/inquirer': specifier: ^8.2.5 version: 8.2.5 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -484,14 +493,14 @@ importers: specifier: ^4.0.0 version: 4.0.0 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.1)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -502,6 +511,9 @@ importers: specifier: ^2.2.3 version: 2.2.3 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -520,9 +532,6 @@ importers: '@turbo/utils': specifier: workspace:* version: link:../turbo-utils - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/node': specifier: ^18.17.2 version: 18.17.4 @@ -530,11 +539,11 @@ importers: specifier: ^11.0.0 version: 11.0.0 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^5.12.1 version: 5.12.9(typescript@5.4.5) @@ -618,6 +627,9 @@ importers: specifier: ^2.2.3 version: 2.2.3 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -627,9 +639,6 @@ importers: '@types/fs-extra': specifier: ^9.0.13 version: 9.0.13 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -637,11 +646,14 @@ importers: specifier: ^18.17.2 version: 18.17.4 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) + jest-mock: + specifier: ^29.7.0 + version: 29.7.0 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -666,6 +678,9 @@ importers: packages/turbo-utils: devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@manypkg/find-root': specifier: ^1.1.0 version: 1.1.0 @@ -690,9 +705,6 @@ importers: '@types/gradient-string': specifier: ^1.1.2 version: 1.1.2 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -721,8 +733,8 @@ importers: specifier: ^2.0.0 version: 2.0.1 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@20.5.7) js-yaml: specifier: ^4.1.0 version: 4.1.0 @@ -739,8 +751,8 @@ importers: specifier: 6.1.13 version: 6.1.13 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) typescript: specifier: 5.4.5 version: 5.4.5 @@ -806,6 +818,9 @@ importers: specifier: ^1.5.4 version: 1.5.4 devDependencies: + '@jest/globals': + specifier: ^29.7.0 + version: 29.7.0 '@turbo/eslint-config': specifier: workspace:* version: link:../eslint-config @@ -827,9 +842,6 @@ importers: '@types/inquirer': specifier: ^7.3.1 version: 7.3.3 - '@types/jest': - specifier: ^27.4.0 - version: 27.5.2 '@types/js-yaml': specifier: ^4.0.5 version: 4.0.5 @@ -843,14 +855,14 @@ importers: specifier: ^7.3.9 version: 7.3.12 jest: - specifier: ^27.4.3 - version: 27.5.1(ts-node@10.9.1) + specifier: ^29.7.0 + version: 29.7.0(@types/node@18.17.4) strip-ansi: specifier: ^6.0.1 version: 6.0.1 ts-jest: - specifier: ^27.1.1 - version: 27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5) + specifier: ^29.2.5 + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) tsup: specifier: ^5.10.3 version: 5.12.9(typescript@5.4.5) @@ -1063,11 +1075,24 @@ packages: chalk: 2.4.2 dev: true + /@babel/code-frame@7.24.7: + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + dev: true + /@babel/compat-data@7.23.5: resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true + /@babel/compat-data@7.25.4: + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/core@7.23.6: resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} engines: {node: '>=6.9.0'} @@ -1091,6 +1116,29 @@ packages: - supports-color dev: true + /@babel/core@7.25.2: + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/eslint-parser@7.22.11(@babel/core@7.23.6)(eslint@8.55.0): resolution: {integrity: sha512-YjOYZ3j7TjV8OhLW6NCtyg8G04uStATEUe5eiLuCZaXz2VSDQ3dsAtm2D+TuQyAqNMUK2WacGo0/uma9Pein1w==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} @@ -1115,6 +1163,16 @@ packages: jsesc: 2.5.2 dev: true + /@babel/generator@7.25.6: + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.6 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true + /@babel/helper-compilation-targets@7.23.6: resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} @@ -1126,6 +1184,17 @@ packages: semver: 6.3.1 dev: true + /@babel/helper-compilation-targets@7.25.2: + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.4 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + /@babel/helper-environment-visitor@7.22.20: resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} engines: {node: '>=6.9.0'} @@ -1153,6 +1222,16 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-module-imports@7.24.7: + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} @@ -1167,11 +1246,31 @@ packages: '@babel/helper-validator-identifier': 7.22.20 dev: true + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-plugin-utils@7.22.5: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-plugin-utils@7.24.8: + resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-simple-access@7.22.5: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} @@ -1179,6 +1278,16 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/helper-simple-access@7.24.7: + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.6 + '@babel/types': 7.25.6 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} @@ -1186,13 +1295,13 @@ packages: '@babel/types': 7.23.6 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} dev: true - /@babel/helper-string-parser@7.23.4: - resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + /@babel/helper-string-parser@7.24.8: + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} dev: true @@ -1206,11 +1315,21 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-identifier@7.24.7: + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.23.5: resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.24.8: + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helpers@7.23.8: resolution: {integrity: sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==} engines: {node: '>=6.9.0'} @@ -1222,6 +1341,14 @@ packages: - supports-color dev: true + /@babel/helpers@7.25.6: + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + dev: true + /@babel/highlight@7.23.4: resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} @@ -1231,6 +1358,16 @@ packages: js-tokens: 4.0.0 dev: true + /@babel/highlight@7.24.7: + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true + /@babel/parser@7.23.6: resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} engines: {node: '>=6.0.0'} @@ -1239,6 +1376,14 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/parser@7.25.6: + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.25.6 + dev: true + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} peerDependencies: @@ -1284,6 +1429,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.23.6): + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.24.8 + dev: true + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} peerDependencies: @@ -1382,6 +1537,15 @@ packages: '@babel/types': 7.23.6 dev: true + /@babel/template@7.25.0: + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.6 + '@babel/types': 7.25.6 + dev: true + /@babel/traverse@7.23.7: resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==} engines: {node: '>=6.9.0'} @@ -1400,13 +1564,19 @@ packages: - supports-color dev: true - /@babel/types@7.22.11: - resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} + /@babel/traverse@7.25.6: + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 - to-fast-properties: 2.0.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.6 + '@babel/parser': 7.25.6 + '@babel/template': 7.25.0 + '@babel/types': 7.25.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color dev: true /@babel/types@7.23.6: @@ -1418,6 +1588,15 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types@7.25.6: + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -2188,97 +2367,115 @@ packages: engines: {node: '>=8'} dev: true - /@jest/console@27.5.1: - resolution: {integrity: sha512-kZ/tNpS3NXn0mlXXXPNuDZnb4c0oZ20r4K5eemM2k30ZC3G0T02nXUvyhf5YdbXWHPEJLc9qGLxEZ216MdL+Zg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/console@29.7.0: + resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 - jest-message-util: 27.5.1 - jest-util: 27.5.1 + jest-message-util: 29.7.0 + jest-util: 29.7.0 slash: 3.0.0 dev: true - /@jest/core@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/core@29.7.0(ts-node@10.9.2): + 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 dependencies: - '@jest/console': 27.5.1 - '@jest/reporters': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/reporters': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 - emittery: 0.8.1 + ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 - jest-changed-files: 27.5.1 - jest-config: 27.5.1(ts-node@10.9.1) - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-resolve-dependencies: 27.5.1 - jest-runner: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 - jest-watcher: 27.5.1 + jest-changed-files: 29.7.0 + jest-config: 29.7.0(@types/node@20.11.30)(ts-node@10.9.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 + 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 micromatch: 4.0.5 - rimraf: 3.0.2 + pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true - /@jest/environment@27.5.1: - resolution: {integrity: sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/environment@29.7.0: + resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 - jest-mock: 27.5.1 + jest-mock: 29.7.0 + dev: true + + /@jest/expect-utils@29.7.0: + resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + jest-get-type: 29.6.3 + dev: true + + /@jest/expect@29.7.0: + resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + expect: 29.7.0 + jest-snapshot: 29.7.0 + transitivePeerDependencies: + - supports-color dev: true - /@jest/fake-timers@27.5.1: - resolution: {integrity: sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 - '@sinonjs/fake-timers': 8.1.0 + '@jest/types': 29.6.3 + '@sinonjs/fake-timers': 10.3.0 '@types/node': 20.11.30 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-util: 27.5.1 + jest-message-util: 29.7.0 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /@jest/globals@27.5.1: - resolution: {integrity: sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/globals@29.7.0: + resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/types': 27.5.1 - expect: 27.5.1 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/types': 29.6.3 + jest-mock: 29.7.0 + transitivePeerDependencies: + - supports-color dev: true - /@jest/reporters@27.5.1: - resolution: {integrity: sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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: @@ -2286,10 +2483,11 @@ packages: optional: true dependencies: '@bcoe/v8-coverage': 0.2.3 - '@jest/console': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 '@types/node': 20.11.30 chalk: 4.1.2 collect-v8-coverage: 1.0.1 @@ -2297,85 +2495,89 @@ packages: glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 5.2.1 + istanbul-lib-instrument: 6.0.3 istanbul-lib-report: 3.0.0 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.5 - jest-haste-map: 27.5.1 - jest-resolve: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 + jest-message-util: 29.7.0 + jest-util: 29.7.0 + jest-worker: 29.7.0 slash: 3.0.0 - source-map: 0.6.1 string-length: 4.0.2 - terminal-link: 2.1.1 - v8-to-istanbul: 8.1.1 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.3.0 transitivePeerDependencies: - supports-color dev: true - /@jest/source-map@27.5.1: - resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jest/source-map@29.6.3: + resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: + '@jridgewell/trace-mapping': 0.3.25 callsites: 3.1.0 graceful-fs: 4.2.11 - source-map: 0.6.1 dev: true - /@jest/test-result@27.5.1: - resolution: {integrity: sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/test-result@29.7.0: + resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/types': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 collect-v8-coverage: 1.0.1 dev: true - /@jest/test-sequencer@27.5.1: - resolution: {integrity: sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/test-result': 27.5.1 + '@jest/test-result': 29.7.0 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-runtime: 27.5.1 - transitivePeerDependencies: - - supports-color + jest-haste-map: 29.7.0 + slash: 3.0.0 dev: true - /@jest/transform@27.5.1: - resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /@jest/transform@29.7.0: + resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@babel/core': 7.23.6 - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 + '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 chalk: 4.1.2 - convert-source-map: 1.9.0 + convert-source-map: 2.0.0 fast-json-stable-stringify: 2.1.0 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 + jest-haste-map: 29.7.0 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 micromatch: 4.0.5 pirates: 4.0.5 slash: 3.0.0 - source-map: 0.6.1 - write-file-atomic: 3.0.3 + write-file-atomic: 4.0.2 transitivePeerDependencies: - supports-color dev: true - /@jest/types@27.5.1: - resolution: {integrity: sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: + '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 '@types/node': 20.11.30 - '@types/yargs': 16.0.5 + '@types/yargs': 17.0.33 chalk: 4.1.2 dev: true @@ -2396,6 +2598,15 @@ packages: '@jridgewell/trace-mapping': 0.3.17 dev: true + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.14 + '@jridgewell/trace-mapping': 0.3.25 + dev: true + /@jridgewell/resolve-uri@3.1.0: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} @@ -2405,6 +2616,11 @@ packages: engines: {node: '>=6.0.0'} dev: true + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/sourcemap-codec@1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} @@ -2415,6 +2631,13 @@ packages: '@jridgewell/sourcemap-codec': 1.4.14 dev: true + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -2584,20 +2807,24 @@ packages: resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==} dev: true + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + /@sindresorhus/is@4.6.0: resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} engines: {node: '>=10'} - /@sinonjs/commons@1.8.6: - resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/fake-timers@8.1.0: - resolution: {integrity: sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==} + /@sinonjs/fake-timers@10.3.0: + resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 1.8.6 + '@sinonjs/commons': 3.0.1 dev: true /@szmarczak/http-timer@4.0.6: @@ -2611,11 +2838,6 @@ packages: hasBin: true dev: true - /@tootallnate/once@1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} - engines: {node: '>= 6'} - dev: true - /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} @@ -2660,7 +2882,7 @@ packages: /@types/babel__traverse@7.18.3: resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==} dependencies: - '@babel/types': 7.22.11 + '@babel/types': 7.23.6 dev: true /@types/cacheable-request@6.0.3: @@ -2781,13 +3003,6 @@ packages: '@types/istanbul-lib-report': 3.0.0 dev: true - /@types/jest@27.5.2: - resolution: {integrity: sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==} - dependencies: - jest-matcher-utils: 27.5.1 - pretty-format: 27.5.1 - dev: true - /@types/js-yaml@4.0.5: resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} dev: true @@ -2879,10 +3094,6 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true - /@types/prettier@2.7.2: - resolution: {integrity: sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==} - dev: true - /@types/prop-types@15.7.5: resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} dev: true @@ -2966,8 +3177,8 @@ packages: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} dev: true - /@types/yargs@16.0.5: - resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.0 dev: true @@ -3231,17 +3442,6 @@ packages: - supports-color dev: true - /abab@2.0.6: - resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} - dev: true - - /acorn-globals@6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} - dependencies: - acorn: 7.4.1 - acorn-walk: 7.2.0 - dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -3249,40 +3449,15 @@ packages: dependencies: acorn: 8.10.0 - /acorn-walk@7.2.0: - resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} - engines: {node: '>=0.4.0'} - dev: true - /acorn-walk@8.2.0: resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} engines: {node: '>=0.4.0'} - /acorn@7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true - /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true - /acorn@8.8.1: - resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} - engines: {node: '>=0.4.0'} - hasBin: true - - /agent-base@6.0.2: - resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} - engines: {node: '>= 6.0.0'} - dependencies: - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /agent-base@7.1.0: resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} engines: {node: '>= 14'} @@ -3527,6 +3702,10 @@ packages: dependencies: retry: 0.13.1 + /async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + dev: true + /asynciterator.prototype@1.0.0: resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} dependencies: @@ -3567,18 +3746,17 @@ packages: dequal: 2.0.3 dev: true - /babel-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /babel-jest@29.7.0(@babel/core@7.23.6): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: '@babel/core': ^7.8.0 dependencies: '@babel/core': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/transform': 29.7.0 '@types/babel__core': 7.1.19 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 27.5.1(@babel/core@7.23.6) + babel-preset-jest: 29.6.3(@babel/core@7.23.6) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -3599,9 +3777,9 @@ packages: - supports-color dev: true - /babel-plugin-jest-hoist@27.5.1: - resolution: {integrity: sha512-50wCwD5EMNW4aRpOwtqzyZHIewTYNxLA4nhB+09d8BIssfNfzBRhkBIHiaPv1Si226TQSvp8gxAJm2iY2qs2hQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /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} dependencies: '@babel/template': 7.22.15 '@babel/types': 7.23.6 @@ -3629,14 +3807,14 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) dev: true - /babel-preset-jest@27.5.1(@babel/core@7.23.6): - resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /babel-preset-jest@29.6.3(@babel/core@7.23.6): + 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 dependencies: '@babel/core': 7.23.6 - babel-plugin-jest-hoist: 27.5.1 + babel-plugin-jest-hoist: 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) dev: true @@ -3739,10 +3917,6 @@ packages: dependencies: fill-range: 7.0.1 - /browser-process-hrtime@1.0.0: - resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==} - dev: true - /browserslist@4.22.2: resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3754,6 +3928,17 @@ packages: update-browserslist-db: 1.0.13(browserslist@4.22.2) dev: true + /browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001660 + electron-to-chromium: 1.5.24 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + dev: true + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -3902,6 +4087,10 @@ packages: resolution: {integrity: sha512-acWTYaha8xfhA/Du/z4sNZjHUWjkiuoAi2LM+T/aL+kemKQgPT1xBb/YKjlQ0Qo8gvbHsGNplrEJ+9G3gL7i4Q==} dev: true + /caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + dev: true + /capital-case@1.0.4: resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} dependencies: @@ -4081,8 +4270,9 @@ packages: resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} engines: {node: '>= 10'} - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + /cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} dependencies: string-width: 4.2.3 strip-ansi: 6.0.1 @@ -4216,10 +4406,6 @@ packages: upper-case: 2.0.2 dev: true - /convert-source-map@1.9.0: - resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} - dev: true - /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -4254,6 +4440,44 @@ packages: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} dev: false + /create-jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + 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@18.17.4)(ts-node@10.9.2) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /create-jest@29.7.0(@types/node@20.5.7): + resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + 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@20.5.7) + jest-util: 29.7.0 + prompts: 2.4.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + /create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -4281,21 +4505,6 @@ packages: shebang-command: 2.0.0 which: 2.0.2 - /cssom@0.3.8: - resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} - dev: true - - /cssom@0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} - dev: true - - /cssstyle@2.3.0: - resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} - engines: {node: '>=8'} - dependencies: - cssom: 0.3.8 - dev: true - /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -4433,15 +4642,6 @@ packages: engines: {node: '>= 14'} dev: false - /data-urls@2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} - engines: {node: '>=10'} - dependencies: - abab: 2.0.6 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - dev: true - /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -4475,10 +4675,6 @@ packages: dependencies: ms: 2.1.2 - /decimal.js@10.4.0: - resolution: {integrity: sha512-Nv6ENEzyPQ6AItkGwLE2PGKinZZ9g59vSh2BeH6NqPu0OTKZ5ruJsVqh/orbAnqXc9pBbgXAIrc2EyaCj8NpGg==} - dev: true - /decode-named-character-reference@1.0.2: resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: @@ -4496,8 +4692,13 @@ packages: dependencies: mimic-response: 3.1.0 - /dedent@0.7.0: - resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==} + /dedent@1.5.3: + resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true dev: true /deep-extend@0.6.0: @@ -4671,9 +4872,9 @@ packages: dequal: 2.0.3 dev: false - /diff-sequences@27.5.1: - resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true /diff@4.0.2: @@ -4708,13 +4909,6 @@ packages: dependencies: esutils: 2.0.3 - /domexception@2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} - engines: {node: '>=8'} - dependencies: - webidl-conversions: 5.0.0 - dev: true - /dot-case@2.1.1: resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} dependencies: @@ -4737,13 +4931,25 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true + /ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + jake: 10.9.2 + dev: true + /electron-to-chromium@1.4.626: resolution: {integrity: sha512-f7/be56VjRRQk+Ric6PmIrEtPcIqsn3tElyAu9Sh6egha2VLJ82qwkcOdcnT06W+Pb6RUulV1ckzrGbKzVcTHg==} dev: true - /emittery@0.8.1: - resolution: {integrity: sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==} - engines: {node: '>=10'} + /electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} + dev: true + + /emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} dev: true /emoji-regex@8.0.0: @@ -5367,6 +5573,11 @@ packages: engines: {node: '>=6'} dev: true + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + dev: true + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -5393,19 +5604,6 @@ packages: source-map: 0.6.1 dev: false - /escodegen@2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 - dev: true - /eslint-config-prettier@9.0.0(eslint@8.55.0): resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==} hasBin: true @@ -5922,14 +6120,15 @@ packages: homedir-polyfill: 1.0.3 dev: true - /expect@27.5.1: - resolution: {integrity: sha512-E1q5hSUG2AmYQwQJ041nvgpkODHQvB+RKlB4IYdru6uJsyFTRyZAP463M+1lINorwbqAmUggi6+WwkD8lCS/Dw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /expect@29.7.0: + resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 - jest-get-type: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 + '@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 dev: true /extend-shallow@2.0.1: @@ -6030,6 +6229,12 @@ packages: dependencies: flat-cache: 3.0.4 + /filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + dependencies: + minimatch: 5.1.0 + dev: true + /fill-range@4.0.0: resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} engines: {node: '>=0.10.0'} @@ -6131,15 +6336,6 @@ packages: signal-exit: 4.1.0 dev: true - /form-data@3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} - engines: {node: '>= 6'} - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - dev: true - /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -6658,13 +6854,6 @@ packages: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} dev: true - /html-encoding-sniffer@2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} - engines: {node: '>=10'} - dependencies: - whatwg-encoding: 1.0.5 - dev: true - /html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} dev: true @@ -6676,17 +6865,6 @@ packages: /http-cache-semantics@4.1.1: resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} - /http-proxy-agent@4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} - engines: {node: '>= 6'} - dependencies: - '@tootallnate/once': 1.1.2 - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /http-proxy-agent@7.0.0: resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} engines: {node: '>= 14'} @@ -6704,16 +6882,6 @@ packages: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - /https-proxy-agent@5.0.1: - resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} - engines: {node: '>= 6'} - dependencies: - agent-base: 6.0.2 - debug: 4.3.4 - transitivePeerDependencies: - - supports-color - dev: true - /https-proxy-agent@7.0.1: resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} engines: {node: '>= 14'} @@ -7193,10 +7361,6 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} - /is-potential-custom-element-name@1.0.1: - resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} - dev: true - /is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -7257,10 +7421,6 @@ packages: which-typed-array: 1.1.11 dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - /is-unc-path@1.0.0: resolution: {integrity: sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==} engines: {node: '>=0.10.0'} @@ -7355,6 +7515,19 @@ packages: - supports-color dev: true + /istanbul-lib-instrument@6.0.3: + resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} + engines: {node: '>=10'} + dependencies: + '@babel/core': 7.25.2 + '@babel/parser': 7.25.6 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.0 + semver: 7.5.4 + transitivePeerDependencies: + - supports-color + dev: true + /istanbul-lib-report@3.0.0: resolution: {integrity: sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==} engines: {node: '>=8'} @@ -7401,45 +7574,58 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jest-changed-files@27.5.1: - resolution: {integrity: sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jake@10.9.2: + resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + async: 3.2.6 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + dev: 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} dependencies: - '@jest/types': 27.5.1 execa: 5.1.1 - throat: 6.0.1 + jest-util: 29.7.0 + p-limit: 3.1.0 dev: true - /jest-circus@27.5.1: - resolution: {integrity: sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/environment': 29.7.0 + '@jest/expect': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 co: 4.6.0 - dedent: 0.7.0 - expect: 27.5.1 + dedent: 1.5.3 is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 + jest-each: 29.7.0 + jest-matcher-utils: 29.7.0 + jest-message-util: 29.7.0 + jest-runtime: 29.7.0 + jest-snapshot: 29.7.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 - throat: 6.0.1 transitivePeerDependencies: + - babel-plugin-macros - supports-color dev: true - /jest-cli@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-cli@29.7.0(@types/node@18.17.4): + 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 @@ -7447,217 +7633,309 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) exit: 0.1.2 - graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 - prompts: 2.4.2 - yargs: 16.2.0 + jest-config: 29.7.0(@types/node@18.17.4)(ts-node@10.9.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 + dev: true + + /jest-cli@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@18.17.4)(ts-node@10.9.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 + dev: true + + /jest-cli@29.7.0(@types/node@20.5.7): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 + chalk: 4.1.2 + create-jest: 29.7.0(@types/node@20.5.7) + exit: 0.1.2 + import-local: 3.1.0 + jest-config: 29.7.0(@types/node@20.5.7) + jest-util: 29.7.0 + jest-validate: 29.7.0 + yargs: 17.7.2 transitivePeerDependencies: - - bufferutil - - canvas + - '@types/node' + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true - /jest-config@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 dependencies: '@babel/core': 7.23.6 - '@jest/test-sequencer': 27.5.1 - '@jest/types': 27.5.1 - babel-jest: 27.5.1(@babel/core@7.23.6) + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 18.17.4 + babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 ci-info: 3.8.0 deepmerge: 4.2.2 glob: 7.2.3 graceful-fs: 4.2.11 - jest-circus: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-get-type: 27.5.1 - jest-jasmine2: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runner: 27.5.1 - jest-util: 27.5.1 - jest-validate: 27.5.1 + jest-circus: 29.7.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 + jest-util: 29.7.0 + jest-validate: 29.7.0 micromatch: 4.0.5 parse-json: 5.2.0 - pretty-format: 27.5.1 + pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) transitivePeerDependencies: - - bufferutil - - canvas + - babel-plugin-macros - supports-color - - utf-8-validate dev: true - /jest-diff@27.5.1: - resolution: {integrity: sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@20.11.30)(ts-node@10.9.2): + 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 dependencies: + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.30 + babel-jest: 29.7.0(@babel/core@7.23.6) chalk: 4.1.2 - diff-sequences: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + ci-info: 3.8.0 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.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 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color dev: true - /jest-docblock@27.5.1: - resolution: {integrity: sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-config@29.7.0(@types/node@20.5.7): + 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 dependencies: - detect-newline: 3.1.0 + '@babel/core': 7.23.6 + '@jest/test-sequencer': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.5.7 + babel-jest: 29.7.0(@babel/core@7.23.6) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.2.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.7.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 + jest-util: 29.7.0 + jest-validate: 29.7.0 + micromatch: 4.0.5 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color dev: true - /jest-each@27.5.1: - resolution: {integrity: sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-diff@29.7.0: + resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 chalk: 4.1.2 - jest-get-type: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 + diff-sequences: 29.6.3 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-environment-jsdom@27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-docblock@29.7.0: + resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.11.30 - jest-mock: 27.5.1 - jest-util: 27.5.1 - jsdom: 16.7.0 - transitivePeerDependencies: - - bufferutil - - canvas - - supports-color - - utf-8-validate + detect-newline: 3.1.0 + dev: true + + /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} + 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 dev: true - /jest-environment-node@27.5.1: - resolution: {integrity: sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-environment-node@29.7.0: + resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/types': 27.5.1 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 - jest-mock: 27.5.1 - jest-util: 27.5.1 + jest-mock: 29.7.0 + jest-util: 29.7.0 dev: true - /jest-get-type@27.5.1: - resolution: {integrity: sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-get-type@29.6.3: + resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-haste-map@27.5.1: - resolution: {integrity: sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 '@types/node': 20.11.30 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 - jest-regex-util: 27.5.1 - jest-serializer: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 + jest-regex-util: 29.6.3 + jest-util: 29.7.0 + jest-worker: 29.7.0 micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 dev: true - /jest-jasmine2@27.5.1: - resolution: {integrity: sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@jest/environment': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 - '@types/node': 20.11.30 - chalk: 4.1.2 - co: 4.6.0 - expect: 27.5.1 - is-generator-fn: 2.1.0 - jest-each: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-runtime: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 - pretty-format: 27.5.1 - throat: 6.0.1 - transitivePeerDependencies: - - supports-color - dev: true - - /jest-leak-detector@27.5.1: - resolution: {integrity: sha512-POXfWAMvfU6WMUXftV4HolnJfnPOGEu10fscNCA76KBpRRhcMN2c8d3iT2pxQS3HLbA+5X4sOUPzYO2NUyIlHQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-matcher-utils@27.5.1: - resolution: {integrity: sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: chalk: 4.1.2 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - pretty-format: 27.5.1 + jest-diff: 29.7.0 + jest-get-type: 29.6.3 + pretty-format: 29.7.0 dev: true - /jest-message-util@27.5.1: - resolution: {integrity: sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: '@babel/code-frame': 7.23.5 - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/stack-utils': 2.0.1 chalk: 4.1.2 graceful-fs: 4.2.11 micromatch: 4.0.5 - pretty-format: 27.5.1 + pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 dev: true - /jest-mock@27.5.1: - resolution: {integrity: sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-mock@29.7.0: + resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 + jest-util: 29.7.0 dev: true - /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): + /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} engines: {node: '>=6'} peerDependencies: @@ -7666,146 +7944,131 @@ packages: jest-resolve: optional: true dependencies: - jest-resolve: 27.5.1 + jest-resolve: 29.7.0 dev: true - /jest-regex-util@27.5.1: - resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-regex-util@29.6.3: + resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /jest-resolve-dependencies@27.5.1: - resolution: {integrity: sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 - jest-regex-util: 27.5.1 - jest-snapshot: 27.5.1 + jest-regex-util: 29.6.3 + jest-snapshot: 29.7.0 transitivePeerDependencies: - supports-color dev: true - /jest-resolve@27.5.1: - resolution: {integrity: sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-resolve@29.7.0: + resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/types': 27.5.1 chalk: 4.1.2 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-pnp-resolver: 1.2.3(jest-resolve@27.5.1) - jest-util: 27.5.1 - jest-validate: 27.5.1 + 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.8 - resolve.exports: 1.1.1 + resolve.exports: 2.0.2 slash: 3.0.0 dev: true - /jest-runner@27.5.1: - resolution: {integrity: sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-runner@29.7.0: + resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/console': 27.5.1 - '@jest/environment': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/console': 29.7.0 + '@jest/environment': 29.7.0 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 - emittery: 0.8.1 + emittery: 0.13.1 graceful-fs: 4.2.11 - jest-docblock: 27.5.1 - jest-environment-jsdom: 27.5.1 - jest-environment-node: 27.5.1 - jest-haste-map: 27.5.1 - jest-leak-detector: 27.5.1 - jest-message-util: 27.5.1 - jest-resolve: 27.5.1 - jest-runtime: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 - source-map-support: 0.5.21 - throat: 6.0.1 + 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 + 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: - - bufferutil - - canvas - supports-color - - utf-8-validate dev: true - /jest-runtime@27.5.1: - resolution: {integrity: sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest-runtime@29.7.0: + resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@jest/environment': 27.5.1 - '@jest/fake-timers': 27.5.1 - '@jest/globals': 27.5.1 - '@jest/source-map': 27.5.1 - '@jest/test-result': 27.5.1 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 + '@jest/environment': 29.7.0 + '@jest/fake-timers': 29.7.0 + '@jest/globals': 29.7.0 + '@jest/source-map': 29.6.3 + '@jest/test-result': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 + '@types/node': 20.11.30 chalk: 4.1.2 cjs-module-lexer: 1.2.2 collect-v8-coverage: 1.0.1 - execa: 5.1.1 glob: 7.2.3 graceful-fs: 4.2.11 - jest-haste-map: 27.5.1 - jest-message-util: 27.5.1 - jest-mock: 27.5.1 - jest-regex-util: 27.5.1 - jest-resolve: 27.5.1 - jest-snapshot: 27.5.1 - jest-util: 27.5.1 + 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 + jest-util: 29.7.0 slash: 3.0.0 strip-bom: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /jest-serializer@27.5.1: - resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - dependencies: - '@types/node': 20.11.30 - graceful-fs: 4.2.11 - dev: true - - /jest-snapshot@27.5.1: - resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: '@babel/core': 7.23.6 '@babel/generator': 7.23.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.23.6) '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.23.6) - '@babel/traverse': 7.23.7 '@babel/types': 7.23.6 - '@jest/transform': 27.5.1 - '@jest/types': 27.5.1 - '@types/babel__traverse': 7.18.3 - '@types/prettier': 2.7.2 + '@jest/expect-utils': 29.7.0 + '@jest/transform': 29.7.0 + '@jest/types': 29.6.3 babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) chalk: 4.1.2 - expect: 27.5.1 + expect: 29.7.0 graceful-fs: 4.2.11 - jest-diff: 27.5.1 - jest-get-type: 27.5.1 - jest-haste-map: 27.5.1 - jest-matcher-utils: 27.5.1 - jest-message-util: 27.5.1 - jest-util: 27.5.1 + 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: 27.5.1 + pretty-format: 29.7.0 semver: 7.5.4 transitivePeerDependencies: - supports-color dev: true - /jest-util@27.5.1: - resolution: {integrity: sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 '@types/node': 20.11.30 chalk: 4.1.2 ci-info: 3.8.0 @@ -7813,43 +8076,87 @@ packages: picomatch: 2.3.1 dev: true - /jest-validate@27.5.1: - resolution: {integrity: sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/types': 27.5.1 + '@jest/types': 29.6.3 camelcase: 6.3.0 chalk: 4.1.2 - jest-get-type: 27.5.1 + jest-get-type: 29.6.3 leven: 3.1.0 - pretty-format: 27.5.1 + pretty-format: 29.7.0 dev: true - /jest-watcher@27.5.1: - resolution: {integrity: sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.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} dependencies: - '@jest/test-result': 27.5.1 - '@jest/types': 27.5.1 + '@jest/test-result': 29.7.0 + '@jest/types': 29.6.3 '@types/node': 20.11.30 ansi-escapes: 4.3.2 chalk: 4.1.2 - jest-util: 27.5.1 + emittery: 0.13.1 + jest-util: 29.7.0 string-length: 4.0.2 dev: true - /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} dependencies: '@types/node': 20.11.30 + jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@27.5.1(ts-node@10.9.1): - resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /jest@29.7.0(@types/node@18.17.4): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.17.4) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest@29.7.0(@types/node@18.17.4)(ts-node@10.9.2): + 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 + dependencies: + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 + import-local: 3.1.0 + jest-cli: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + dev: true + + /jest@29.7.0(@types/node@20.5.7): + 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 @@ -7857,15 +8164,15 @@ packages: node-notifier: optional: true dependencies: - '@jest/core': 27.5.1(ts-node@10.9.1) + '@jest/core': 29.7.0(ts-node@10.9.2) + '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 27.5.1(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.5.7) transitivePeerDependencies: - - bufferutil - - canvas + - '@types/node' + - babel-plugin-macros - supports-color - ts-node - - utf-8-validate dev: true /jju@1.4.0: @@ -7894,48 +8201,6 @@ packages: dependencies: argparse: 2.0.1 - /jsdom@16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} - engines: {node: '>=10'} - peerDependencies: - canvas: ^2.5.0 - peerDependenciesMeta: - canvas: - optional: true - dependencies: - abab: 2.0.6 - acorn: 8.10.0 - acorn-globals: 6.0.0 - cssom: 0.4.4 - cssstyle: 2.3.0 - data-urls: 2.0.0 - decimal.js: 10.4.0 - domexception: 2.0.1 - escodegen: 2.0.0 - form-data: 3.0.1 - html-encoding-sniffer: 2.0.1 - http-proxy-agent: 4.0.1 - https-proxy-agent: 5.0.1 - is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.1 - parse5: 6.0.1 - saxes: 5.0.1 - symbol-tree: 3.2.4 - tough-cookie: 4.1.2 - w3c-hr-time: 1.0.2 - w3c-xmlserializer: 2.0.0 - webidl-conversions: 6.1.0 - whatwg-encoding: 1.0.5 - whatwg-mimetype: 2.3.0 - whatwg-url: 8.7.0 - ws: 7.5.9 - xml-name-validator: 3.0.0 - transitivePeerDependencies: - - bufferutil - - supports-color - - utf-8-validate - dev: true - /jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -8060,6 +8325,7 @@ packages: dependencies: prelude-ls: 1.1.2 type-check: 0.3.2 + dev: false /levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} @@ -8591,7 +8857,6 @@ packages: engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - dev: false /minimatch@9.0.0: resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==} @@ -8830,6 +9095,10 @@ packages: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true + /noop2@2.0.0: resolution: {integrity: sha512-2bu7Pfpf6uNqashWV8P7yYeutQ3XkLY9MBSYI5sOAFZxuWcW/uJfLbKj5m6SvMDT9U1Y0C+7UFG+7VSiIdXjtA==} dev: false @@ -8872,10 +9141,6 @@ packages: path-key: 4.0.0 dev: true - /nwsapi@2.2.1: - resolution: {integrity: sha512-JYOWTeFoS0Z93587vRJgASD5Ut11fYl5NyihP3KrYBvMe1FRRs6RN7m20SA/16GM4P6hTnZjT+UmDOt38UeXNg==} - dev: true - /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -9024,6 +9289,7 @@ packages: prelude-ls: 1.1.2 type-check: 0.3.2 word-wrap: 1.2.3 + dev: false /optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} @@ -9199,10 +9465,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /parse5@6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - dev: true - /parse5@7.2.0: resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==} dependencies: @@ -9340,7 +9602,7 @@ packages: engines: {node: '>=0.10.0'} dev: false - /postcss-load-config@3.1.4(ts-node@10.9.1): + /postcss-load-config@3.1.4(ts-node@10.9.2): resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} engines: {node: '>= 10'} peerDependencies: @@ -9353,13 +9615,14 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - ts-node: 10.9.1(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) yaml: 1.10.2 dev: true /prelude-ls@1.1.2: resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} engines: {node: '>= 0.8.0'} + dev: false /prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} @@ -9390,13 +9653,13 @@ packages: hasBin: true dev: true - /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} dependencies: - ansi-regex: 5.0.1 + '@jest/schemas': 29.6.3 ansi-styles: 5.2.0 - react-is: 17.0.2 + react-is: 18.3.1 dev: true /process-nextick-args@2.0.1: @@ -9447,10 +9710,6 @@ packages: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: false - /psl@1.9.0: - resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - dev: true - /pump@1.0.3: resolution: {integrity: sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==} dependencies: @@ -9468,8 +9727,8 @@ packages: resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} engines: {node: '>=6'} - /querystringify@2.2.0: - resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + /pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} dev: true /queue-microtask@1.2.3: @@ -9493,8 +9752,8 @@ packages: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} dev: true - /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==} dev: true /read-pkg-up@7.0.1: @@ -9684,10 +9943,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: true - /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -9724,8 +9979,8 @@ packages: deprecated: https://github.com/lydell/resolve-url#deprecated dev: false - /resolve.exports@1.1.1: - resolution: {integrity: sha512-/NtpHNDN7jWhAaQ9BvBUYZ6YTXsRBgfqWFWP7BZBaoMJO/I3G5OFzvTuWNlZC3aPjins1F+TNrLKsGbH4rfsRQ==} + /resolve.exports@2.0.2: + resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} dev: true @@ -9904,13 +10159,6 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /saxes@5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} - engines: {node: '>=10'} - dependencies: - xmlchars: 2.2.0 - dev: true - /section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -9943,6 +10191,12 @@ packages: dependencies: lru-cache: 6.0.0 + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: true + /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} dependencies: @@ -10176,8 +10430,8 @@ packages: urix: 0.1.0 dev: false - /source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + /source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 @@ -10197,11 +10451,6 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - /source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} - dev: true - /source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} @@ -10441,14 +10690,6 @@ packages: has-flag: 4.0.0 dev: true - /supports-hyperlinks@2.2.0: - resolution: {integrity: sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==} - engines: {node: '>=8'} - dependencies: - has-flag: 4.0.0 - supports-color: 7.2.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -10460,10 +10701,6 @@ packages: upper-case: 1.1.3 dev: false - /symbol-tree@3.2.4: - resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - dev: true - /synckit@0.8.5: resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==} engines: {node: ^14.18.0 || >=16.0.0} @@ -10489,14 +10726,6 @@ packages: yallist: 4.0.0 dev: true - /terminal-link@2.1.1: - resolution: {integrity: sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==} - engines: {node: '>=8'} - dependencies: - ansi-escapes: 4.3.2 - supports-hyperlinks: 2.2.0 - dev: true - /test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} @@ -10522,10 +10751,6 @@ packages: any-promise: 1.3.0 dev: true - /throat@6.0.1: - resolution: {integrity: sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==} - dev: true - /through2@2.0.5: resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} dependencies: @@ -10622,16 +10847,6 @@ packages: commander: 2.20.3 dev: false - /tough-cookie@4.1.2: - resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==} - engines: {node: '>=6'} - dependencies: - psl: 1.9.0 - punycode: 2.1.1 - universalify: 0.2.0 - url-parse: 1.5.10 - dev: true - /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false @@ -10642,13 +10857,6 @@ packages: punycode: 2.1.1 dev: true - /tr46@2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} - engines: {node: '>=8'} - dependencies: - punycode: 2.1.1 - dev: true - /tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true @@ -10675,76 +10883,121 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.14.49)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + 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' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' + jest: ^29.0.0 + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/transform': + optional: true + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - '@babel/core': 7.23.6 - '@types/jest': 27.5.2 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 esbuild: 0.14.49 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true - /ts-jest@27.1.5(@babel/core@7.23.6)(@types/jest@27.5.2)(esbuild@0.17.18)(jest@27.5.1)(typescript@5.4.5): - resolution: {integrity: sha512-Xv6jBQPoBEvBq/5i2TeSG9tt/nqkbpcurrEG1b+2yfBrcJelOZF9Ml6dmyMh7bcW9JyFbRYpR5rxROSlBLTZHA==} - engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + 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' - '@types/jest': ^27.0.0 - babel-jest: '>=27.0.0 <28' + '@jest/transform': ^29.0.0 + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 esbuild: '*' - jest: ^27.0.0 - typescript: '>=3.8 <5.0' + jest: ^29.0.0 + typescript: '>=4.3 <6' peerDependenciesMeta: '@babel/core': optional: true - '@types/jest': + '@jest/transform': + optional: true + '@jest/types': optional: true babel-jest: optional: true esbuild: optional: true dependencies: - '@babel/core': 7.23.6 - '@types/jest': 27.5.2 + '@babel/core': 7.25.2 bs-logger: 0.2.6 + ejs: 3.1.10 + esbuild: 0.15.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.6.3 + typescript: 5.4.5 + yargs-parser: 21.1.1 + dev: true + + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5): + resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} + 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 + dependencies: + '@babel/core': 7.25.2 + bs-logger: 0.2.6 + ejs: 3.1.10 esbuild: 0.17.18 fast-json-stable-stringify: 2.1.0 - jest: 27.5.1(ts-node@10.9.1) - jest-util: 27.5.1 + jest: 29.7.0(@types/node@18.17.4) + jest-util: 29.7.0 json5: 2.2.3 lodash.memoize: 4.1.2 make-error: 1.3.6 - semver: 7.5.4 + semver: 7.6.3 typescript: 5.4.5 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true /ts-json-schema-generator@2.3.0: @@ -10762,8 +11015,8 @@ packages: typescript: 5.4.5 dev: true - /ts-node@10.9.1(@types/node@18.17.4)(typescript@5.4.5): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@18.17.4)(typescript@5.4.5): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -10782,7 +11035,7 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.17.4 - acorn: 8.8.1 + acorn: 8.10.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -10834,7 +11087,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 2.78.0 source-map: 0.8.0-beta.0 @@ -10846,7 +11099,7 @@ packages: - ts-node dev: true - /tsup@6.7.0(ts-node@10.9.1)(typescript@5.4.5): + /tsup@6.7.0(ts-node@10.9.2)(typescript@5.4.5): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -10870,7 +11123,7 @@ packages: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 3.1.4(ts-node@10.9.1) + postcss-load-config: 3.1.4(ts-node@10.9.2) resolve-from: 5.0.0 rollup: 3.21.5 source-map: 0.8.0-beta.0 @@ -10913,6 +11166,7 @@ packages: engines: {node: '>= 0.8.0'} dependencies: prelude-ls: 1.1.2 + dev: false /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -10981,12 +11235,6 @@ packages: is-typed-array: 1.1.12 dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - /typescript@5.4.5: resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} @@ -11090,11 +11338,6 @@ packages: 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'} - dev: true - /universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -11123,6 +11366,17 @@ packages: picocolors: 1.0.1 dev: true + /update-browserslist-db@1.1.0(browserslist@4.23.3): + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.3 + escalade: 3.2.0 + picocolors: 1.0.1 + dev: true + /update-check@1.5.4: resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} dependencies: @@ -11162,13 +11416,6 @@ packages: deprecated: Please see https://github.com/lydell/urix#deprecated dev: false - /url-parse@1.5.10: - resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} - dependencies: - querystringify: 2.2.0 - requires-port: 1.0.0 - dev: true - /use@3.1.1: resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} engines: {node: '>=0.10.0'} @@ -11185,13 +11432,13 @@ packages: /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - /v8-to-istanbul@8.1.1: - resolution: {integrity: sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==} + /v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} dependencies: + '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.9.0 - source-map: 0.7.4 + convert-source-map: 2.0.0 dev: true /v8flags@4.0.0: @@ -11593,20 +11840,6 @@ packages: resolution: {integrity: sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==} dev: false - /w3c-hr-time@1.0.2: - resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} - deprecated: Use your platform's native performance.now() and performance.timeOrigin. - dependencies: - browser-process-hrtime: 1.0.0 - dev: true - - /w3c-xmlserializer@2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} - engines: {node: '>=10'} - dependencies: - xml-name-validator: 3.0.0 - dev: true - /walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} dependencies: @@ -11630,26 +11863,6 @@ packages: resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} dev: true - /webidl-conversions@5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} - engines: {node: '>=8'} - dev: true - - /webidl-conversions@6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} - engines: {node: '>=10.4'} - dev: true - - /whatwg-encoding@1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} - dependencies: - iconv-lite: 0.4.24 - dev: true - - /whatwg-mimetype@2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} - dev: true - /whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} dependencies: @@ -11665,15 +11878,6 @@ packages: webidl-conversions: 4.0.2 dev: true - /whatwg-url@8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} - engines: {node: '>=10'} - dependencies: - lodash: 4.17.21 - tr46: 2.1.0 - webidl-conversions: 6.1.0 - dev: true - /which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} dependencies: @@ -11738,6 +11942,7 @@ packages: /word-wrap@1.2.3: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} + dev: false /wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -11771,34 +11976,12 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} + /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} dependencies: imurmurhash: 0.1.4 - is-typedarray: 1.0.0 signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true - - /xml-name-validator@3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} - dev: true - - /xmlchars@2.2.0: - resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true /xtend@4.0.2: @@ -11832,22 +12015,22 @@ packages: engines: {node: '>= 14'} dev: true - /yargs-parser@20.2.9: - resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} - engines: {node: '>=10'} + /yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} dev: true - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} + /yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} dependencies: - cliui: 7.0.4 + cliui: 8.0.1 escalade: 3.1.1 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 y18n: 5.0.8 - yargs-parser: 20.2.9 + yargs-parser: 21.1.1 dev: true /yn@3.1.1: diff --git a/turborepo-tests/integration/package.json b/turborepo-tests/integration/package.json index 252724245b068..0ab6e4fad6cb6 100644 --- a/turborepo-tests/integration/package.json +++ b/turborepo-tests/integration/package.json @@ -2,6 +2,7 @@ "name": "turborepo-tests-integration", "scripts": { "test": "prysk tests", + "clean": "rm -rf tests/**/*.t.err", "test:interactive": "PRYSK_INTERACTIVE=true prysk tests", "test:parallel": ".cram_env/bin/pytest -n auto tests --prysk-shell=`which bash`", "pretest:parallel": ".cram_env/bin/pip3 install --quiet pytest \"prysk[pytest-plugin]\" pytest-xdist" From 0a1c8433f6311f8c6a5d6fdfd19d7ab7e7d953ca Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 25 Oct 2024 13:55:43 -0400 Subject: [PATCH 118/218] release(turborepo): 2.2.4-canary.2 (#9332) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 77b1f22533753..ead32dc6a6e22 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index bae3c0630771f..839a54644c993 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 78cb0120863ca..07d96ebcde520 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b1c96aeeffa6c..584e58d9a525c 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index d61ef8a87f868..4c640fe4fe08a 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 1c3db20a114b1..0395d36bc477a 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 5db7d68dfd257..b46c0e1f46243 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 68acc961195c2..a1489a109e77a 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 9207574e216c4..aea6fa68fcd81 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.1", + "version": "2.2.4-canary.2", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.1", - "turbo-darwin-arm64": "2.2.4-canary.1", - "turbo-linux-64": "2.2.4-canary.1", - "turbo-linux-arm64": "2.2.4-canary.1", - "turbo-windows-64": "2.2.4-canary.1", - "turbo-windows-arm64": "2.2.4-canary.1" + "turbo-darwin-64": "2.2.4-canary.2", + "turbo-darwin-arm64": "2.2.4-canary.2", + "turbo-linux-64": "2.2.4-canary.2", + "turbo-linux-arm64": "2.2.4-canary.2", + "turbo-windows-64": "2.2.4-canary.2", + "turbo-windows-arm64": "2.2.4-canary.2" } } diff --git a/version.txt b/version.txt index accec923c9a8f..d65199aaf6f84 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.1 +2.2.4-canary.2 canary From c67afb504f49408e3cd84ba2188e83dbb69a8584 Mon Sep 17 00:00:00 2001 From: Dimitri Mitropoulos Date: Fri, 25 Oct 2024 17:05:13 -0400 Subject: [PATCH 119/218] update to TypeScript 5.5.4 (#9337) --- docs/package.json | 2 +- examples/basic/apps/docs/package.json | 2 +- examples/basic/apps/web/package.json | 2 +- examples/basic/package.json | 2 +- .../basic/packages/eslint-config/package.json | 2 +- examples/basic/packages/ui/package.json | 2 +- examples/basic/pnpm-lock.yaml | 190 +++++++------- examples/design-system/apps/docs/package.json | 2 +- .../design-system/packages/ui/package.json | 2 +- examples/design-system/pnpm-lock.yaml | 140 +++++----- examples/kitchen-sink/apps/admin/package.json | 2 +- examples/kitchen-sink/apps/api/package.json | 2 +- examples/kitchen-sink/apps/blog/package.json | 2 +- .../kitchen-sink/apps/storefront/package.json | 2 +- .../kitchen-sink/packages/logger/package.json | 2 +- .../kitchen-sink/packages/ui/package.json | 2 +- examples/kitchen-sink/pnpm-lock.yaml | 248 +++++++++--------- examples/non-monorepo/package-lock.json | 8 +- examples/non-monorepo/package.json | 2 +- examples/with-berry/apps/docs/package.json | 2 +- examples/with-berry/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-berry/packages/ui/package.json | 2 +- examples/with-berry/yarn.lock | 24 +- .../with-changesets/apps/docs/package.json | 2 +- .../packages/acme-core/package.json | 2 +- .../packages/acme-utils/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-changesets/pnpm-lock.yaml | 158 +++++------ examples/with-docker/apps/api/package.json | 2 +- examples/with-docker/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- .../with-docker/packages/logger/package.json | 2 +- examples/with-docker/packages/ui/package.json | 2 +- examples/with-docker/yarn.lock | 8 +- examples/with-gatsby/apps/docs/package.json | 2 +- examples/with-gatsby/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-gatsby/packages/ui/package.json | 2 +- examples/with-gatsby/pnpm-lock.yaml | 222 ++++++++-------- examples/with-nestjs/apps/api/package.json | 2 +- examples/with-nestjs/apps/web/package.json | 2 +- .../with-nestjs/packages/api/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-nestjs/packages/ui/package.json | 2 +- examples/with-nestjs/pnpm-lock.yaml | 190 +++++++------- examples/with-npm/apps/docs/package.json | 2 +- examples/with-npm/apps/web/package.json | 2 +- examples/with-npm/package-lock.json | 14 +- .../packages/eslint-config/package.json | 2 +- examples/with-npm/packages/ui/package.json | 2 +- examples/with-prisma/apps/web/package.json | 2 +- .../packages/config-eslint/package.json | 2 +- .../packages/database/package.json | 2 +- examples/with-prisma/yarn.lock | 8 +- .../apps/native/package.json | 2 +- .../apps/web/package.json | 2 +- .../packages/ui/package.json | 2 +- examples/with-react-native-web/yarn.lock | 8 +- examples/with-rollup/apps/web/package.json | 2 +- .../packages/config-eslint/package.json | 2 +- examples/with-rollup/packages/ui/package.json | 2 +- examples/with-rollup/pnpm-lock.yaml | 152 +++++------ examples/with-svelte/apps/docs/package.json | 2 +- examples/with-svelte/apps/web/package.json | 2 +- examples/with-svelte/pnpm-lock.yaml | 74 +++--- examples/with-tailwind/apps/docs/package.json | 2 +- examples/with-tailwind/apps/web/package.json | 2 +- .../with-tailwind/packages/ui/package.json | 2 +- examples/with-tailwind/pnpm-lock.yaml | 102 +++---- examples/with-typeorm/apps/docs/package.json | 2 +- examples/with-typeorm/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- .../packages/typeorm-service/package.json | 2 +- .../with-typeorm/packages/ui/package.json | 2 +- examples/with-typeorm/pnpm-lock.yaml | 164 ++++++------ examples/with-vite/apps/docs/package.json | 2 +- examples/with-vite/apps/web/package.json | 2 +- examples/with-vite/packages/ui/package.json | 2 +- examples/with-vite/pnpm-lock.yaml | 62 ++--- examples/with-vue-nuxt/apps/web/package.json | 2 +- .../eslint-config-custom/package.json | 2 +- examples/with-vue-nuxt/pnpm-lock.yaml | 174 ++++++------ examples/with-yarn/apps/docs/package.json | 2 +- examples/with-yarn/apps/web/package.json | 2 +- .../packages/eslint-config/package.json | 2 +- examples/with-yarn/packages/ui/package.json | 2 +- examples/with-yarn/yarn.lock | 8 +- package.json | 2 +- packages/create-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-benchmark/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-telemetry/package.json | 2 +- packages/turbo-test-utils/package.json | 2 +- packages/turbo-utils/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- pnpm-lock.yaml | 202 +++++++------- 100 files changed, 1158 insertions(+), 1158 deletions(-) diff --git a/docs/package.json b/docs/package.json index 77fd5960fcc58..63f526089ee82 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,7 +11,7 @@ "devDependencies": { "@types/node": "22.7.8", "tsx": "4.19.1", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "github-slugger": "2.0.0", diff --git a/examples/basic/apps/docs/package.json b/examples/basic/apps/docs/package.json index 3d111f7769650..cdef16b546eac 100644 --- a/examples/basic/apps/docs/package.json +++ b/examples/basic/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.6", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/basic/apps/web/package.json b/examples/basic/apps/web/package.json index e859e3b8b6420..3a52cac608d01 100644 --- a/examples/basic/apps/web/package.json +++ b/examples/basic/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react-dom": "^18", "eslint": "^8", "eslint-config-next": "14.2.6", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/basic/package.json b/examples/basic/package.json index 41c811efeea23..67b37b5d70532 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -10,7 +10,7 @@ "devDependencies": { "prettier": "^3.2.5", "turbo": "^2.0.7", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "packageManager": "pnpm@8.15.6", "engines": { diff --git a/examples/basic/packages/eslint-config/package.json b/examples/basic/packages/eslint-config/package.json index 173679acffc23..821a73829bff4 100644 --- a/examples/basic/packages/eslint-config/package.json +++ b/examples/basic/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/basic/packages/ui/package.json b/examples/basic/packages/ui/package.json index 9095356e579f3..44ae805dd5cb9 100644 --- a/examples/basic/packages/ui/package.json +++ b/examples/basic/packages/ui/package.json @@ -20,7 +20,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/basic/pnpm-lock.yaml b/examples/basic/pnpm-lock.yaml index b552c70adcb5c..aef2ce84acc9a 100644 --- a/examples/basic/pnpm-lock.yaml +++ b/examples/basic/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: specifier: ^2.0.7 version: 2.1.2 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/docs: dependencies: @@ -53,10 +53,10 @@ importers: version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.4.5) + version: 14.2.6(eslint@8.57.1)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/web: dependencies: @@ -93,22 +93,22 @@ importers: version: 8.57.1 eslint-config-next: specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.4.5) + version: 14.2.6(eslint@8.57.1)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.4.5) + version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.18.0(eslint@8.57.1)(typescript@5.4.5) + version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) @@ -119,8 +119,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/typescript-config: {} @@ -138,7 +138,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.13.4(@types/node@20.16.5)(typescript@5.4.5) + version: 1.13.4(@types/node@20.16.5)(typescript@5.5.4) '@types/eslint': specifier: ^8.56.5 version: 8.56.12 @@ -155,8 +155,8 @@ importers: specifier: ^8.57.0 version: 8.57.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -658,7 +658,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.4.5): + /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.5.4): resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true dependencies: @@ -670,7 +670,7 @@ packages: minimatch: 9.0.5 node-plop: 0.26.3 proxy-agent: 6.4.0 - ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.16.5)(typescript@5.5.4) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -777,7 +777,7 @@ packages: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -789,10 +789,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 @@ -800,13 +800,13 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -818,22 +818,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.18.0 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -845,16 +845,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -866,16 +866,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -887,11 +887,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.2.0 '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.2.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -928,7 +928,7 @@ packages: '@typescript-eslint/visitor-keys': 7.2.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -938,17 +938,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -958,12 +958,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -988,7 +988,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1003,13 +1003,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1025,13 +1025,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4): resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1047,13 +1047,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.2.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4): resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1069,13 +1069,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1086,7 +1086,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -1095,7 +1095,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1106,7 +1106,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: @@ -1114,7 +1114,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1123,7 +1123,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -1166,7 +1166,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1187,25 +1187,25 @@ packages: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2060,7 +2060,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.4.5): + /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-z0URA5LO6y8lS/YLN0EDW/C4LEkDODjJzA37dvLVdzCPzuewjzTe1os5g3XclZAZrQ8X8hPaSMQ2JuVWwMmrTA==} peerDependencies: eslint: ^7.23.0 || ^8.0.0 @@ -2071,7 +2071,7 @@ packages: dependencies: '@next/eslint-plugin-next': 14.2.6 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) @@ -2079,7 +2079,7 @@ packages: eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -2204,7 +2204,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) @@ -2233,7 +2233,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -2262,7 +2262,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -2293,7 +2293,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2329,7 +2329,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2354,7 +2354,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2367,8 +2367,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -2415,7 +2415,7 @@ packages: optional: true dependencies: eslint: 8.57.1 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): @@ -2454,13 +2454,13 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -4762,16 +4762,16 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true - /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -4797,7 +4797,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -4818,14 +4818,14 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.1.2: @@ -4959,8 +4959,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/design-system/apps/docs/package.json b/examples/design-system/apps/docs/package.json index c60a1ea3dad03..d365f690b4c5a 100644 --- a/examples/design-system/apps/docs/package.json +++ b/examples/design-system/apps/docs/package.json @@ -27,7 +27,7 @@ "serve": "^14.2.1", "storybook": "^8.2.6", "@repo/typescript-config": "workspace:*", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4" } } diff --git a/examples/design-system/packages/ui/package.json b/examples/design-system/packages/ui/package.json index a8ee18420ced9..aa3ff5a41c2b7 100644 --- a/examples/design-system/packages/ui/package.json +++ b/examples/design-system/packages/ui/package.json @@ -23,7 +23,7 @@ "eslint": "^8.57.0", "@repo/typescript-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/design-system/pnpm-lock.yaml b/examples/design-system/pnpm-lock.yaml index 0590d126c63a3..9bd51b32fae53 100644 --- a/examples/design-system/pnpm-lock.yaml +++ b/examples/design-system/pnpm-lock.yaml @@ -47,10 +47,10 @@ importers: version: 8.2.6(react@18.3.1)(storybook@8.2.6) '@storybook/react': specifier: ^8.2.6 - version: 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.4.5) + version: 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.5.4) '@storybook/react-vite': specifier: ^8.2.6 - version: 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.4.5)(vite@5.2.11) + version: 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.5.4)(vite@5.2.11) '@vitejs/plugin-react': specifier: ^4.2.1 version: 4.2.1(vite@5.2.11) @@ -64,8 +64,8 @@ importers: specifier: ^8.2.6 version: 8.2.6 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.2.11 @@ -74,7 +74,7 @@ importers: devDependencies: '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) eslint-config-turbo: specifier: ^2.0.0 version: 2.0.0(eslint@8.57.0) @@ -86,7 +86,7 @@ importers: version: 1.1.0 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.0)(typescript@5.4.5) + version: 0.8.0(eslint@8.57.0)(typescript@5.5.4) packages/typescript-config: {} @@ -113,10 +113,10 @@ importers: version: 8.57.0 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.4.5) + version: 8.0.2(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -2103,7 +2103,7 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.4.5)(vite@5.2.11): + /@joshwooding/vite-plugin-react-docgen-typescript@0.3.1(typescript@5.5.4)(vite@5.2.11): resolution: {integrity: sha512-pdoMZ9QaPnVlSM+SdU/wgg0nyD/8wQ7y90ttO2CMCyrrm7RxveYIJ5eNfjPaoMFqW41LZra7QO9j+xV4Y18Glw==} peerDependencies: typescript: '>= 4.3.x' @@ -2115,8 +2115,8 @@ packages: glob: 7.2.3 glob-promise: 4.2.2(glob@7.2.3) magic-string: 0.27.0 - react-docgen-typescript: 2.2.2(typescript@5.4.5) - typescript: 5.4.5 + react-docgen-typescript: 2.2.2(typescript@5.5.4) + typescript: 5.5.4 vite: 5.2.11 dev: true @@ -2584,7 +2584,7 @@ packages: util-deprecate: 1.0.2 dev: true - /@storybook/builder-vite@8.2.6(storybook@8.2.6)(typescript@5.4.5)(vite@5.2.11): + /@storybook/builder-vite@8.2.6(storybook@8.2.6)(typescript@5.5.4)(vite@5.2.11): resolution: {integrity: sha512-3PrsPZAedpQUbzRBEl23Fi1zG5bkQD76JsygVwmfiSm4Est4K8kW2AIB2ht9cIfKXh3mfQkyQlxXKHeQEHeQwQ==} peerDependencies: '@preact/preset-vite': '*' @@ -2610,7 +2610,7 @@ packages: magic-string: 0.30.10 storybook: 8.2.6 ts-dedent: 2.2.0 - typescript: 5.4.5 + typescript: 5.5.4 vite: 5.2.11 transitivePeerDependencies: - supports-color @@ -2730,7 +2730,7 @@ packages: storybook: 8.2.6 dev: true - /@storybook/react-vite@8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.4.5)(vite@5.2.11): + /@storybook/react-vite@8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.5.4)(vite@5.2.11): resolution: {integrity: sha512-BpbteaIzsJZL1QN3iR7uuslrPfdtbZYXPhcU9awpfl5pW5MOQThuvl7728mwT8V7KdANeikJPgsnlETOb/afDA==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2739,10 +2739,10 @@ packages: storybook: ^8.2.6 vite: ^4.0.0 || ^5.0.0 dependencies: - '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.4.5)(vite@5.2.11) + '@joshwooding/vite-plugin-react-docgen-typescript': 0.3.1(typescript@5.5.4)(vite@5.2.11) '@rollup/pluginutils': 5.1.0 - '@storybook/builder-vite': 8.2.6(storybook@8.2.6)(typescript@5.4.5)(vite@5.2.11) - '@storybook/react': 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.4.5) + '@storybook/builder-vite': 8.2.6(storybook@8.2.6)(typescript@5.5.4)(vite@5.2.11) + '@storybook/react': 8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.5.4) find-up: 5.0.0 magic-string: 0.30.10 react: 18.3.1 @@ -2760,7 +2760,7 @@ packages: - vite-plugin-glimmerx dev: true - /@storybook/react@8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.4.5): + /@storybook/react@8.2.6(react-dom@18.3.1)(react@18.3.1)(storybook@8.2.6)(typescript@5.5.4): resolution: {integrity: sha512-awJlzfiAMrf8l9AgiLhjXEJ+HvS3VKPxNNQaRwBELGq/vigjJe656tMrhvg4OIlJXtlS+6XPshd2knLwjIWNLw==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2795,7 +2795,7 @@ packages: storybook: 8.2.6 ts-dedent: 2.2.0 type-fest: 2.19.0 - typescript: 5.4.5 + typescript: 5.5.4 util-deprecate: 1.0.2 dev: true @@ -3070,7 +3070,7 @@ packages: resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3082,10 +3082,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 @@ -3093,13 +3093,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3111,11 +3111,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3136,7 +3136,7 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3146,12 +3146,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3166,7 +3166,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3181,13 +3181,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3203,13 +3203,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3220,7 +3220,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.2 @@ -3229,7 +3229,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3240,7 +3240,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.2 transitivePeerDependencies: @@ -3268,7 +3268,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -3289,25 +3289,25 @@ packages: '@babel/core': 7.24.5 '@babel/eslint-parser': 7.24.5(@babel/core@7.24.5)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.5.0(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -4763,7 +4763,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -4793,7 +4793,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4818,7 +4818,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4831,8 +4831,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4910,7 +4910,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): @@ -4949,14 +4949,14 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-storybook@0.8.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -4965,13 +4965,13 @@ packages: - typescript dev: true - /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -7731,12 +7731,12 @@ packages: react-dom: 18.3.1(react@18.3.1) dev: true - /react-docgen-typescript@2.2.2(typescript@5.4.5): + /react-docgen-typescript@2.2.2(typescript@5.5.4): resolution: {integrity: sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==} peerDependencies: typescript: '>= 4.3.x' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /react-docgen@7.0.3: @@ -8791,13 +8791,13 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /ts-dedent@2.2.0: @@ -8835,7 +8835,7 @@ packages: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} dev: true - /tsup@8.0.2(typescript@5.4.5): + /tsup@8.0.2(typescript@5.5.4): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} hasBin: true @@ -8868,20 +8868,20 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tty-table@4.2.3: @@ -9056,8 +9056,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/kitchen-sink/apps/admin/package.json b/examples/kitchen-sink/apps/admin/package.json index d24b923d4414b..853c163e21d3a 100644 --- a/examples/kitchen-sink/apps/admin/package.json +++ b/examples/kitchen-sink/apps/admin/package.json @@ -20,7 +20,7 @@ "@vitejs/plugin-react": "^4.2.1", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4" } } diff --git a/examples/kitchen-sink/apps/api/package.json b/examples/kitchen-sink/apps/api/package.json index b62f2a2dc6a4b..1413354601884 100644 --- a/examples/kitchen-sink/apps/api/package.json +++ b/examples/kitchen-sink/apps/api/package.json @@ -35,6 +35,6 @@ "jest": "^29.7.0", "supertest": "^6.3.4", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/kitchen-sink/apps/blog/package.json b/examples/kitchen-sink/apps/blog/package.json index ba692f1ec5f88..c39596a0a42d8 100644 --- a/examples/kitchen-sink/apps/blog/package.json +++ b/examples/kitchen-sink/apps/blog/package.json @@ -29,7 +29,7 @@ "@vercel/remix": "2.9.2-patch.2", "autoprefixer": "^10.4.19", "eslint": "^8.38.0", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.0", "vite-tsconfig-paths": "^4.2.1" }, diff --git a/examples/kitchen-sink/apps/storefront/package.json b/examples/kitchen-sink/apps/storefront/package.json index a32f73fecbdc3..d9d92b3ed3167 100644 --- a/examples/kitchen-sink/apps/storefront/package.json +++ b/examples/kitchen-sink/apps/storefront/package.json @@ -24,6 +24,6 @@ "@types/react-dom": "^18.2.19", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/kitchen-sink/packages/logger/package.json b/examples/kitchen-sink/packages/logger/package.json index 8f796e3f5c46d..a46ba4c9cdd05 100644 --- a/examples/kitchen-sink/packages/logger/package.json +++ b/examples/kitchen-sink/packages/logger/package.json @@ -25,6 +25,6 @@ "@types/node": "^20.11.24", "jest": "^29.7.0", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/kitchen-sink/packages/ui/package.json b/examples/kitchen-sink/packages/ui/package.json index c071dad4460d8..7c9da0e7daaa7 100644 --- a/examples/kitchen-sink/packages/ui/package.json +++ b/examples/kitchen-sink/packages/ui/package.json @@ -42,6 +42,6 @@ "react": "^18.2.0", "react-dom": "^18.2.0", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/kitchen-sink/pnpm-lock.yaml b/examples/kitchen-sink/pnpm-lock.yaml index 94a3a6c4ce7f0..8d485d19317a5 100644 --- a/examples/kitchen-sink/pnpm-lock.yaml +++ b/examples/kitchen-sink/pnpm-lock.yaml @@ -43,8 +43,8 @@ importers: specifier: ^4.2.1 version: 4.3.1(vite@5.4.6) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.4.6 @@ -105,22 +105,22 @@ importers: version: 6.3.4 tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.4.5) + version: 8.2.4(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/blog: dependencies: '@remix-run/node': specifier: ^2.9.2 - version: 2.12.0(typescript@5.4.5) + version: 2.12.0(typescript@5.5.4) '@remix-run/react': specifier: ^2.9.2 - version: 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + version: 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.4) '@remix-run/server-runtime': specifier: ^2.9.2 - version: 2.12.0(typescript@5.4.5) + version: 2.12.0(typescript@5.5.4) '@repo/ui': specifier: workspace:* version: link:../../packages/ui @@ -142,10 +142,10 @@ importers: devDependencies: '@remix-run/dev': specifier: ^2.9.2 - version: 2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6) + version: 2.12.0(@remix-run/react@2.12.0)(typescript@5.5.4)(vite@5.4.6) '@remix-run/eslint-config': specifier: ^2.9.2 - version: 2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.4.5) + version: 2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.5.4) '@types/react': specifier: ^18.2.20 version: 18.3.6 @@ -154,10 +154,10 @@ importers: version: 18.3.0 '@typescript-eslint/eslint-plugin': specifier: ^6.7.4 - version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^6.7.4 - version: 6.21.0(eslint@8.57.1)(typescript@5.4.5) + version: 6.21.0(eslint@8.57.1)(typescript@5.5.4) autoprefixer: specifier: ^10.4.19 version: 10.4.20(postcss@8.4.47) @@ -165,14 +165,14 @@ importers: specifier: ^8.38.0 version: 8.57.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.0 version: 5.4.6 vite-tsconfig-paths: specifier: ^4.2.1 - version: 4.3.2(typescript@5.4.5)(vite@5.4.6) + version: 4.3.2(typescript@5.5.4)(vite@5.4.6) apps/storefront: dependencies: @@ -211,14 +211,14 @@ importers: specifier: ^18.2.19 version: 18.3.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/config-eslint: devDependencies: '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4) eslint-config-turbo: specifier: ^2.0.0 version: 2.1.2(eslint@8.57.1) @@ -230,7 +230,7 @@ importers: version: 1.1.0 eslint-plugin-storybook: specifier: ^0.8.0 - version: 0.8.0(eslint@8.57.1)(typescript@5.4.5) + version: 0.8.0(eslint@8.57.1)(typescript@5.5.4) packages/config-typescript: {} @@ -241,7 +241,7 @@ importers: version: 29.7.0(@types/node@20.16.5) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4) devDependencies: jest-environment-jsdom: specifier: ^29.7.0 @@ -269,10 +269,10 @@ importers: version: 29.7.0(@types/node@20.16.5) tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.4.5) + version: 8.2.4(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/ui: devDependencies: @@ -308,10 +308,10 @@ importers: version: 18.3.1(react@18.3.1) tsup: specifier: ^8.0.2 - version: 8.2.4(typescript@5.4.5) + version: 8.2.4(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -2007,7 +2007,7 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@remix-run/dev@2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6): + /@remix-run/dev@2.12.0(@remix-run/react@2.12.0)(typescript@5.5.4)(vite@5.4.6): resolution: {integrity: sha512-/87YQORdlJg5YChd7nVBM/hRXHZA4GfUjhKbZyNrh03bazCQBF+6EsXbzpJ6cCFOpZgecsN0Xv648Qw0VuJjwg==} engines: {node: '>=18.0.0'} hasBin: true @@ -2037,10 +2037,10 @@ packages: '@babel/types': 7.25.6 '@mdx-js/mdx': 2.3.0 '@npmcli/package-json': 4.0.1 - '@remix-run/node': 2.12.0(typescript@5.4.5) - '@remix-run/react': 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@remix-run/node': 2.12.0(typescript@5.5.4) + '@remix-run/react': 2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.4) '@remix-run/router': 1.19.2 - '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) + '@remix-run/server-runtime': 2.12.0(typescript@5.5.4) '@types/mdx': 2.0.13 '@vanilla-extract/integration': 6.5.0 arg: 5.0.2 @@ -2080,7 +2080,7 @@ packages: set-cookie-parser: 2.7.0 tar-fs: 2.1.1 tsconfig-paths: 4.2.0 - typescript: 5.4.5 + typescript: 5.5.4 vite: 5.4.6 ws: 7.5.10 transitivePeerDependencies: @@ -2099,7 +2099,7 @@ packages: - ts-node - utf-8-validate - /@remix-run/eslint-config@2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.4.5): + /@remix-run/eslint-config@2.12.0(eslint@8.57.1)(react@18.3.1)(typescript@5.5.4): resolution: {integrity: sha512-9MfVRuto/8EOYFf4zdg765x5TQ1l03CG7ZsLBLI22fn/OoJtOp5gGXeHaWMiFo+nLHlP27wEH2y9j7NshxdcMA==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2114,21 +2114,21 @@ packages: '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@babel/preset-react': 7.24.7(@babel/core@7.25.2) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-node@0.3.7)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@5.62.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-jest: 26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-jest-dom: 4.0.3(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-node: 11.1.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 5.11.1(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-testing-library: 5.11.1(eslint@8.57.1)(typescript@5.5.4) react: 18.3.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x @@ -2136,7 +2136,7 @@ packages: - supports-color dev: true - /@remix-run/node@2.12.0(typescript@5.4.5): + /@remix-run/node@2.12.0(typescript@5.5.4): resolution: {integrity: sha512-83Jaoc6gpSuD4e6rCk7N5ZHAXNmDw4fJC+kPeDCsd6+wLtTLSi7u9Zo9/Q7moLZ3oyH+aR+LGdkxLULYv+Q6Og==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2145,16 +2145,16 @@ packages: typescript: optional: true dependencies: - '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) + '@remix-run/server-runtime': 2.12.0(typescript@5.5.4) '@remix-run/web-fetch': 4.4.2 '@web3-storage/multipart-parser': 1.0.0 cookie-signature: 1.2.1 source-map-support: 0.5.21 stream-slice: 0.1.2 - typescript: 5.4.5 + typescript: 5.5.4 undici: 6.19.8 - /@remix-run/react@2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + /@remix-run/react@2.12.0(react-dom@18.3.1)(react@18.3.1)(typescript@5.5.4): resolution: {integrity: sha512-Y109tI37Icr0BSU8sWSo8jDPkXaErJ/e1h0fkPvq6LZ0DrlcmHWBxzWJKID431I/KJvhVvBgVCuDamZTRVOZ5Q==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2166,19 +2166,19 @@ packages: optional: true dependencies: '@remix-run/router': 1.19.2 - '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) + '@remix-run/server-runtime': 2.12.0(typescript@5.5.4) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router: 6.26.2(react@18.3.1) react-router-dom: 6.26.2(react-dom@18.3.1)(react@18.3.1) turbo-stream: 2.4.0 - typescript: 5.4.5 + typescript: 5.5.4 /@remix-run/router@1.19.2: resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} - /@remix-run/server-runtime@2.12.0(typescript@5.4.5): + /@remix-run/server-runtime@2.12.0(typescript@5.5.4): resolution: {integrity: sha512-o9ukOr3XKmyY8UufTrDdkgD3fiy+z+f4qEzvCQnvC0+EasCyN9hb1Vbui6Koo/5HKvahC4Ga8RcWyvhykKrG3g==} engines: {node: '>=18.0.0'} peerDependencies: @@ -2194,7 +2194,7 @@ packages: set-cookie-parser: 2.7.0 source-map: 0.7.4 turbo-stream: 2.4.0 - typescript: 5.4.5 + typescript: 5.5.4 /@remix-run/web-blob@3.1.0: resolution: {integrity: sha512-owGzFLbqPH9PlKb8KvpNJ0NO74HWE2euAn61eEiyCXX/oteoVzTVSN8mpLgDjaxBf2btj5/nUllSUgpyd6IH6g==} @@ -2683,7 +2683,7 @@ packages: dependencies: '@types/yargs-parser': 21.0.3 - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2695,23 +2695,23 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare-lite: 1.4.0 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2723,10 +2723,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 @@ -2734,13 +2734,13 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2752,15 +2752,15 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2772,11 +2772,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2797,7 +2797,7 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2807,17 +2807,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2827,12 +2827,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2847,7 +2847,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2862,13 +2862,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2884,13 +2884,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2901,7 +2901,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 @@ -2910,7 +2910,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2921,7 +2921,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.1 semver: 7.6.3 transitivePeerDependencies: @@ -3030,9 +3030,9 @@ packages: react: '*' react-dom: '*' dependencies: - '@remix-run/dev': 2.12.0(@remix-run/react@2.12.0)(typescript@5.4.5)(vite@5.4.6) - '@remix-run/node': 2.12.0(typescript@5.4.5) - '@remix-run/server-runtime': 2.12.0(typescript@5.4.5) + '@remix-run/dev': 2.12.0(@remix-run/react@2.12.0)(typescript@5.5.4)(vite@5.4.6) + '@remix-run/node': 2.12.0(typescript@5.5.4) + '@remix-run/server-runtime': 2.12.0(typescript@5.5.4) '@vercel/static-config': 3.0.0 isbot: 3.8.0 react: 18.3.1 @@ -3048,7 +3048,7 @@ packages: ts-morph: 12.0.0 dev: false - /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -3069,25 +3069,25 @@ packages: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) eslint-plugin-import: 2.30.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) - eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -4666,7 +4666,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.7 @@ -4696,7 +4696,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -4726,7 +4726,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 @@ -4768,7 +4768,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4804,7 +4804,7 @@ packages: optional: true dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -4841,7 +4841,7 @@ packages: requireindex: 1.2.0 dev: true - /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-jest@26.9.0(@typescript-eslint/eslint-plugin@5.62.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-TWJxWGp1J628gxh2KhaH1H1paEdgE2J61BBF1I59c6xWeL5+D1BzMxGDN/nXAfX+aSkR5u80K+XhskK6Gwq9ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -4854,15 +4854,15 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4875,8 +4875,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -4970,7 +4970,7 @@ packages: optional: true dependencies: eslint: 8.57.1 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): @@ -5009,14 +5009,14 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-storybook@0.8.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-CZeVO5EzmPY7qghO2t64oaFM+8FTaD4uzOEjHKp516exyTKo+skKAL9GI3QALS2BXhyALJjNtwbmr1XinGE8bA==} engines: {node: '>= 18'} peerDependencies: eslint: '>=6' dependencies: '@storybook/csf': 0.0.1 - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 requireindex: 1.2.0 ts-dedent: 2.2.0 @@ -5025,26 +5025,26 @@ packages: - typescript dev: true - /eslint-plugin-testing-library@5.11.1(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-testing-library@5.11.1(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-5eX9e1Kc2PqVRed3taaLnAAqPZGEX75C+M/rXzUAI3wIg/ZxzUm1OVAwfe/O+vE+6YXOLetSe9g5GKD2ecXipw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.4.5): + /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color @@ -9718,13 +9718,13 @@ packages: /trough@2.2.0: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /ts-dedent@2.2.0: @@ -9736,7 +9736,7 @@ packages: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.2.5(@babel/core@7.25.2)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -9770,7 +9770,7 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: false @@ -9785,7 +9785,7 @@ packages: resolution: {integrity: sha512-FZIXf1ksVyLcfr7M317jbB67XFJhOO1YqdTcuGaq9q5jLUoTikukZ+98TPjKiP2jC5CgmYdWWYs0s2nLSU0/1A==} dev: false - /tsconfck@3.1.3(typescript@5.4.5): + /tsconfck@3.1.3(typescript@5.5.4): resolution: {integrity: sha512-ulNZP1SVpRDesxeMLON/LtWM8HIgAJEIVpVVhBM6gsmvQ8+Rh+ZG7FWGvHh7Ah3pRABwVJWklWCr/BTZSv0xnQ==} engines: {node: ^18 || >=20} hasBin: true @@ -9795,7 +9795,7 @@ packages: typescript: optional: true dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tsconfig-paths@3.15.0: @@ -9822,7 +9822,7 @@ packages: /tslib@2.7.0: resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} - /tsup@8.2.4(typescript@5.4.5): + /tsup@8.2.4(typescript@5.5.4): resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} engines: {node: '>=18'} hasBin: true @@ -9857,7 +9857,7 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - jiti - supports-color @@ -9865,14 +9865,14 @@ packages: - yaml dev: true - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.1.2: @@ -10028,8 +10028,8 @@ packages: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -10362,7 +10362,7 @@ packages: - supports-color - terser - /vite-tsconfig-paths@4.3.2(typescript@5.4.5)(vite@5.4.6): + /vite-tsconfig-paths@4.3.2(typescript@5.5.4)(vite@5.4.6): resolution: {integrity: sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==} peerDependencies: vite: '*' @@ -10372,7 +10372,7 @@ packages: dependencies: debug: 4.3.7 globrex: 0.1.2 - tsconfck: 3.1.3(typescript@5.4.5) + tsconfck: 3.1.3(typescript@5.5.4) vite: 5.4.6 transitivePeerDependencies: - supports-color diff --git a/examples/non-monorepo/package-lock.json b/examples/non-monorepo/package-lock.json index 230f3418d4291..3272fae59def8 100644 --- a/examples/non-monorepo/package-lock.json +++ b/examples/non-monorepo/package-lock.json @@ -19,7 +19,7 @@ "eslint": "^8.57.0", "eslint-config-next": "^14.1.1", "turbo": "^2.0.3", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "engines": { "node": ">=18" @@ -3632,9 +3632,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/examples/non-monorepo/package.json b/examples/non-monorepo/package.json index 199ef58651a54..8cf3c461deedf 100644 --- a/examples/non-monorepo/package.json +++ b/examples/non-monorepo/package.json @@ -20,7 +20,7 @@ "eslint": "^8.57.0", "eslint-config-next": "^14.1.1", "turbo": "^2.0.3", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "packageManager": "npm@10.5.0", "engines": { diff --git a/examples/with-berry/apps/docs/package.json b/examples/with-berry/apps/docs/package.json index 563a0c42c48e9..770199f0a41e2 100644 --- a/examples/with-berry/apps/docs/package.json +++ b/examples/with-berry/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-berry/apps/web/package.json b/examples/with-berry/apps/web/package.json index b6277aa18e9bb..1a0afa021e01e 100644 --- a/examples/with-berry/apps/web/package.json +++ b/examples/with-berry/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-berry/packages/eslint-config/package.json b/examples/with-berry/packages/eslint-config/package.json index ebd4e2d326443..abe24eaf1e36f 100644 --- a/examples/with-berry/packages/eslint-config/package.json +++ b/examples/with-berry/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-berry/packages/ui/package.json b/examples/with-berry/packages/ui/package.json index d5f11bb06ddc5..f3bacaf8dd58d 100644 --- a/examples/with-berry/packages/ui/package.json +++ b/examples/with-berry/packages/ui/package.json @@ -14,7 +14,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-berry/yarn.lock b/examples/with-berry/yarn.lock index 458ca4bfd9c92..676f4f39ce686 100644 --- a/examples/with-berry/yarn.lock +++ b/examples/with-berry/yarn.lock @@ -567,7 +567,7 @@ __metadata: eslint-config-prettier: ^9.1.0 eslint-config-turbo: ^2.0.0 eslint-plugin-only-warn: ^1.1.0 - typescript: 5.4.5 + typescript: 5.5.4 languageName: unknown linkType: soft @@ -587,7 +587,7 @@ __metadata: "@types/react-dom": ^18.2.19 eslint: ^8.57.0 react: ^18.2.0 - typescript: 5.4.5 + typescript: 5.5.4 languageName: unknown linkType: soft @@ -1706,7 +1706,7 @@ __metadata: next: ^14.1.1 react: ^18.2.0 react-dom: ^18.2.0 - typescript: 5.4.5 + typescript: 5.5.4 languageName: unknown linkType: soft @@ -5103,23 +5103,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:5.4.5": - version: 5.4.5 - resolution: "typescript@npm:5.4.5" +"typescript@npm:5.5.4": + version: 5.5.4 + resolution: "typescript@npm:5.5.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 53c879c6fa1e3bcb194b274d4501ba1985894b2c2692fa079db03c5a5a7140587a1e04e1ba03184605d35f439b40192d9e138eb3279ca8eee313c081c8bcd9b0 + checksum: b309040f3a1cd91c68a5a58af6b9fdd4e849b8c42d837b2c2e73f9a4f96a98c4f1ed398a9aab576ee0a4748f5690cf594e6b99dbe61de7839da748c41e6d6ca8 languageName: node linkType: hard -"typescript@patch:typescript@5.4.5#~builtin": - version: 5.4.5 - resolution: "typescript@patch:typescript@npm%3A5.4.5#~builtin::version=5.4.5&hash=f3b441" +"typescript@patch:typescript@5.5.4#~builtin": + version: 5.5.4 + resolution: "typescript@patch:typescript@npm%3A5.5.4#~builtin::version=5.5.4&hash=f3b441" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 2373c693f3b328f3b2387c3efafe6d257b057a142f9a79291854b14ff4d5367d3d730810aee981726b677ae0fd8329b23309da3b6aaab8263dbdccf1da07a3ba + checksum: fc52962f31a5bcb716d4213bef516885e4f01f30cea797a831205fc9ef12b405a40561c40eae3127ab85ba1548e7df49df2bcdee6b84a94bfbe3a0d7eff16b14 languageName: node linkType: hard @@ -5197,7 +5197,7 @@ __metadata: next: ^14.1.1 react: ^18.2.0 react-dom: ^18.2.0 - typescript: 5.4.5 + typescript: 5.5.4 languageName: unknown linkType: soft diff --git a/examples/with-changesets/apps/docs/package.json b/examples/with-changesets/apps/docs/package.json index 847eacc85d348..c927e69464c79 100644 --- a/examples/with-changesets/apps/docs/package.json +++ b/examples/with-changesets/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "@acme/eslint-config": "workspace:*", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-changesets/packages/acme-core/package.json b/examples/with-changesets/packages/acme-core/package.json index b685e89cb58ef..5d721d17f580d 100644 --- a/examples/with-changesets/packages/acme-core/package.json +++ b/examples/with-changesets/packages/acme-core/package.json @@ -22,7 +22,7 @@ "eslint": "^8.57.0", "@acme/eslint-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-changesets/packages/acme-utils/package.json b/examples/with-changesets/packages/acme-utils/package.json index f20a9022d9554..d84c3ce87152b 100644 --- a/examples/with-changesets/packages/acme-utils/package.json +++ b/examples/with-changesets/packages/acme-utils/package.json @@ -22,7 +22,7 @@ "eslint": "^8.57.0", "@acme/eslint-config": "workspace:*", "tsup": "^8.0.2", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-changesets/packages/eslint-config/package.json b/examples/with-changesets/packages/eslint-config/package.json index e8af96c98afbc..0bf3ea7b4b14b 100644 --- a/examples/with-changesets/packages/eslint-config/package.json +++ b/examples/with-changesets/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-changesets/pnpm-lock.yaml b/examples/with-changesets/pnpm-lock.yaml index 26cf6830dde5c..a6e38724467e7 100644 --- a/examples/with-changesets/pnpm-lock.yaml +++ b/examples/with-changesets/pnpm-lock.yaml @@ -58,8 +58,8 @@ importers: specifier: ^18.2.19 version: 18.2.19 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/acme-core: dependencies: @@ -84,10 +84,10 @@ importers: version: 8.57.0 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.4.5) + version: 8.0.2(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/acme-tsconfig: {} @@ -114,10 +114,10 @@ importers: version: 8.57.0 tsup: specifier: ^8.0.2 - version: 8.0.2(typescript@5.4.5) + version: 8.0.2(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: @@ -126,13 +126,13 @@ importers: version: 14.1.4 '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -143,8 +143,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -1181,7 +1181,7 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1193,10 +1193,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 @@ -1204,13 +1204,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1222,10 +1222,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -1233,13 +1233,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1251,16 +1251,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1272,11 +1272,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1305,7 +1305,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: true - /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1315,17 +1315,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1335,12 +1335,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1360,7 +1360,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1375,13 +1375,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.17.0(typescript@5.5.4): resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1397,13 +1397,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.5.4): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1419,13 +1419,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1436,7 +1436,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -1445,7 +1445,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1456,7 +1456,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1464,7 +1464,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1475,7 +1475,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1511,7 +1511,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.1.4)(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1533,25 +1533,25 @@ packages: '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@8.57.0) '@next/eslint-plugin-next': 14.1.4 '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2384,7 +2384,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) @@ -2413,7 +2413,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2442,7 +2442,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -2467,7 +2467,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2480,8 +2480,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -2528,7 +2528,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -2565,13 +2565,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4749,13 +4749,13 @@ packages: engines: {node: '>=8'} dev: true - /ts-api-utils@1.0.3(typescript@5.4.5): + /ts-api-utils@1.0.3(typescript@5.5.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /ts-interface-checker@0.1.13: @@ -4778,7 +4778,7 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsup@8.0.2(typescript@5.4.5): + /tsup@8.0.2(typescript@5.5.4): resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} engines: {node: '>=18'} hasBin: true @@ -4811,20 +4811,20 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.34.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tty-table@4.2.3: @@ -4966,8 +4966,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-docker/apps/api/package.json b/examples/with-docker/apps/api/package.json index ea10e6d1a55d9..f2a595d4d3a48 100644 --- a/examples/with-docker/apps/api/package.json +++ b/examples/with-docker/apps/api/package.json @@ -37,6 +37,6 @@ "jest": "^29.7.0", "nodemon": "^3.1.0", "supertest": "^6.3.3", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-docker/apps/web/package.json b/examples/with-docker/apps/web/package.json index 04829839d3883..ffd2032fe5200 100644 --- a/examples/with-docker/apps/web/package.json +++ b/examples/with-docker/apps/web/package.json @@ -22,6 +22,6 @@ "eslint": "^8.57.0", "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-docker/packages/eslint-config/package.json b/examples/with-docker/packages/eslint-config/package.json index 886ac6bc22d3a..a2cae59891d57 100644 --- a/examples/with-docker/packages/eslint-config/package.json +++ b/examples/with-docker/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-docker/packages/logger/package.json b/examples/with-docker/packages/logger/package.json index 504e8e2f78fbb..7a82560e64572 100644 --- a/examples/with-docker/packages/logger/package.json +++ b/examples/with-docker/packages/logger/package.json @@ -25,6 +25,6 @@ "@types/node": "^20.11.24", "eslint": "^8.57.0", "jest": "^29.7.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-docker/packages/ui/package.json b/examples/with-docker/packages/ui/package.json index 8746d5e9f2c98..b35959efb3c41 100644 --- a/examples/with-docker/packages/ui/package.json +++ b/examples/with-docker/packages/ui/package.json @@ -13,7 +13,7 @@ "eslint": "^8.57.0", "@repo/eslint-config": "*", "@repo/typescript-config": "*", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-docker/yarn.lock b/examples/with-docker/yarn.lock index ad143d2e1de25..506e7efcdc86f 100644 --- a/examples/with-docker/yarn.lock +++ b/examples/with-docker/yarn.lock @@ -5397,10 +5397,10 @@ typed-array-length@^1.0.4: for-each "^0.3.3" is-typed-array "^1.1.9" -typescript@5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.2: version "1.0.2" diff --git a/examples/with-gatsby/apps/docs/package.json b/examples/with-gatsby/apps/docs/package.json index f03a587615696..bd3406279dcb5 100644 --- a/examples/with-gatsby/apps/docs/package.json +++ b/examples/with-gatsby/apps/docs/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-gatsby/apps/web/package.json b/examples/with-gatsby/apps/web/package.json index db04bef720848..d47994caa7630 100644 --- a/examples/with-gatsby/apps/web/package.json +++ b/examples/with-gatsby/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "gatsby-plugin-compile-es6-packages": "^2.1.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-gatsby/packages/eslint-config/package.json b/examples/with-gatsby/packages/eslint-config/package.json index d00eede111fbe..f5ee17cfa83d3 100644 --- a/examples/with-gatsby/packages/eslint-config/package.json +++ b/examples/with-gatsby/packages/eslint-config/package.json @@ -15,6 +15,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-gatsby/packages/ui/package.json b/examples/with-gatsby/packages/ui/package.json index 3ca25ece45c98..669960bc3c5de 100644 --- a/examples/with-gatsby/packages/ui/package.json +++ b/examples/with-gatsby/packages/ui/package.json @@ -13,7 +13,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-gatsby/pnpm-lock.yaml b/examples/with-gatsby/pnpm-lock.yaml index 98ed2ebd66470..774b70b59cae3 100644 --- a/examples/with-gatsby/pnpm-lock.yaml +++ b/examples/with-gatsby/pnpm-lock.yaml @@ -52,8 +52,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/web: dependencies: @@ -62,7 +62,7 @@ importers: version: link:../../packages/ui gatsby: specifier: ^5.13.3 - version: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + version: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) react: specifier: ^18.2.0 version: 18.2.0 @@ -92,20 +92,20 @@ importers: specifier: ^2.1.1 version: 2.1.1(gatsby@5.13.3) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.5.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.5.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -116,8 +116,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/typescript-config: {} @@ -143,8 +143,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -2860,7 +2860,7 @@ packages: /@types/yoga-layout@1.9.2: resolution: {integrity: sha512-S9q47ByT2pPvD65IvrWp7qppVMpk9WGMbVq9wbWZOHg6tnXSD4vyhao6nOSBwwfDdV2p3Kx9evA9vI+XWTfDvw==} - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2872,22 +2872,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare-lite: 1.4.0 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2899,10 +2899,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 @@ -2910,13 +2910,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.5.0(@typescript-eslint/parser@7.5.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-HpqNTH8Du34nLxbKgVMGljZMG0rJd2O9ecvr2QLYp+7512ty1j42KnsFwspPXg1Vh8an9YImf6CokUBltisZFQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -2928,10 +2928,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.5.0 - '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.5.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4 eslint: 8.57.0 @@ -2939,13 +2939,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2957,14 +2957,14 @@ packages: dependencies: '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2976,16 +2976,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.5.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-cj+XGhNujfD2/wzR1tabNsidnYRaFfEkcULdcIyVBYcXjBvBKOes+mpMBP7hMpOyk+gBcfXsrg4NBGAStQyxjQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -2997,11 +2997,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.5.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3029,7 +3029,7 @@ packages: '@typescript-eslint/visitor-keys': 7.5.0 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3039,16 +3039,16 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3058,17 +3058,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.5.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-A021Rj33+G8mx2Dqh0nMO9GyjjIBK3MqgVgZ2qlKf6CJy51wY/lkkFqq3TqqnH34XyAHUkq27IjlUkWlQRpLHw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3078,12 +3078,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.5.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3102,7 +3102,7 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3117,12 +3117,12 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3138,13 +3138,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.5.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.5.0(typescript@5.5.4): resolution: {integrity: sha512-YklQQfe0Rv2PZEueLTUffiQGKQneiIEKKnfIqPIOxgM9lKSZFCjT5Ad4VqRKj/U4+kQE3fa8YQpskViL7WjdPQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3160,13 +3160,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3177,7 +3177,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -3185,7 +3185,7 @@ packages: - supports-color - typescript - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3196,7 +3196,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3204,7 +3204,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.5.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-3vZl9u0R+/FLQcpy2EHyRGNqAS/ofJ3Ji8aebilfJe+fobK8+LbIFmrHciLVDxjDoONmufDcnVSF38KwMEOjzw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -3215,7 +3215,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 7.5.0 '@typescript-eslint/types': 7.5.0 - '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.5.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -3249,7 +3249,7 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -3270,25 +3270,25 @@ packages: '@babel/core': 7.24.4 '@babel/eslint-parser': 7.24.1(@babel/core@7.24.4)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.1 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.5.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.14(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -3820,7 +3820,7 @@ packages: '@babel/core': 7.24.4 '@babel/runtime': 7.24.4 '@babel/types': 7.24.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) gatsby-core-utils: 4.13.1 /babel-plugin-syntax-trailing-function-commas@7.0.0-beta.0: @@ -5234,7 +5234,7 @@ packages: eslint: 8.57.0 dev: true - /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.5): + /eslint-config-react-app@6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.5.4): resolution: {integrity: sha512-bpoAAC+YRfzq0dsTk+6v9aHm/uqnDwayNAXleMypGl6CpxI9oXXscVHo4fk3eJPIn+rsbtNetB4r/ZIidFIE8A==} engines: {node: ^10.12.0 || >=12.0.0} peerDependencies: @@ -5258,8 +5258,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) babel-eslint: 10.1.0(eslint@8.57.0) confusing-browser-globals: 1.0.11 eslint: 7.32.0 @@ -5268,7 +5268,7 @@ packages: eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - typescript: 5.4.5 + typescript: 5.5.4 /eslint-config-turbo@2.0.0(eslint@8.57.0): resolution: {integrity: sha512-EtdL8t3iuj6JFHq8nESXwnu0U7K/ug7dkxTsYNctuR6udOudjLMZz3A0P131Bz5ZFmPoFmkdHjlRYwocGgLbOw==} @@ -5341,7 +5341,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -5369,7 +5369,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -5398,7 +5398,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -5437,7 +5437,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -5471,7 +5471,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.5.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -5496,7 +5496,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5509,8 +5509,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5556,7 +5556,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -5593,13 +5593,13 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.11 - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6130,7 +6130,7 @@ packages: signal-exit: 4.1.0 dev: true - /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0): + /fork-ts-checker-webpack-plugin@6.5.3(eslint@7.32.0)(typescript@5.5.4)(webpack@5.91.0): resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -6158,7 +6158,7 @@ packages: schema-utils: 2.7.0 semver: 7.6.0 tapable: 1.1.3 - typescript: 5.4.5 + typescript: 5.5.4 webpack: 5.91.0 /form-data-encoder@2.1.4: @@ -6375,7 +6375,7 @@ packages: gatsby: '>2.0.0-alpha' dependencies: '@babel/runtime': 7.24.4 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) regex-escape: 3.4.10 dev: true @@ -6391,7 +6391,7 @@ packages: chokidar: 3.6.0 fs-exists-cached: 1.0.0 fs-extra: 11.2.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) gatsby-core-utils: 4.13.1 gatsby-page-utils: 3.13.1 gatsby-plugin-utils: 4.13.1(gatsby@5.13.3)(graphql@16.8.1) @@ -6416,7 +6416,7 @@ packages: '@babel/preset-typescript': 7.24.1(@babel/core@7.24.4) '@babel/runtime': 7.24.4 babel-plugin-remove-graphql-queries: 5.13.1(@babel/core@7.24.4)(gatsby@5.13.3) - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) transitivePeerDependencies: - supports-color @@ -6430,7 +6430,7 @@ packages: '@babel/runtime': 7.24.4 fastq: 1.17.1 fs-extra: 11.2.0 - gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5) + gatsby: 5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4) gatsby-core-utils: 4.13.1 gatsby-sharp: 1.13.0 graphql: 16.8.1 @@ -6502,7 +6502,7 @@ packages: transitivePeerDependencies: - supports-color - /gatsby@5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.4.5): + /gatsby@5.13.3(babel-eslint@10.1.0)(react-dom@18.2.0)(react@18.2.0)(typescript@5.5.4): resolution: {integrity: sha512-SSnGpjswK20BQORcvTbtK8eI+W4QUG+u8rdVswB4suva6BfvTakW2wiktj7E2MdO4NjRvlgJjF5dUUncU5nldA==} engines: {node: '>=18.0.0'} hasBin: true @@ -6536,8 +6536,8 @@ packages: '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.14.0)(webpack@5.91.0) '@sigmacomputing/babel-plugin-lodash': 3.3.5 '@types/http-proxy': 1.17.14 - '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 5.62.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/webpack-asset-relocator-loader': 1.7.3 acorn-loose: 8.4.0 acorn-walk: 8.3.2 @@ -6575,7 +6575,7 @@ packages: enhanced-resolve: 5.16.0 error-stack-parser: 2.1.4 eslint: 7.32.0 - eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.4.5) + eslint-config-react-app: 6.0.0(@typescript-eslint/eslint-plugin@5.62.0)(@typescript-eslint/parser@5.62.0)(babel-eslint@10.1.0)(eslint-plugin-flowtype@5.10.0)(eslint-plugin-import@2.29.1)(eslint-plugin-jsx-a11y@6.8.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-react@7.34.1)(eslint@7.32.0)(typescript@5.5.4) eslint-plugin-flowtype: 5.10.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0)(eslint@8.57.0) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) @@ -6649,7 +6649,7 @@ packages: query-string: 6.14.1 raw-loader: 4.0.2(webpack@5.91.0) react: 18.2.0 - react-dev-utils: 12.0.1(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0) + react-dev-utils: 12.0.1(eslint@7.32.0)(typescript@5.5.4)(webpack@5.91.0) react-dom: 18.2.0(react@18.2.0) react-refresh: 0.14.0 react-server-dom-webpack: 0.0.0-experimental-c8b778b7f-20220825(react@18.2.0)(webpack@5.91.0) @@ -9075,7 +9075,7 @@ packages: minimist: 1.2.8 strip-json-comments: 2.0.1 - /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0): + /react-dev-utils@12.0.1(eslint@7.32.0)(typescript@5.5.4)(webpack@5.91.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -9094,7 +9094,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.4.5)(webpack@5.91.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@7.32.0)(typescript@5.5.4)(webpack@5.91.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -9109,7 +9109,7 @@ packages: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - typescript: 5.4.5 + typescript: 5.5.4 webpack: 5.91.0 transitivePeerDependencies: - eslint @@ -10225,13 +10225,13 @@ packages: /true-case-path@2.2.1: resolution: {integrity: sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==} - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tsconfig-paths@3.15.0: @@ -10251,14 +10251,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} @@ -10410,8 +10410,8 @@ packages: /typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true diff --git a/examples/with-nestjs/apps/api/package.json b/examples/with-nestjs/apps/api/package.json index 26f0718bad3d1..0832931d25226 100644 --- a/examples/with-nestjs/apps/api/package.json +++ b/examples/with-nestjs/apps/api/package.json @@ -40,6 +40,6 @@ "ts-loader": "^9.4.3", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-nestjs/apps/web/package.json b/examples/with-nestjs/apps/web/package.json index 38ba0609562a1..dd4403ecfb4e0 100644 --- a/examples/with-nestjs/apps/web/package.json +++ b/examples/with-nestjs/apps/web/package.json @@ -32,6 +32,6 @@ "@types/react-dom": "^18.2.19", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-nestjs/packages/api/package.json b/examples/with-nestjs/packages/api/package.json index 3a2b64cb30459..9b229d727326c 100644 --- a/examples/with-nestjs/packages/api/package.json +++ b/examples/with-nestjs/packages/api/package.json @@ -42,6 +42,6 @@ "@types/node": "^20.3.1", "ts-loader": "^9.4.3", "ts-node": "^10.9.2", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-nestjs/packages/eslint-config/package.json b/examples/with-nestjs/packages/eslint-config/package.json index ec676777233be..453a95deebb94 100644 --- a/examples/with-nestjs/packages/eslint-config/package.json +++ b/examples/with-nestjs/packages/eslint-config/package.json @@ -18,6 +18,6 @@ "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", "eslint-plugin-prettier": "^5.1.3", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-nestjs/packages/ui/package.json b/examples/with-nestjs/packages/ui/package.json index c04fa2b2ea879..19ad2dcafbb2d 100644 --- a/examples/with-nestjs/packages/ui/package.json +++ b/examples/with-nestjs/packages/ui/package.json @@ -21,6 +21,6 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "react": "^18.2.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-nestjs/pnpm-lock.yaml b/examples/with-nestjs/pnpm-lock.yaml index 4a14241853d38..2b1aec7d71c42 100644 --- a/examples/with-nestjs/pnpm-lock.yaml +++ b/examples/with-nestjs/pnpm-lock.yaml @@ -50,7 +50,7 @@ importers: version: 10.3.2 '@nestjs/schematics': specifier: ^10.0.0 - version: 10.1.1(typescript@5.4.5) + version: 10.1.1(typescript@5.5.4) '@nestjs/testing': specifier: ^10.0.0 version: 10.3.8(@nestjs/common@10.3.8)(@nestjs/core@10.3.8)(@nestjs/platform-express@10.3.8) @@ -83,19 +83,19 @@ importers: version: 6.3.4 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.5.4) ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) + version: 9.5.1(typescript@5.5.4)(webpack@5.91.0) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) + version: 10.9.2(@types/node@20.11.24)(typescript@5.5.4) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/web: dependencies: @@ -155,8 +155,8 @@ importers: specifier: ^29.7.0 version: 29.7.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/api: dependencies: @@ -175,25 +175,25 @@ importers: version: 20.11.24 ts-loader: specifier: ^9.4.3 - version: 9.5.1(typescript@5.4.5)(webpack@5.91.0) + version: 9.5.1(typescript@5.5.4)(webpack@5.91.0) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) + version: 10.9.2(@types/node@20.11.24)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -207,8 +207,8 @@ importers: specifier: ^5.1.3 version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/jest-config: devDependencies: @@ -234,7 +234,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.12.4(@types/node@20.11.24)(typescript@5.4.5) + version: 1.12.4(@types/node@20.11.24)(typescript@5.5.4) '@types/eslint': specifier: ^8.56.5 version: 8.56.5 @@ -254,8 +254,8 @@ importers: specifier: ^18.2.0 version: 18.2.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -1186,7 +1186,7 @@ packages: - chokidar dev: true - /@nestjs/schematics@10.1.1(typescript@5.4.5): + /@nestjs/schematics@10.1.1(typescript@5.5.4): resolution: {integrity: sha512-o4lfCnEeIkfJhGBbLZxTuVWcGuqDCFwg5OrvpgRUBM7vI/vONvKKiB5riVNpO+JqXoH0I42NNeDb0m4V5RREig==} peerDependencies: typescript: '>=4.8.2' @@ -1196,7 +1196,7 @@ packages: comment-json: 4.2.3 jsonc-parser: 3.2.1 pluralize: 8.0.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - chokidar dev: true @@ -1487,7 +1487,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.12.4(@types/node@20.11.24)(typescript@5.4.5): + /@turbo/gen@1.12.4(@types/node@20.11.24)(typescript@5.5.4): resolution: {integrity: sha512-3Z8KZ6Vnc2x6rr8sNJ4QNYpkAttLBfb91uPzDlFDY7vgJg+vfXT8YWyZznVL+19ZixF2C/F4Ucp4/YjG2e1drg==} hasBin: true dependencies: @@ -1499,7 +1499,7 @@ packages: minimatch: 9.0.3 node-plop: 0.26.3 proxy-agent: 6.3.0 - ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.5.4) update-check: 1.5.4 validate-npm-package-name: 5.0.0 transitivePeerDependencies: @@ -1791,7 +1791,7 @@ packages: '@types/yargs-parser': 21.0.3 dev: true - /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1803,10 +1803,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.17.0 - '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 @@ -1814,13 +1814,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1832,10 +1832,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -1843,13 +1843,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1861,16 +1861,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.17.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1882,11 +1882,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1915,7 +1915,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: true - /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1925,17 +1925,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1945,12 +1945,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1970,7 +1970,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1985,13 +1985,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.17.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.17.0(typescript@5.5.4): resolution: {integrity: sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2007,13 +2007,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.5.4): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2029,13 +2029,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2046,7 +2046,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -2055,7 +2055,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2066,7 +2066,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.17.0 '@typescript-eslint/types': 6.17.0 - '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.17.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2074,7 +2074,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2085,7 +2085,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2121,7 +2121,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -2142,25 +2142,25 @@ packages: '@babel/core': 7.24.5 '@babel/eslint-parser': 7.23.3(@babel/core@7.24.5)(eslint@8.57.0) '@rushstack/eslint-patch': 1.5.1 - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.17.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.1.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.1.2(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -3703,7 +3703,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -3733,7 +3733,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -3762,7 +3762,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -3787,7 +3787,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -3800,8 +3800,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.17.0(@typescript-eslint/parser@6.17.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -3848,7 +3848,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.17.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): @@ -3906,13 +3906,13 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.1.2(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.1.2(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-Ra16FeBlonfbScOIdZEta9o+OxtwDqiUt+4UCpIM42TuatyLdtfU/SbwnIzPcAszrbl58PGwyZ9YGU9dwIo/tA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5381,7 +5381,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.11.24)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -7781,16 +7781,16 @@ packages: hasBin: true dev: true - /ts-api-utils@1.0.2(typescript@5.4.5): + /ts-api-utils@1.0.2(typescript@5.5.4): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true - /ts-jest@29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.2.5(@babel/core@7.24.5)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -7824,11 +7824,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: true - /ts-loader@9.5.1(typescript@5.4.5)(webpack@5.91.0): + /ts-loader@9.5.1(typescript@5.5.4)(webpack@5.91.0): resolution: {integrity: sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==} engines: {node: '>=12.0.0'} peerDependencies: @@ -7840,11 +7840,11 @@ packages: micromatch: 4.0.5 semver: 7.5.4 source-map: 0.7.4 - typescript: 5.4.5 + typescript: 5.5.4 webpack: 5.91.0 dev: true - /ts-node@10.9.2(@types/node@20.11.24)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@20.11.24)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -7870,7 +7870,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -7909,14 +7909,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.0.4: @@ -8065,8 +8065,8 @@ packages: hasBin: true dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-npm/apps/docs/package.json b/examples/with-npm/apps/docs/package.json index eb845c7e990f9..7405043a42d9e 100644 --- a/examples/with-npm/apps/docs/package.json +++ b/examples/with-npm/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-npm/apps/web/package.json b/examples/with-npm/apps/web/package.json index c7a7d1e841cda..bbbf678567c59 100644 --- a/examples/with-npm/apps/web/package.json +++ b/examples/with-npm/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-npm/package-lock.json b/examples/with-npm/package-lock.json index 08ba4b65dff6d..ab06f07c71e5f 100644 --- a/examples/with-npm/package-lock.json +++ b/examples/with-npm/package-lock.json @@ -34,7 +34,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } }, "apps/web": { @@ -54,7 +54,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -8166,9 +8166,9 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "license": "Apache-2.0", "bin": { @@ -8580,7 +8580,7 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } }, "packages/typescript-config": { @@ -8603,7 +8603,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } } diff --git a/examples/with-npm/packages/eslint-config/package.json b/examples/with-npm/packages/eslint-config/package.json index 01680558436ec..7fcfe4885a9a5 100644 --- a/examples/with-npm/packages/eslint-config/package.json +++ b/examples/with-npm/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^6.17.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-npm/packages/ui/package.json b/examples/with-npm/packages/ui/package.json index 73d5ff79abd25..527dc756df1f7 100644 --- a/examples/with-npm/packages/ui/package.json +++ b/examples/with-npm/packages/ui/package.json @@ -19,7 +19,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-prisma/apps/web/package.json b/examples/with-prisma/apps/web/package.json index bfc338e8c90d4..1d60e634e6ce9 100644 --- a/examples/with-prisma/apps/web/package.json +++ b/examples/with-prisma/apps/web/package.json @@ -22,6 +22,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-prisma/packages/config-eslint/package.json b/examples/with-prisma/packages/config-eslint/package.json index f31bad74d33fa..01c8e124f5028 100644 --- a/examples/with-prisma/packages/config-eslint/package.json +++ b/examples/with-prisma/packages/config-eslint/package.json @@ -13,6 +13,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-prisma/packages/database/package.json b/examples/with-prisma/packages/database/package.json index c889f951fd10b..feba082700b35 100644 --- a/examples/with-prisma/packages/database/package.json +++ b/examples/with-prisma/packages/database/package.json @@ -28,6 +28,6 @@ "rimraf": "^5.0.5", "tsup": "^8.0.2", "tsx": "4.19.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-prisma/yarn.lock b/examples/with-prisma/yarn.lock index 3f924855fbd7d..5212c60b6f8b4 100644 --- a/examples/with-prisma/yarn.lock +++ b/examples/with-prisma/yarn.lock @@ -4076,10 +4076,10 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== unbox-primitive@^1.0.2: version "1.0.2" diff --git a/examples/with-react-native-web/apps/native/package.json b/examples/with-react-native-web/apps/native/package.json index 499494d4ebb0c..ba3f9028e663a 100644 --- a/examples/with-react-native-web/apps/native/package.json +++ b/examples/with-react-native-web/apps/native/package.json @@ -24,6 +24,6 @@ "@expo/webpack-config": "^19.0.0", "@types/react": "^18.2.46", "@types/react-native": "^0.73.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-react-native-web/apps/web/package.json b/examples/with-react-native-web/apps/web/package.json index a7f54c7b3cf32..b8c157c0a0dab 100644 --- a/examples/with-react-native-web/apps/web/package.json +++ b/examples/with-react-native-web/apps/web/package.json @@ -23,6 +23,6 @@ "babel-plugin-react-native-web": "^0.19.10", "eslint": "^8.56.0", "eslint-config-next": "14.0.4", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-react-native-web/packages/ui/package.json b/examples/with-react-native-web/packages/ui/package.json index 97868859b77f7..72be039242fa5 100644 --- a/examples/with-react-native-web/packages/ui/package.json +++ b/examples/with-react-native-web/packages/ui/package.json @@ -13,7 +13,7 @@ "@types/react": "^18.2.46", "@types/react-native": "^0.73.0", "tsup": "^8.0.1", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0", diff --git a/examples/with-react-native-web/yarn.lock b/examples/with-react-native-web/yarn.lock index 4f8899c4c6ee6..93abc1dc7b5cd 100644 --- a/examples/with-react-native-web/yarn.lock +++ b/examples/with-react-native-web/yarn.lock @@ -10647,10 +10647,10 @@ typedarray.prototype.slice@^1.0.3: typed-array-buffer "^1.0.2" typed-array-byte-offset "^1.0.2" -typescript@5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== ua-parser-js@^1.0.35: version "1.0.38" diff --git a/examples/with-rollup/apps/web/package.json b/examples/with-rollup/apps/web/package.json index a3ce18ae2285a..f3efc14416b8f 100644 --- a/examples/with-rollup/apps/web/package.json +++ b/examples/with-rollup/apps/web/package.json @@ -21,6 +21,6 @@ "@types/node": "^20.11.24", "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-rollup/packages/config-eslint/package.json b/examples/with-rollup/packages/config-eslint/package.json index 173679acffc23..821a73829bff4 100644 --- a/examples/with-rollup/packages/config-eslint/package.json +++ b/examples/with-rollup/packages/config-eslint/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-rollup/packages/ui/package.json b/examples/with-rollup/packages/ui/package.json index 0b82320100acf..a79b4fd0c3818 100644 --- a/examples/with-rollup/packages/ui/package.json +++ b/examples/with-rollup/packages/ui/package.json @@ -25,7 +25,7 @@ "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", "rollup": "^4.12.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-rollup/pnpm-lock.yaml b/examples/with-rollup/pnpm-lock.yaml index a5d1578b2ae73..9cd6cc5c54fb9 100644 --- a/examples/with-rollup/pnpm-lock.yaml +++ b/examples/with-rollup/pnpm-lock.yaml @@ -52,20 +52,20 @@ importers: specifier: ^18.2.19 version: 18.3.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/config-eslint: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.12.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.3.0)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.3.0)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -76,8 +76,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/config-typescript: {} @@ -95,7 +95,7 @@ importers: version: link:../config-typescript '@rollup/plugin-typescript': specifier: ^11.1.6 - version: 11.1.6(rollup@4.18.0)(typescript@5.4.5) + version: 11.1.6(rollup@4.18.0)(typescript@5.5.4) '@types/react': specifier: ^18.2.61 version: 18.3.3 @@ -109,8 +109,8 @@ importers: specifier: ^4.12.0 version: 4.18.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -574,7 +574,7 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true - /@rollup/plugin-typescript@11.1.6(rollup@4.18.0)(typescript@5.4.5): + /@rollup/plugin-typescript@11.1.6(rollup@4.18.0)(typescript@5.5.4): resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -590,7 +590,7 @@ packages: '@rollup/pluginutils': 5.1.0(rollup@4.18.0) resolve: 1.22.8 rollup: 4.18.0 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /@rollup/pluginutils@5.1.0(rollup@4.18.0): @@ -794,7 +794,7 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -806,10 +806,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 @@ -817,13 +817,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -835,22 +835,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.1 - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.12.0 - '@typescript-eslint/type-utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.12.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.12.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -862,16 +862,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -883,11 +883,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.12.0 '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -916,7 +916,7 @@ packages: '@typescript-eslint/visitor-keys': 7.12.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -926,17 +926,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -946,12 +946,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.12.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -971,7 +971,7 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -986,13 +986,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.2 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1008,13 +1008,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.12.0(typescript@5.5.4): resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1030,13 +1030,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.4 semver: 7.6.2 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1047,7 +1047,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.2 @@ -1056,7 +1056,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1067,7 +1067,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.2 transitivePeerDependencies: @@ -1075,7 +1075,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1084,7 +1084,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.12.0 '@typescript-eslint/types': 7.12.0 - '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -1119,7 +1119,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.0)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.0)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1140,25 +1140,25 @@ packages: '@babel/core': 7.24.6 '@babel/eslint-parser': 7.24.6(@babel/core@7.24.6)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.12.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.34.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.3.0 prettier-plugin-packagejson: 2.5.0(prettier@3.3.0) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -1852,7 +1852,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) @@ -1881,7 +1881,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -1910,7 +1910,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -1935,7 +1935,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1948,8 +1948,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -1996,7 +1996,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): @@ -2035,13 +2035,13 @@ packages: string.prototype.matchall: 4.0.11 dev: true - /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -3722,13 +3722,13 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tsconfig-paths@3.15.0: @@ -3747,14 +3747,14 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.0.3: @@ -3883,8 +3883,8 @@ packages: possible-typed-array-names: 1.0.0 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-svelte/apps/docs/package.json b/examples/with-svelte/apps/docs/package.json index a027612a8ddc6..e572626a42e55 100644 --- a/examples/with-svelte/apps/docs/package.json +++ b/examples/with-svelte/apps/docs/package.json @@ -31,7 +31,7 @@ "svelte": "^4.2.12", "svelte-check": "^3.6.6", "tslib": "^2.6.2", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4", "vitest": "^1.3.1" } diff --git a/examples/with-svelte/apps/web/package.json b/examples/with-svelte/apps/web/package.json index 7e6201396001e..5852eb49516c8 100644 --- a/examples/with-svelte/apps/web/package.json +++ b/examples/with-svelte/apps/web/package.json @@ -31,7 +31,7 @@ "svelte": "^4.2.12", "svelte-check": "^3.6.6", "tslib": "^2.6.2", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4", "vitest": "^1.3.1" } diff --git a/examples/with-svelte/pnpm-lock.yaml b/examples/with-svelte/pnpm-lock.yaml index 3b9b1fcdcc685..a021798968c42 100644 --- a/examples/with-svelte/pnpm-lock.yaml +++ b/examples/with-svelte/pnpm-lock.yaml @@ -41,10 +41,10 @@ importers: version: 3.0.2(svelte@4.2.12)(vite@5.1.4) '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -64,8 +64,8 @@ importers: specifier: ^2.6.2 version: 2.6.2 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.1.4 @@ -96,10 +96,10 @@ importers: version: 3.0.2(svelte@4.2.12)(vite@5.1.4) '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -119,8 +119,8 @@ importers: specifier: ^2.6.2 version: 2.6.2 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.1.4 @@ -132,10 +132,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -667,7 +667,7 @@ packages: /@types/semver@7.5.6: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -679,10 +679,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -690,12 +690,12 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -707,11 +707,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -722,7 +722,7 @@ packages: '@typescript-eslint/types': 7.1.0 '@typescript-eslint/visitor-keys': 7.1.0 - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -732,12 +732,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color @@ -745,7 +745,7 @@ packages: resolution: {integrity: sha512-qTWjWieJ1tRJkxgZYXx6WUYtWlBc48YRxgY2JN1aGeVpkhmnopq+SUC8UEVGNXIvWH7XyuTjwALfG6bFEgCkQA==} engines: {node: ^16.0.0 || >=18.0.0} - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.5.4): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -761,12 +761,12 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -777,7 +777,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -2087,8 +2087,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 4.2.12 - svelte-preprocess: 5.1.3(svelte@4.2.12)(typescript@5.4.5) - typescript: 5.4.5 + svelte-preprocess: 5.1.3(svelte@4.2.12)(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -2127,7 +2127,7 @@ packages: svelte: 4.2.12 dev: true - /svelte-preprocess@5.1.3(svelte@4.2.12)(typescript@5.4.5): + /svelte-preprocess@5.1.3(svelte@4.2.12)(typescript@5.5.4): resolution: {integrity: sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==} engines: {node: '>= 16.0.0', pnpm: ^8.0.0} requiresBuild: true @@ -2171,7 +2171,7 @@ packages: sorcery: 0.11.0 strip-indent: 3.0.0 svelte: 4.2.12 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /svelte@4.2.12: @@ -2228,13 +2228,13 @@ packages: engines: {node: '>=6'} dev: true - /ts-api-utils@1.0.3(typescript@5.4.5): + /ts-api-utils@1.0.3(typescript@5.5.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} @@ -2315,8 +2315,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true diff --git a/examples/with-tailwind/apps/docs/package.json b/examples/with-tailwind/apps/docs/package.json index 750056affa3bd..11898e7feea2b 100644 --- a/examples/with-tailwind/apps/docs/package.json +++ b/examples/with-tailwind/apps/docs/package.json @@ -26,6 +26,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-tailwind/apps/web/package.json b/examples/with-tailwind/apps/web/package.json index 047ebdf872057..d7f6e5a6d3f09 100644 --- a/examples/with-tailwind/apps/web/package.json +++ b/examples/with-tailwind/apps/web/package.json @@ -26,6 +26,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-tailwind/packages/ui/package.json b/examples/with-tailwind/packages/ui/package.json index 70b9e16399b56..3b579d0990713 100644 --- a/examples/with-tailwind/packages/ui/package.json +++ b/examples/with-tailwind/packages/ui/package.json @@ -29,6 +29,6 @@ "autoprefixer": "^10.4.18", "postcss": "^8.4.35", "tailwindcss": "^3.4.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-tailwind/pnpm-lock.yaml b/examples/with-tailwind/pnpm-lock.yaml index 01882c16dca80..92aa4eb4d19df 100644 --- a/examples/with-tailwind/pnpm-lock.yaml +++ b/examples/with-tailwind/pnpm-lock.yaml @@ -64,8 +64,8 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/web: dependencies: @@ -113,14 +113,14 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/config-eslint: devDependencies: '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) eslint-config-turbo: specifier: ^2.0.0 version: 2.0.0(eslint@8.57.0) @@ -164,8 +164,8 @@ importers: specifier: ^3.4.1 version: 3.4.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -709,7 +709,7 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: true - /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-XOpZ3IyJUIV1b15M7HVOpgQxPPF7lGXgsfcEIu3yDxFPaf/xZKt7s9QO/pbk7vpWQyVulpJbu4E5LwpZiQo4kA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -721,10 +721,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.12.0 - '@typescript-eslint/type-utils': 6.12.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.12.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.12.0 debug: 4.3.4 eslint: 8.57.0 @@ -732,13 +732,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-s8/jNFPKPNRmXEnNXfuo1gemBdVmpQsK1pcu+QIvuNJuhFzGrpD7WjOcvDc/+uEdfzSYpNu7U/+MmbScjoQ6vg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -750,11 +750,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.12.0 '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.12.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -775,7 +775,7 @@ packages: '@typescript-eslint/visitor-keys': 6.12.0 dev: true - /@typescript-eslint/type-utils@6.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-WWmRXxhm1X8Wlquj+MhsAG4dU/Blvf1xDgGaYCzfvStP2NwPQh6KBvCDbiOEvaE0filhranjIlK/2fSTVwtBng==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -785,12 +785,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.12.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -805,7 +805,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -820,13 +820,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.12.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.12.0(typescript@5.5.4): resolution: {integrity: sha512-vw9E2P9+3UUWzhgjyyVczLWxZ3GuQNT7QpnIY3o5OMeLO/c8oHljGc8ZpryBMIyympiAAaKgw9e5Hl9dCWFOYw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -841,13 +841,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -858,7 +858,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -867,7 +867,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.12.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.12.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-LywPm8h3tGEbgfyjYnu3dauZ0U7R60m+miXgKcZS8c7QALO9uWJdvNoP+duKTk2XMWc7/Q3d/QiCuLN9X6SWyQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -878,7 +878,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 6.12.0 '@typescript-eslint/types': 6.12.0 - '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.12.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -906,7 +906,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -927,25 +927,25 @@ packages: '@babel/core': 7.23.3 '@babel/eslint-parser': 7.23.3(@babel/core@7.23.3)(eslint@8.57.0) '@rushstack/eslint-patch': 1.6.0 - '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.0.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.0) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.12.0)(eslint-plugin-import@2.29.0)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.0(@typescript-eslint/parser@6.12.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.6.0)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.0(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.6(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -1683,7 +1683,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -1713,7 +1713,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.12.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.7 array.prototype.findlastindex: 1.2.3 array.prototype.flat: 1.3.2 @@ -1738,7 +1738,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -1751,8 +1751,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.12.0(@typescript-eslint/parser@6.12.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -1794,7 +1794,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.6.0(@typescript-eslint/eslint-plugin@6.12.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): @@ -1831,13 +1831,13 @@ packages: string.prototype.matchall: 4.0.10 dev: true - /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-+LCYJU81WF2yQ+Xu4A135CgK8IszcFcyMF4sWkbiu6Oj+Nel0TrkZq/HvDw0/1WuO3dhDQsZA/OpEMGd0NfcUw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -3888,13 +3888,13 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.0.3(typescript@5.4.5): + /ts-api-utils@1.0.3(typescript@5.5.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /ts-interface-checker@0.1.13: @@ -3922,14 +3922,14 @@ packages: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} dev: false - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.0.3: @@ -4052,8 +4052,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-typeorm/apps/docs/package.json b/examples/with-typeorm/apps/docs/package.json index 5aa3fbebdba15..66444e07a5bc2 100644 --- a/examples/with-typeorm/apps/docs/package.json +++ b/examples/with-typeorm/apps/docs/package.json @@ -25,6 +25,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-typeorm/apps/web/package.json b/examples/with-typeorm/apps/web/package.json index 8aa96594b9dc5..69711b97e1048 100644 --- a/examples/with-typeorm/apps/web/package.json +++ b/examples/with-typeorm/apps/web/package.json @@ -25,6 +25,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-typeorm/packages/eslint-config/package.json b/examples/with-typeorm/packages/eslint-config/package.json index 173679acffc23..821a73829bff4 100644 --- a/examples/with-typeorm/packages/eslint-config/package.json +++ b/examples/with-typeorm/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-plugin-only-warn": "^1.1.0", "@typescript-eslint/parser": "^7.1.0", "@typescript-eslint/eslint-plugin": "^7.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-typeorm/packages/typeorm-service/package.json b/examples/with-typeorm/packages/typeorm-service/package.json index adb542b63b57b..7e8551b4c54c2 100644 --- a/examples/with-typeorm/packages/typeorm-service/package.json +++ b/examples/with-typeorm/packages/typeorm-service/package.json @@ -24,7 +24,7 @@ "@repo/typescript-config": "workspace:*", "@types/node": "^20.11.24", "eslint": "^8.57.0", - "typescript": "5.4.5", + "typescript": "5.5.4", "unplugin-swc": "^1.4.5", "vitest": "^1.5.0" } diff --git a/examples/with-typeorm/packages/ui/package.json b/examples/with-typeorm/packages/ui/package.json index 9095356e579f3..44ae805dd5cb9 100644 --- a/examples/with-typeorm/packages/ui/package.json +++ b/examples/with-typeorm/packages/ui/package.json @@ -20,7 +20,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-typeorm/pnpm-lock.yaml b/examples/with-typeorm/pnpm-lock.yaml index b2c9dc1a33076..784d224b075b2 100644 --- a/examples/with-typeorm/pnpm-lock.yaml +++ b/examples/with-typeorm/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 apps/web: dependencies: @@ -116,20 +116,20 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.17.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.17.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -140,8 +140,8 @@ importers: specifier: ^1.1.0 version: 1.1.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/typeorm-service: dependencies: @@ -168,8 +168,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 unplugin-swc: specifier: ^1.4.5 version: 1.5.1(@swc/core@1.7.0) @@ -193,7 +193,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.12.4 - version: 1.13.4(@types/node@20.14.11)(typescript@5.4.5) + version: 1.13.4(@types/node@20.14.11)(typescript@5.5.4) '@types/eslint': specifier: ^8.56.5 version: 8.56.11 @@ -210,8 +210,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -1219,7 +1219,7 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@turbo/gen@1.13.4(@types/node@20.14.11)(typescript@5.4.5): + /@turbo/gen@1.13.4(@types/node@20.14.11)(typescript@5.5.4): resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true dependencies: @@ -1231,7 +1231,7 @@ packages: minimatch: 9.0.5 node-plop: 0.26.3 proxy-agent: 6.4.0 - ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@20.14.11)(typescript@5.5.4) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -1338,7 +1338,7 @@ packages: resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} dev: true - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1350,10 +1350,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 @@ -1361,13 +1361,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.17.0(@typescript-eslint/parser@7.17.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-pyiDhEuLM3PuANxH7uNYan1AaFs5XE0zw1hq69JBvGvE7gSuEoQl1ydtEe/XQeoC3GQxLXyOVa5kNOATgM638A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1379,22 +1379,22 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.17.0 - '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.17.0 eslint: 8.57.0 graphemer: 1.4.0 ignore: 5.3.1 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1406,16 +1406,16 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-puiYfGeg5Ydop8eusb/Hy1k7QmOU6X3nvsqCgzrB2K4qMavK//21+PzNE8qeECgNOIoertJPUC1SpegHDI515A==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1427,11 +1427,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.17.0 debug: 4.3.5 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1460,7 +1460,7 @@ packages: '@typescript-eslint/visitor-keys': 7.17.0 dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1470,17 +1470,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-XD3aaBt+orgkM/7Cei0XNEm1vwUxQ958AOLALzPlbPqb8C1G8PZK85tND7Jpe69Wualri81PLU+Zc48GVKIMMA==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1490,12 +1490,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.5 eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -1515,7 +1515,7 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1530,13 +1530,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1552,13 +1552,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@7.17.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.17.0(typescript@5.5.4): resolution: {integrity: sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1574,13 +1574,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.3.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -1591,7 +1591,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.3 @@ -1600,7 +1600,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -1611,7 +1611,7 @@ packages: '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.3 transitivePeerDependencies: @@ -1619,7 +1619,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.17.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: @@ -1628,7 +1628,7 @@ packages: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@typescript-eslint/scope-manager': 7.17.0 '@typescript-eslint/types': 7.17.0 - '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.17.0(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -1663,7 +1663,7 @@ packages: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.3.3)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -1684,25 +1684,25 @@ packages: '@babel/core': 7.24.9 '@babel/eslint-parser': 7.24.8(@babel/core@7.24.9)(eslint@8.57.0) '@rushstack/eslint-patch': 1.10.3 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.1.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.29.1) eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.29.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.17.0)(eslint@8.57.0) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.9.0(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.0) eslint-plugin-react: 7.35.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) - eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.2.2(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.3.3 prettier-plugin-packagejson: 2.5.1(prettier@3.3.3) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2824,7 +2824,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2854,7 +2854,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.9 @@ -2883,7 +2883,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.17.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2908,7 +2908,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -2921,8 +2921,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -2969,7 +2969,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): @@ -3008,13 +3008,13 @@ packages: string.prototype.repeat: 1.0.0 dev: true - /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -5626,16 +5626,16 @@ packages: is-number: 7.0.0 dev: true - /ts-api-utils@1.3.0(typescript@5.4.5): + /ts-api-utils@1.3.0(typescript@5.5.4): resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true - /ts-node@10.9.2(@types/node@20.14.11)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@20.14.11)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -5661,7 +5661,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -5682,14 +5682,14 @@ packages: /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /turbo-darwin-64@2.0.9: @@ -5906,8 +5906,8 @@ packages: - supports-color dev: false - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true dev: true diff --git a/examples/with-vite/apps/docs/package.json b/examples/with-vite/apps/docs/package.json index b3659d7d8816b..c5739f8b7aef1 100644 --- a/examples/with-vite/apps/docs/package.json +++ b/examples/with-vite/apps/docs/package.json @@ -16,7 +16,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4" } } diff --git a/examples/with-vite/apps/web/package.json b/examples/with-vite/apps/web/package.json index 6d4a5bc0cee20..875e12fcede83 100644 --- a/examples/with-vite/apps/web/package.json +++ b/examples/with-vite/apps/web/package.json @@ -16,7 +16,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4" } } diff --git a/examples/with-vite/packages/ui/package.json b/examples/with-vite/packages/ui/package.json index a6a8474fef7d0..710075b579fb5 100644 --- a/examples/with-vite/packages/ui/package.json +++ b/examples/with-vite/packages/ui/package.json @@ -14,6 +14,6 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-vite/pnpm-lock.yaml b/examples/with-vite/pnpm-lock.yaml index 28b37596bf33d..6dfd64d963b75 100644 --- a/examples/with-vite/pnpm-lock.yaml +++ b/examples/with-vite/pnpm-lock.yaml @@ -34,8 +34,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.1.4 @@ -56,8 +56,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.1.4 @@ -66,10 +66,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 - version: 7.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 7.1.0(eslint@8.57.0)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.0) @@ -88,8 +88,8 @@ importers: specifier: ^8.57.0 version: 8.57.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages: @@ -467,7 +467,7 @@ packages: resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} dev: false - /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@7.1.0(@typescript-eslint/parser@7.1.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-j6vT/kCulhG5wBmGtstKeiVr1rdXE4nk+DT1k6trYkwlrvW9eOF5ZbgKnd/YR6PcM4uTEXa0h6Fcvf6X7Dxl0w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -479,10 +479,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 7.1.0 - '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 @@ -490,13 +490,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-V1EknKUubZ1gWFjiOZhDSNToOjs63/9O0puCgGS8aDOgpZY326fzFu15QAUjwaXzRZjf/qdsdBrckYdv9YxB8w==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -508,11 +508,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 7.1.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: false @@ -525,7 +525,7 @@ packages: '@typescript-eslint/visitor-keys': 7.1.0 dev: false - /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-UZIhv8G+5b5skkcuhgvxYWHjk7FW7/JP5lPASMEUoliAPwIH/rxoUSQPia2cuOj9AmDZmwUl1usKm85t5VUMew==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -535,12 +535,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) - '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) + '@typescript-eslint/utils': 7.1.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: false @@ -550,7 +550,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: false - /@typescript-eslint/typescript-estree@7.1.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@7.1.0(typescript@5.5.4): resolution: {integrity: sha512-k7MyrbD6E463CBbSpcOnwa8oXRdHzH1WiVzOipK3L5KSML92ZKgUBrTlehdi7PEIMT8k0bQixHUGXggPAlKnOQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -566,13 +566,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.3(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: false - /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@7.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-WUFba6PZC5OCGEmbweGpnNJytJiLG7ZvDBJJoUcX4qZYf1mGZ97mO2Mps6O2efxJcJdRNpqweCistDbZMwIVHw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -583,7 +583,7 @@ packages: '@types/semver': 7.5.6 '@typescript-eslint/scope-manager': 7.1.0 '@typescript-eslint/types': 7.1.0 - '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 7.1.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.5.4 transitivePeerDependencies: @@ -1268,13 +1268,13 @@ packages: is-number: 7.0.0 dev: false - /ts-api-utils@1.0.3(typescript@5.4.5): + /ts-api-utils@1.0.3(typescript@5.5.4): resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: false /turbo-darwin-64@2.0.3: @@ -1347,8 +1347,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true diff --git a/examples/with-vue-nuxt/apps/web/package.json b/examples/with-vue-nuxt/apps/web/package.json index 8c414456b6eb2..c5040aedb2ecf 100644 --- a/examples/with-vue-nuxt/apps/web/package.json +++ b/examples/with-vue-nuxt/apps/web/package.json @@ -24,7 +24,7 @@ "eslint-plugin-vue": "^9.22.0", "npm-run-all2": "^6.1.2", "tsconfig": "workspace:*", - "typescript": "5.4.5", + "typescript": "5.5.4", "vite": "^5.1.4", "vue-tsc": "^2.0.4" } diff --git a/examples/with-vue-nuxt/packages/eslint-config-custom/package.json b/examples/with-vue-nuxt/packages/eslint-config-custom/package.json index 99932cee49c24..b7b0f56ebea9e 100644 --- a/examples/with-vue-nuxt/packages/eslint-config-custom/package.json +++ b/examples/with-vue-nuxt/packages/eslint-config-custom/package.json @@ -8,6 +8,6 @@ "@vercel/style-guide": "^5.2.0", "@vue/eslint-config-typescript": "^12.0.0", "eslint-config-turbo": "^2.0.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-vue-nuxt/pnpm-lock.yaml b/examples/with-vue-nuxt/pnpm-lock.yaml index a92bdc7231a90..f0263cc13e1a3 100644 --- a/examples/with-vue-nuxt/pnpm-lock.yaml +++ b/examples/with-vue-nuxt/pnpm-lock.yaml @@ -26,7 +26,7 @@ importers: version: 1.0.8(nuxt@3.10.3)(vite@5.1.4) '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 12.1.0(eslint@8.57.0)(typescript@5.5.4) eslint: specifier: ^8.57.0 version: 8.57.0 @@ -35,13 +35,13 @@ importers: version: link:../../packages/eslint-config-custom nuxt: specifier: ^3.10.3 - version: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) + version: 3.10.3(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4) tsconfig: specifier: workspace:* version: link:../../packages/tsconfig vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.4.5) + version: 3.4.21(typescript@5.5.4) vue-router: specifier: ^4.3.0 version: 4.3.0(vue@3.4.21) @@ -53,7 +53,7 @@ importers: version: link:../../packages/ui vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.4.5) + version: 3.4.21(typescript@5.5.4) devDependencies: '@rushstack/eslint-patch': specifier: ^1.7.2 @@ -83,32 +83,32 @@ importers: specifier: workspace:* version: link:../../packages/tsconfig typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 vite: specifier: ^5.1.4 version: 5.1.4(@types/node@20.11.24) vue-tsc: specifier: ^2.0.4 - version: 2.0.4(typescript@5.4.5) + version: 2.0.4(typescript@5.5.4) packages/eslint-config-custom: devDependencies: '@nuxtjs/eslint-config-typescript': specifier: ^12.1.0 - version: 12.1.0(eslint@8.57.0)(typescript@5.4.5) + version: 12.1.0(eslint@8.57.0)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5) + version: 5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4) '@vue/eslint-config-typescript': specifier: ^12.0.0 - version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.4.5) + version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.5.4) eslint-config-turbo: specifier: ^2.0.0 version: 2.0.3(eslint@8.57.0) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/tsconfig: devDependencies: @@ -126,7 +126,7 @@ importers: version: link:../tsconfig vue: specifier: ^3.4.21 - version: 3.4.21(typescript@5.4.5) + version: 3.4.21(typescript@5.5.4) packages: @@ -1221,7 +1221,7 @@ packages: '@nuxt/kit': 3.10.3 '@nuxt/schema': 3.10.3 execa: 7.2.0 - nuxt: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) + nuxt: 3.10.3(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4) vite: 5.1.4(@types/node@20.11.24) transitivePeerDependencies: - rollup @@ -1269,7 +1269,7 @@ packages: launch-editor: 2.6.1 local-pkg: 0.5.0 magicast: 0.3.3 - nuxt: 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) + nuxt: 3.10.3(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4) nypm: 0.3.8 ohash: 1.1.3 pacote: 17.0.6 @@ -1372,7 +1372,7 @@ packages: resolution: {integrity: sha512-5gc02Pu1HycOVUWJ8aYsWeeXcSTPe8iX8+KIrhyEtEoOSkY0eMBuo0ssljB8wALuEmepv31DlYe5gpiRwkjESA==} dev: true - /@nuxt/vite-builder@3.10.3(eslint@8.57.0)(typescript@5.4.5)(vue@3.4.21): + /@nuxt/vite-builder@3.10.3(eslint@8.57.0)(typescript@5.5.4)(vue@3.4.21): resolution: {integrity: sha512-BqkbrYkEk1AVUJleofbqTRV+ltf2p1CDjGDK78zENPCgrSABlj4F4oK8rze8vmRY5qoH7kMZxgMa2dXVXCp6OA==} engines: {node: ^14.18.0 || >=16.10.0} peerDependencies: @@ -1410,8 +1410,8 @@ packages: unplugin: 1.8.0 vite: 5.1.4(@types/node@20.11.24) vite-node: 1.3.1 - vite-plugin-checker: 0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4) - vue: 3.4.21(typescript@5.4.5) + vite-plugin-checker: 0.6.4(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4) + vue: 3.4.21(typescript@5.5.4) vue-bundle-renderer: 2.0.0 transitivePeerDependencies: - '@types/node' @@ -1434,14 +1434,14 @@ packages: - vue-tsc dev: true - /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.0)(typescript@5.4.5): + /@nuxtjs/eslint-config-typescript@12.1.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-l2fLouDYwdAvCZEEw7wGxOBj+i8TQcHFu3zMPTLqKuv1qu6WcZIr0uztkbaa8ND1uKZ9YPqKx6UlSOjM4Le69Q==} peerDependencies: eslint: ^8.48.0 dependencies: '@nuxtjs/eslint-config': 12.0.0(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.10.0)(eslint-plugin-import@2.28.1)(eslint@8.57.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) @@ -2000,7 +2000,7 @@ packages: resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} dev: true - /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2012,10 +2012,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.10.0 - '@typescript-eslint/type-utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.10.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 eslint: 8.57.0 @@ -2023,13 +2023,13 @@ packages: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.10.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.10.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2041,11 +2041,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.10.0 '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.10.0 debug: 4.3.4 eslint: 8.57.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2066,7 +2066,7 @@ packages: '@typescript-eslint/visitor-keys': 6.10.0 dev: true - /@typescript-eslint/type-utils@6.10.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.10.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2076,12 +2076,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) - '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.5.4) + '@typescript-eslint/utils': 6.10.0(eslint@8.57.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.57.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -2096,7 +2096,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2111,13 +2111,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.10.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.10.0(typescript@5.5.4): resolution: {integrity: sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2132,13 +2132,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2149,7 +2149,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.57.0 eslint-scope: 5.1.1 semver: 7.6.0 @@ -2158,7 +2158,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.10.0(eslint@8.57.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.10.0(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -2169,7 +2169,7 @@ packages: '@types/semver': 7.5.0 '@typescript-eslint/scope-manager': 6.10.0 '@typescript-eslint/types': 6.10.0 - '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.10.0(typescript@5.5.4) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -2233,7 +2233,7 @@ packages: '@unhead/shared': 1.8.11 hookable: 5.5.3 unhead: 1.8.11 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) dev: true /@vercel/nft@0.24.4: @@ -2257,7 +2257,7 @@ packages: - supports-color dev: true - /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.4.5): + /@vercel/style-guide@5.2.0(eslint@8.57.0)(prettier@3.2.5)(typescript@5.5.4): resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} engines: {node: '>=16'} peerDependencies: @@ -2278,25 +2278,25 @@ packages: '@babel/core': 7.24.0 '@babel/eslint-parser': 7.22.11(@babel/core@7.24.0)(eslint@8.57.0) '@rushstack/eslint-patch': 1.7.2 - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-config-prettier: 9.0.0(eslint@8.57.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.10.0)(eslint-plugin-import@2.28.1)(eslint@8.57.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.10.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.57.0) - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.57.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.2.3)(eslint@8.57.0) eslint-plugin-react: 7.33.2(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) - eslint-plugin-testing-library: 6.0.1(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.0.1(eslint@8.57.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.0) prettier: 3.2.5 prettier-plugin-packagejson: 2.4.5(prettier@3.2.5) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -2315,7 +2315,7 @@ packages: '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.24.0) '@vue/babel-plugin-jsx': 1.2.1(@babel/core@7.24.0) vite: 5.1.4(@types/node@20.11.24) - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) transitivePeerDependencies: - supports-color dev: true @@ -2328,7 +2328,7 @@ packages: vue: ^3.2.25 dependencies: vite: 5.1.4(@types/node@20.11.24) - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) dev: true /@volar/language-core@2.1.0: @@ -2365,7 +2365,7 @@ packages: ast-kit: 0.11.2 local-pkg: 0.4.3 magic-string-ast: 0.3.0 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) transitivePeerDependencies: - rollup dev: true @@ -2449,7 +2449,7 @@ packages: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} dev: true - /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.4.5): + /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: @@ -2460,17 +2460,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 eslint-plugin-vue: 9.22.0(eslint@8.57.0) - typescript: 5.4.5 + typescript: 5.5.4 vue-eslint-parser: 9.3.2(eslint@8.57.0) transitivePeerDependencies: - supports-color dev: true - /@vue/language-core@2.0.4(typescript@5.4.5): + /@vue/language-core@2.0.4(typescript@5.5.4): resolution: {integrity: sha512-IYlVEICXKRWYjRQ4JyPlXhydU/p0C7uY5LpqXyJzzJHWo44LWHZtTP3USfWNQif3VAK5QZpdZKQ5HYIeQL3BJQ==} peerDependencies: typescript: '*' @@ -2484,7 +2484,7 @@ packages: computeds: 0.0.1 minimatch: 9.0.3 path-browserify: 1.0.1 - typescript: 5.4.5 + typescript: 5.5.4 vue-template-compiler: 2.7.15 dev: true @@ -2513,7 +2513,7 @@ packages: dependencies: '@vue/compiler-ssr': 3.4.21 '@vue/shared': 3.4.21 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) /@vue/shared@3.4.21: resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} @@ -3946,7 +3946,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.57.0 eslint-import-resolver-node: 0.3.7 @@ -3998,7 +3998,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.10.0(eslint@8.57.0)(typescript@5.5.4) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -4023,7 +4023,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4036,8 +4036,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.10.0(@typescript-eslint/parser@6.10.0)(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -4111,7 +4111,7 @@ packages: optional: true dependencies: eslint: 8.57.0 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.10.0)(eslint@8.57.0)(typescript@5.5.4) dev: true /eslint-plugin-promise@6.1.1(eslint@8.57.0): @@ -4157,13 +4157,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.0.1(eslint@8.57.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.0.1(eslint@8.57.0)(typescript@5.5.4): resolution: {integrity: sha512-CEYtjpcF3hAaQtYsTZqciR7s5z+T0LCMTwJeW+pz6kBnGtc866wAKmhaiK2Gsjc2jWNP7Gt6zhNr2DE1ZW4e+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -6271,7 +6271,7 @@ packages: fsevents: 2.3.3 dev: true - /nuxt@3.10.3(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4): + /nuxt@3.10.3(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4): resolution: {integrity: sha512-NchGNiiz9g/ErJAb462W/lpX2NqcXYb9hugySKWvLXNdrjeAPiJ2/7mhgwUSiZA9MpjuQg3saiEajr1zlRIOCg==} engines: {node: ^14.18.0 || >=16.10.0} hasBin: true @@ -6290,7 +6290,7 @@ packages: '@nuxt/schema': 3.10.3 '@nuxt/telemetry': 2.5.3 '@nuxt/ui-templates': 1.3.1 - '@nuxt/vite-builder': 3.10.3(eslint@8.57.0)(typescript@5.4.5)(vue@3.4.21) + '@nuxt/vite-builder': 3.10.3(eslint@8.57.0)(typescript@5.5.4)(vue@3.4.21) '@unhead/dom': 1.8.11 '@unhead/ssr': 1.8.11 '@unhead/vue': 1.8.11(vue@3.4.21) @@ -6335,7 +6335,7 @@ packages: unplugin: 1.8.0 unplugin-vue-router: 0.7.0(vue-router@4.3.0)(vue@3.4.21) untyped: 1.4.2 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) vue-bundle-renderer: 2.0.0 vue-devtools-stub: 0.1.0 vue-router: 4.3.0(vue@3.4.21) @@ -7984,13 +7984,13 @@ packages: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: true - /ts-api-utils@1.0.2(typescript@5.4.5): + /ts-api-utils@1.0.2(typescript@5.5.4): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tsconfig-paths@3.14.2: @@ -8010,14 +8010,14 @@ packages: resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==} dev: true - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tuf-js@2.2.0: @@ -8161,8 +8161,8 @@ packages: is-typed-array: 1.1.10 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true @@ -8456,7 +8456,7 @@ packages: - terser dev: true - /vite-plugin-checker@0.6.4(eslint@8.57.0)(typescript@5.4.5)(vite@5.1.4): + /vite-plugin-checker@0.6.4(eslint@8.57.0)(typescript@5.5.4)(vite@5.1.4): resolution: {integrity: sha512-2zKHH5oxr+ye43nReRbC2fny1nyARwhxdm0uNYp/ERy4YvU9iZpNOsueoi/luXw5gnpqRSvjcEPxXbS153O2wA==} engines: {node: '>=14.16'} peerDependencies: @@ -8499,7 +8499,7 @@ packages: semver: 7.6.0 strip-ansi: 6.0.1 tiny-invariant: 1.3.1 - typescript: 5.4.5 + typescript: 5.5.4 vite: 5.1.4(@types/node@20.11.24) vscode-languageclient: 7.0.0 vscode-languageserver: 7.0.0 @@ -8680,7 +8680,7 @@ packages: vue: ^3.2.0 dependencies: '@vue/devtools-api': 6.5.1 - vue: 3.4.21(typescript@5.4.5) + vue: 3.4.21(typescript@5.5.4) dev: true /vue-template-compiler@2.7.15: @@ -8690,19 +8690,19 @@ packages: he: 1.2.0 dev: true - /vue-tsc@2.0.4(typescript@5.4.5): + /vue-tsc@2.0.4(typescript@5.5.4): resolution: {integrity: sha512-FJk+F1QhqROr6DK8raTuWk5ezNw1/kZ+7TYhc08k+cpvb1fmi7wguPZHX0svIhT4bAxCGDtF8534It8fiAkScg==} hasBin: true peerDependencies: typescript: '*' dependencies: '@volar/typescript': 2.1.0 - '@vue/language-core': 2.0.4(typescript@5.4.5) + '@vue/language-core': 2.0.4(typescript@5.5.4) semver: 7.6.0 - typescript: 5.4.5 + typescript: 5.5.4 dev: true - /vue@3.4.21(typescript@5.4.5): + /vue@3.4.21(typescript@5.5.4): resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} peerDependencies: typescript: '*' @@ -8715,7 +8715,7 @@ packages: '@vue/runtime-dom': 3.4.21 '@vue/server-renderer': 3.4.21(vue@3.4.21) '@vue/shared': 3.4.21 - typescript: 5.4.5 + typescript: 5.5.4 /webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} diff --git a/examples/with-yarn/apps/docs/package.json b/examples/with-yarn/apps/docs/package.json index eb845c7e990f9..7405043a42d9e 100644 --- a/examples/with-yarn/apps/docs/package.json +++ b/examples/with-yarn/apps/docs/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-yarn/apps/web/package.json b/examples/with-yarn/apps/web/package.json index 27541b2cf01d6..bd304a2d27d85 100644 --- a/examples/with-yarn/apps/web/package.json +++ b/examples/with-yarn/apps/web/package.json @@ -23,6 +23,6 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-yarn/packages/eslint-config/package.json b/examples/with-yarn/packages/eslint-config/package.json index ebd4e2d326443..abe24eaf1e36f 100644 --- a/examples/with-yarn/packages/eslint-config/package.json +++ b/examples/with-yarn/packages/eslint-config/package.json @@ -14,6 +14,6 @@ "eslint-config-prettier": "^9.1.0", "eslint-config-turbo": "^2.0.0", "eslint-plugin-only-warn": "^1.1.0", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/examples/with-yarn/packages/ui/package.json b/examples/with-yarn/packages/ui/package.json index aaed64f7b9b78..270b5472564c4 100644 --- a/examples/with-yarn/packages/ui/package.json +++ b/examples/with-yarn/packages/ui/package.json @@ -19,7 +19,7 @@ "@types/react": "^18.2.61", "@types/react-dom": "^18.2.19", "eslint": "^8.57.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "react": "^18.2.0" diff --git a/examples/with-yarn/yarn.lock b/examples/with-yarn/yarn.lock index bcbaf645125f9..2cafef03faf55 100644 --- a/examples/with-yarn/yarn.lock +++ b/examples/with-yarn/yarn.lock @@ -4322,10 +4322,10 @@ typed-array-length@^1.0.6: is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" -typescript@5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== uglify-js@^3.1.4: version "3.17.4" diff --git a/package.json b/package.json index 701edc544d4e1..e87df942e442a 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "lint-staged": "^13.1.0", "prettier": "^2.8.7", "semver": "^7.3.8", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "lint-staged": { "*.{js,jsx,ts,tsx}": [ diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index ead32dc6a6e22..5663dc8599d21 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -46,7 +46,7 @@ "jest": "^29.7.0", "ts-jest": "^29.2.5", "tsup": "^6.7.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "files": [ "dist" diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 07d96ebcde520..6e9d5e2287f86 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -48,7 +48,7 @@ "json5": "^2.2.1", "ts-jest": "^29.2.5", "tsup": "^6.2.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "peerDependencies": { "eslint": ">6.6.0" diff --git a/packages/turbo-benchmark/package.json b/packages/turbo-benchmark/package.json index 4c0ffeed86515..bd6fc71545296 100644 --- a/packages/turbo-benchmark/package.json +++ b/packages/turbo-benchmark/package.json @@ -43,6 +43,6 @@ "@types/node-fetch": "^2.6.6", "jest": "^29.7.0", "ts-jest": "^29.2.5", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 584e58d9a525c..61f5ddbdd916a 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -59,7 +59,7 @@ "semver": "^7.3.5", "ts-jest": "^29.2.5", "tsup": "^6.7.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "files": [ "dist" diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 4c640fe4fe08a..699c0508204ba 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -46,7 +46,7 @@ "jest": "^29.7.0", "ts-jest": "^29.2.5", "tsup": "^6.7.0", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "files": [ "dist" diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 0395d36bc477a..ced81ce7f5732 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -41,6 +41,6 @@ "jest": "^29.7.0", "ts-jest": "^29.2.5", "tsup": "^5.12.1", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/packages/turbo-telemetry/package.json b/packages/turbo-telemetry/package.json index d5fb68cc5212e..fecacb3b20c33 100644 --- a/packages/turbo-telemetry/package.json +++ b/packages/turbo-telemetry/package.json @@ -39,7 +39,7 @@ "@types/node": "^20.11.30", "dirs-next": "0.0.1-canary.1", "tsx": "4.19.1", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "peerDependencies": { "commander": "^11.0.0" diff --git a/packages/turbo-test-utils/package.json b/packages/turbo-test-utils/package.json index 482be4027d6e2..1c47fd672f639 100644 --- a/packages/turbo-test-utils/package.json +++ b/packages/turbo-test-utils/package.json @@ -31,7 +31,7 @@ "jest": "^29.7.0", "jest-mock": "^29.7.0", "ts-jest": "^29.2.5", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "dependencies": { "fs-extra": "^11.1.0", diff --git a/packages/turbo-utils/package.json b/packages/turbo-utils/package.json index 5ae64a8dbfdf0..a28968d356eb2 100644 --- a/packages/turbo-utils/package.json +++ b/packages/turbo-utils/package.json @@ -50,6 +50,6 @@ "picocolors": "1.0.1", "tar": "6.1.13", "ts-jest": "^29.2.5", - "typescript": "5.4.5" + "typescript": "5.5.4" } } diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index a1489a109e77a..cb631a0b04c48 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -56,7 +56,7 @@ "strip-ansi": "^6.0.1", "ts-jest": "^29.2.5", "tsup": "^5.10.3", - "typescript": "5.4.5" + "typescript": "5.5.4" }, "files": [ "dist" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 63e0fe08675d6..bd97bcae8c967 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -30,8 +30,8 @@ importers: specifier: ^7.3.8 version: 7.5.0 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 .github/actions/cargo-sweep: dependencies: @@ -82,8 +82,8 @@ importers: specifier: 4.19.1 version: 4.19.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 examples: devDependencies: @@ -153,19 +153,19 @@ importers: version: 29.7.0(@types/node@18.17.4) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/eslint-config: devDependencies: '@vercel/style-guide': specifier: ^5.1.0 - version: 5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.4.5) + version: 5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.5.4) packages/eslint-config-turbo: dependencies: @@ -227,13 +227,13 @@ importers: version: 2.2.3 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^6.2.0 - version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/prysk: {} @@ -313,10 +313,10 @@ importers: version: 29.7.0(@types/node@18.17.4) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-codemod: dependencies: @@ -419,13 +419,13 @@ importers: version: 3.1.1 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-exe-stub: {} @@ -457,7 +457,7 @@ importers: version: 6.2.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + version: 10.9.2(@types/node@18.17.4)(typescript@5.5.4) update-check: specifier: ^1.5.4 version: 1.5.4 @@ -497,13 +497,13 @@ importers: version: 29.7.0(@types/node@18.17.4)(ts-node@10.9.2) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^6.7.0 - version: 6.7.0(ts-node@10.9.2)(typescript@5.4.5) + version: 6.7.0(ts-node@10.9.2)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-ignore: dependencies: @@ -543,13 +543,13 @@ importers: version: 29.7.0(@types/node@18.17.4) ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^5.12.1 - version: 5.12.9(typescript@5.4.5) + version: 5.12.9(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-repository: devDependencies: @@ -612,8 +612,8 @@ importers: specifier: 4.19.1 version: 4.19.1 typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-test-utils: dependencies: @@ -653,10 +653,10 @@ importers: version: 29.7.0 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-types: devDependencies: @@ -752,10 +752,10 @@ importers: version: 6.1.13 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 packages/turbo-vsc: dependencies: @@ -862,13 +862,13 @@ importers: version: 6.0.1 ts-jest: specifier: ^29.2.5 - version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5) + version: 29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4) tsup: specifier: ^5.10.3 - version: 5.12.9(typescript@5.4.5) + version: 5.12.9(typescript@5.5.4) typescript: - specifier: 5.4.5 - version: 5.4.5 + specifier: 5.5.4 + version: 5.5.4 turborepo-tests/example-basic: dependencies: @@ -3183,7 +3183,7 @@ packages: '@types/yargs-parser': 21.0.0 dev: true - /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5): + /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3195,10 +3195,10 @@ packages: optional: true dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.5.4) '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/type-utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/type-utils': 6.18.1(eslint@8.55.0)(typescript@5.5.4) + '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.55.0 @@ -3206,13 +3206,13 @@ packages: ignore: 5.3.0 natural-compare: 1.4.0 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.18.1(eslint@8.55.0)(typescript@5.4.5): + /@typescript-eslint/parser@6.18.1(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3224,11 +3224,11 @@ packages: dependencies: '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.5.4) '@typescript-eslint/visitor-keys': 6.18.1 debug: 4.3.4 eslint: 8.55.0 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3249,7 +3249,7 @@ packages: '@typescript-eslint/visitor-keys': 6.18.1 dev: true - /@typescript-eslint/type-utils@6.18.1(eslint@8.55.0)(typescript@5.4.5): + /@typescript-eslint/type-utils@6.18.1(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3259,12 +3259,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) - '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.5.4) + '@typescript-eslint/utils': 6.18.1(eslint@8.55.0)(typescript@5.5.4) debug: 4.3.4 eslint: 8.55.0 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true @@ -3279,7 +3279,7 @@ packages: engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.4.5): + /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3294,13 +3294,13 @@ packages: globby: 11.1.0 is-glob: 4.0.3 semver: 7.5.4 - tsutils: 3.21.0(typescript@5.4.5) - typescript: 5.4.5 + tsutils: 3.21.0(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@6.18.1(typescript@5.4.5): + /@typescript-eslint/typescript-estree@6.18.1(typescript@5.5.4): resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3316,13 +3316,13 @@ packages: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.5.4 - ts-api-utils: 1.0.2(typescript@5.4.5) - typescript: 5.4.5 + ts-api-utils: 1.0.2(typescript@5.5.4) + typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.4.5): + /@typescript-eslint/utils@5.62.0(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -3333,7 +3333,7 @@ packages: '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.55.0 eslint-scope: 5.1.1 semver: 7.5.4 @@ -3342,7 +3342,7 @@ packages: - typescript dev: true - /@typescript-eslint/utils@6.18.1(eslint@8.55.0)(typescript@5.4.5): + /@typescript-eslint/utils@6.18.1(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: @@ -3353,7 +3353,7 @@ packages: '@types/semver': 7.5.1 '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.4.5) + '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.5.4) eslint: 8.55.0 semver: 7.5.4 transitivePeerDependencies: @@ -3395,7 +3395,7 @@ packages: hasBin: true dev: true - /@vercel/style-guide@5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.4.5): + /@vercel/style-guide@5.1.0(eslint@8.55.0)(prettier@2.8.7)(typescript@5.5.4): resolution: {integrity: sha512-L9lWYePIycm7vIOjDLj+mmMdmmPkW3/brHjgq+nJdvMOrL7Hdk/19w8X583HYSk0vWsq494o5Qkh6x5+uW7ljg==} engines: {node: '>=16'} peerDependencies: @@ -3416,25 +3416,25 @@ packages: '@babel/core': 7.23.6 '@babel/eslint-parser': 7.22.11(@babel/core@7.23.6)(eslint@8.55.0) '@rushstack/eslint-patch': 1.3.3 - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.5.4) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.5.4) eslint: 8.55.0 eslint-config-prettier: 9.0.0(eslint@8.55.0) eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.28.1) eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.18.1)(eslint-plugin-import@2.28.1)(eslint@8.55.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.55.0) eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-typescript@3.6.0)(eslint@8.55.0) - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.7.1(eslint@8.55.0) eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.2.3)(eslint@8.55.0) eslint-plugin-react: 7.33.2(eslint@8.55.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) - eslint-plugin-testing-library: 6.0.1(eslint@8.55.0)(typescript@5.4.5) + eslint-plugin-testing-library: 6.0.1(eslint@8.55.0)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.55.0) prettier: 2.8.7 prettier-plugin-packagejson: 2.4.5(prettier@2.8.7) - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node - eslint-import-resolver-webpack @@ -5676,7 +5676,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.5.4) debug: 3.2.7 eslint: 8.55.0 eslint-import-resolver-node: 0.3.9 @@ -5706,7 +5706,7 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/parser': 6.18.1(eslint@8.55.0)(typescript@5.5.4) array-includes: 3.1.6 array.prototype.findlastindex: 1.2.2 array.prototype.flat: 1.3.1 @@ -5731,7 +5731,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5): + /eslint-plugin-jest@27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-sRLlSCpICzWuje66Gl9zvdF6mwD5X86I4u55hJyFBsxYOsBCmT5+kSUjf+fkFWVMMgpzNEupjW8WzUqi83hJAQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -5744,8 +5744,8 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.4.5) - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.55.0)(typescript@5.5.4) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.5.4) eslint: 8.55.0 transitivePeerDependencies: - supports-color @@ -5787,7 +5787,7 @@ packages: optional: true dependencies: eslint: 8.55.0 - eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.4.5) + eslint-plugin-jest: 27.2.3(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.55.0)(typescript@5.5.4) dev: true /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): @@ -5824,13 +5824,13 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@6.0.1(eslint@8.55.0)(typescript@5.4.5): + /eslint-plugin-testing-library@6.0.1(eslint@8.55.0)(typescript@5.5.4): resolution: {integrity: sha512-CEYtjpcF3hAaQtYsTZqciR7s5z+T0LCMTwJeW+pz6kBnGtc866wAKmhaiK2Gsjc2jWNP7Gt6zhNr2DE1ZW4e+g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.4.5) + '@typescript-eslint/utils': 5.62.0(eslint@8.55.0)(typescript@5.5.4) eslint: 8.55.0 transitivePeerDependencies: - supports-color @@ -7742,7 +7742,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -7783,7 +7783,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.5.4) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -9615,7 +9615,7 @@ packages: optional: true dependencies: lilconfig: 2.0.6 - ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.4.5) + ts-node: 10.9.2(@types/node@18.17.4)(typescript@5.5.4) yaml: 1.10.2 dev: true @@ -10870,20 +10870,20 @@ packages: resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} dev: false - /ts-api-utils@1.0.2(typescript@5.4.5): + /ts-api-utils@1.0.2(typescript@5.5.4): resolution: {integrity: sha512-Cbu4nIqnEdd+THNEsBdkolnOXhg0I8XteoHaEKgvsxpsbWda4IsUut2c187HxywQCvveojow0Dgw/amxtSKVkQ==} engines: {node: '>=16.13.0'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.4.5 + typescript: 5.5.4 dev: true /ts-interface-checker@0.1.13: resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} dev: true - /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.14.49)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -10918,11 +10918,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: true - /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.15.6)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -10957,11 +10957,11 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: true - /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.4.5): + /ts-jest@29.2.5(@babel/core@7.25.2)(esbuild@0.17.18)(jest@29.7.0)(typescript@5.5.4): resolution: {integrity: sha512-KD8zB2aAZrcKIdGk4OwpJggeLcH1FgrICqDSROWqlnJXGCXK4Mn6FcdK2B6670Xr73lHMG1kHw8R87A0ecZ+vA==} engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} hasBin: true @@ -10996,7 +10996,7 @@ packages: lodash.memoize: 4.1.2 make-error: 1.3.6 semver: 7.6.3 - typescript: 5.4.5 + typescript: 5.5.4 yargs-parser: 21.1.1 dev: true @@ -11012,10 +11012,10 @@ packages: normalize-path: 3.0.0 safe-stable-stringify: 2.4.3 tslib: 2.6.3 - typescript: 5.4.5 + typescript: 5.5.4 dev: true - /ts-node@10.9.2(@types/node@18.17.4)(typescript@5.4.5): + /ts-node@10.9.2(@types/node@18.17.4)(typescript@5.5.4): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -11041,7 +11041,7 @@ packages: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.4.5 + typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -11064,7 +11064,7 @@ packages: /tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} - /tsup@5.12.9(typescript@5.4.5): + /tsup@5.12.9(typescript@5.5.4): resolution: {integrity: sha512-dUpuouWZYe40lLufo64qEhDpIDsWhRbr2expv5dHEMjwqeKJS2aXA/FPqs1dxO4T6mBojo7rvo3jP9NNzaKyDg==} hasBin: true peerDependencies: @@ -11093,13 +11093,13 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.24.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsup@6.7.0(ts-node@10.9.2)(typescript@5.4.5): + /tsup@6.7.0(ts-node@10.9.2)(typescript@5.5.4): resolution: {integrity: sha512-L3o8hGkaHnu5TdJns+mCqFsDBo83bJ44rlK7e6VdanIvpea4ArPcU3swWGsLVbXak1PqQx/V+SSmFPujBK+zEQ==} engines: {node: '>=14.18'} hasBin: true @@ -11129,20 +11129,20 @@ packages: source-map: 0.8.0-beta.0 sucrase: 3.24.0 tree-kill: 1.2.2 - typescript: 5.4.5 + typescript: 5.5.4 transitivePeerDependencies: - supports-color - ts-node dev: true - /tsutils@3.21.0(typescript@5.4.5): + /tsutils@3.21.0(typescript@5.5.4): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} peerDependencies: typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' dependencies: tslib: 1.14.1 - typescript: 5.4.5 + typescript: 5.5.4 dev: true /tsx@4.19.1: @@ -11235,8 +11235,8 @@ packages: is-typed-array: 1.1.12 dev: true - /typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + /typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} hasBin: true From 10f294bd6de9e82ab7b45996d0abb6b3df7e602a Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 29 Oct 2024 12:16:12 -0400 Subject: [PATCH 120/218] feat(query): reverse tracing (#9319) ### Description Implements an MVP of reverse tracing. Basically goes through all the JavaScript/TypeScript files in the repo, checks which ones import the reverse traced file, and returns those. Does this concurrently with a `JoinSet`. Also adds code to detect if a tsconfig is in scope for a file and if so, add it to the resolver. That way custom aliases work. ### Testing Instructions Added some tests including a monorepo setup with tsconfigs in the packages that define aliases --- Cargo.lock | 12 +- crates/turbo-trace/Cargo.toml | 7 +- crates/turbo-trace/src/main.rs | 18 +- crates/turbo-trace/src/tracer.rs | 330 +++++++++++++----- crates/turborepo-lib/src/cli/mod.rs | 9 + crates/turborepo-lib/src/query/file.rs | 60 ++-- crates/turborepo-lib/src/query/mod.rs | 2 +- crates/turborepo/tests/common/mod.rs | 1 + crates/turborepo/tests/query.rs | 36 +- ...ton.tsx`_with_dependents_(npm@10.5.0).snap | 23 ++ ...id.ts`_with_dependencies_(npm@10.5.0).snap | 2 +- ...ix.ts`_with_dependencies_(npm@10.5.0).snap | 23 ++ ...ex.ts`_with_dependencies_(npm@10.5.0).snap | 32 ++ ...ndex.js`_with_dependents_(npm@10.5.0).snap | 26 ++ ...ndex.ts`_with_dependents_(npm@10.5.0).snap | 26 ++ ...__index`_with_dependents_(npm@10.5.0).snap | 26 ++ .../fixtures/turbo_trace/tsconfig.json | 9 + .../fixtures/turbo_trace/with_prefix.ts | 1 + .../fixtures/turbo_trace_monorepo/.gitignore | 3 + .../apps/my-app/.env.local | 0 .../turbo_trace_monorepo/apps/my-app/index.ts | 4 + .../apps/my-app/package.json | 10 + .../apps/my-app/tsconfig.json | 9 + .../turbo_trace_monorepo/apps/my-app/types.ts | 5 + .../turbo_trace_monorepo/package.json | 11 + .../packages/another/index.js | 3 + .../packages/another/package.json | 9 + .../packages/utils/index.ts | 2 + .../packages/utils/my-hook.ts | 3 + .../packages/utils/package.json | 12 + .../fixtures/turbo_trace_monorepo/turbo.json | 1 + .../integration/tests/turbo-trace.t | 2 +- 32 files changed, 600 insertions(+), 117 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`with_prefix.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/tsconfig.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/with_prefix.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/.gitignore create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/.env.local create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/tsconfig.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/package.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/package.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/index.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/my-hook.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/package.json create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/turbo.json diff --git a/Cargo.lock b/Cargo.lock index ae5ea50a5fe37..f771fb4b19314 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -718,7 +718,7 @@ dependencies = [ "biome_text_size", "bitflags 2.5.0", "bpaf", - "oxc_resolver 1.11.0", + "oxc_resolver 1.12.0", "serde", "termcolor", "unicode-width", @@ -3580,9 +3580,9 @@ checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" [[package]] name = "oxc_resolver" -version = "1.11.0" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7fe4d07afdfcf6b1d7fb952e6691d82692a54b71964a377cf49f3e47dac283d" +checksum = "6c20bb345f290c46058ba650fef7ca2b579612cf2786b927ebad7b8bec0845a7" dependencies = [ "cfg-if", "dashmap 6.1.0", @@ -5179,6 +5179,7 @@ dependencies = [ "new_debug_unreachable", "num-bigint", "once_cell", + "parking_lot", "rustc-hash 1.1.0", "serde", "siphasher", @@ -6066,6 +6067,8 @@ version = "0.1.0" dependencies = [ "camino", "clap", + "futures", + "globwalk", "miette", "oxc_resolver 2.0.0", "swc_common", @@ -6073,6 +6076,9 @@ dependencies = [ "swc_ecma_parser", "swc_ecma_visit", "thiserror", + "tokio", + "tracing", + "tracing-subscriber", "turbopath", ] diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml index 80526b52ca1b2..99f7fd50c3357 100644 --- a/crates/turbo-trace/Cargo.toml +++ b/crates/turbo-trace/Cargo.toml @@ -7,13 +7,18 @@ license = "MIT" [dependencies] camino.workspace = true clap = { version = "4.5.17", features = ["derive"] } +futures = { workspace = true } +globwalk = { version = "0.1.0", path = "../turborepo-globwalk" } miette = { workspace = true, features = ["fancy"] } oxc_resolver = { version = "2.0.0" } -swc_common = { workspace = true } +swc_common = { workspace = true, features = ["concurrent"] } swc_ecma_ast = { workspace = true } swc_ecma_parser = { workspace = true } swc_ecma_visit = { workspace = true } thiserror = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } turbopath = { workspace = true } [lints] diff --git a/crates/turbo-trace/src/main.rs b/crates/turbo-trace/src/main.rs index f9b13a344a5c8..c1b97c6f86cdf 100644 --- a/crates/turbo-trace/src/main.rs +++ b/crates/turbo-trace/src/main.rs @@ -3,6 +3,7 @@ mod tracer; use camino::Utf8PathBuf; use clap::Parser; +use miette::Report; use tracer::Tracer; use turbopath::{AbsoluteSystemPathBuf, PathError}; @@ -12,12 +13,17 @@ struct Args { cwd: Option, #[clap(long)] ts_config: Option, + #[clap(long)] + node_modules: Option, files: Vec, #[clap(long)] depth: Option, + reverse: bool, } -fn main() -> Result<(), PathError> { +#[tokio::main] +async fn main() -> Result<(), PathError> { + tracing_subscriber::fmt::init(); let args = Args::parse(); let abs_cwd = if let Some(cwd) = args.cwd { @@ -34,11 +40,15 @@ fn main() -> Result<(), PathError> { let tracer = Tracer::new(abs_cwd, files, args.ts_config); - let result = tracer.trace(args.depth); + let result = if args.reverse { + tracer.reverse_trace().await + } else { + tracer.trace(args.depth).await + }; if !result.errors.is_empty() { - for error in &result.errors { - eprintln!("error: {}", error); + for error in result.errors { + println!("{:?}", Report::new(error)) } std::process::exit(1); } else { diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index e1b0e2cbaa39d..cd0521280cffe 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -1,6 +1,7 @@ -use std::{collections::HashMap, fs, rc::Rc}; +use std::{collections::HashMap, sync::Arc}; use camino::Utf8PathBuf; +use globwalk::WalkType; use miette::{Diagnostic, NamedSource, SourceSpan}; use oxc_resolver::{ EnforceExtension, ResolveError, ResolveOptions, Resolver, TsconfigOptions, TsconfigReferences, @@ -10,11 +11,13 @@ use swc_ecma_ast::EsVersion; use swc_ecma_parser::{lexer::Lexer, Capturing, EsSyntax, Parser, Syntax, TsSyntax}; use swc_ecma_visit::VisitWith; use thiserror::Error; -use turbopath::{AbsoluteSystemPathBuf, PathError}; +use tokio::task::JoinSet; +use tracing::debug; +use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, PathError}; use crate::import_finder::ImportFinder; -#[derive(Default)] +#[derive(Debug, Default)] pub struct SeenFile { pub ast: Option, } @@ -22,24 +25,31 @@ pub struct SeenFile { pub struct Tracer { files: Vec<(AbsoluteSystemPathBuf, usize)>, ts_config: Option, - source_map: Rc, + source_map: Arc, + cwd: AbsoluteSystemPathBuf, + errors: Vec, } #[derive(Debug, Error, Diagnostic)] pub enum TraceError { + #[error("failed to parse file: {:?}", .0)] + ParseError(swc_ecma_parser::error::Error), #[error("failed to read file: {0}")] FileNotFound(AbsoluteSystemPathBuf), #[error(transparent)] PathEncoding(PathError), #[error("tracing a root file `{0}`, no parent found")] RootFile(AbsoluteSystemPathBuf), - #[error("failed to resolve import")] + #[error("failed to resolve import to `{path}`")] Resolve { + path: String, #[label("import here")] span: SourceSpan, #[source_code] text: NamedSource, }, + #[error("failed to walk files")] + GlobError(#[from] globwalk::WalkError), } pub struct TraceResult { @@ -61,11 +71,163 @@ impl Tracer { Self { files, ts_config, - source_map: Rc::new(SourceMap::default()), + cwd, + errors: Vec::new(), + source_map: Arc::new(SourceMap::default()), } } - pub fn trace(mut self, max_depth: Option) -> TraceResult { + #[tracing::instrument(skip(resolver, source_map))] + pub async fn get_imports_from_file( + source_map: &SourceMap, + errors: &mut Vec, + resolver: &Resolver, + file_path: &AbsoluteSystemPath, + ) -> Option<(Vec, SeenFile)> { + // Read the file content + let Ok(file_content) = tokio::fs::read_to_string(&file_path).await else { + errors.push(TraceError::FileNotFound(file_path.to_owned())); + return None; + }; + + let comments = SingleThreadedComments::default(); + + let source_file = source_map.new_source_file( + FileName::Custom(file_path.to_string()).into(), + file_content.clone(), + ); + + let syntax = if file_path.extension() == Some("ts") || file_path.extension() == Some("tsx") + { + Syntax::Typescript(TsSyntax { + tsx: file_path.extension() == Some("tsx"), + decorators: true, + ..Default::default() + }) + } else { + Syntax::Es(EsSyntax { + jsx: file_path.extension() == Some("jsx"), + ..Default::default() + }) + }; + + let lexer = Lexer::new( + syntax, + EsVersion::EsNext, + StringInput::from(&*source_file), + Some(&comments), + ); + + let mut parser = Parser::new_from(Capturing::new(lexer)); + + // Parse the file as a module + let module = match parser.parse_module() { + Ok(module) => module, + Err(err) => { + errors.push(TraceError::ParseError(err)); + return None; + } + }; + + // Visit the AST and find imports + let mut finder = ImportFinder::default(); + module.visit_with(&mut finder); + // Convert found imports/requires to absolute paths and add them to files to + // visit + let mut files = Vec::new(); + for (import, span) in finder.imports() { + debug!("processing {} in {}", import, file_path); + let Some(file_dir) = file_path.parent() else { + errors.push(TraceError::RootFile(file_path.to_owned())); + continue; + }; + match resolver.resolve(file_dir, import) { + Ok(resolved) => { + debug!("resolved {:?}", resolved); + match resolved.into_path_buf().try_into() { + Ok(path) => files.push(path), + Err(err) => { + errors.push(TraceError::PathEncoding(err)); + continue; + } + } + } + Err(err @ ResolveError::Builtin { .. }) => { + debug!("built in: {:?}", err); + } + Err(err) => { + debug!("failed to resolve: {:?}", err); + let (start, end) = source_map.span_to_char_offset(&source_file, *span); + + errors.push(TraceError::Resolve { + path: import.to_string(), + span: (start as usize, end as usize).into(), + text: NamedSource::new(file_path.to_string(), file_content.clone()), + }); + continue; + } + } + } + + Some((files, SeenFile { ast: Some(module) })) + } + + pub async fn trace_file( + &mut self, + resolver: &Resolver, + file_path: AbsoluteSystemPathBuf, + depth: usize, + seen: &mut HashMap, + ) { + let file_resolver = Self::infer_resolver_with_ts_config(&file_path, resolver); + + if matches!(file_path.extension(), Some("css") | Some("json")) { + return; + } + if seen.contains_key(&file_path) { + return; + } + + let entry = seen.entry(file_path.clone()).or_default(); + + let Some((imports, seen_file)) = Self::get_imports_from_file( + &self.source_map, + &mut self.errors, + file_resolver.as_ref().unwrap_or(resolver), + &file_path, + ) + .await + else { + return; + }; + + *entry = seen_file; + + self.files + .extend(imports.into_iter().map(|import| (import, depth + 1))); + } + + /// Attempts to find the closest tsconfig and creates a resolver with it, + /// so alias resolution, e.g. `@/foo/bar`, works. + fn infer_resolver_with_ts_config( + root: &AbsoluteSystemPath, + existing_resolver: &Resolver, + ) -> Option { + root.ancestors() + .skip(1) + .find(|p| p.join_component("tsconfig.json").exists()) + .map(|ts_config| { + let mut options = existing_resolver.options().clone(); + options.tsconfig = Some(TsconfigOptions { + config_file: ts_config.as_std_path().into(), + references: TsconfigReferences::Auto, + }); + + existing_resolver.clone_with_options(options) + }) + } + + pub fn create_resolver(&mut self) -> Resolver { let mut options = ResolveOptions::default() .with_builtin_modules(true) .with_force_extension(EnforceExtension::Disabled) @@ -79,104 +241,104 @@ impl Tracer { }); } - let resolver = Resolver::new(options); - let mut errors = vec![]; + Resolver::new(options) + } + + pub async fn trace(mut self, max_depth: Option) -> TraceResult { let mut seen: HashMap = HashMap::new(); + let resolver = self.create_resolver(); while let Some((file_path, file_depth)) = self.files.pop() { - if matches!(file_path.extension(), Some("json") | Some("css")) { - continue; - } - - if seen.contains_key(&file_path) { - continue; - } - if let Some(max_depth) = max_depth { if file_depth > max_depth { continue; } } + self.trace_file(&resolver, file_path, file_depth, &mut seen) + .await; + } - let entry = seen.entry(file_path.clone()).or_default(); - - // Read the file content - let Ok(file_content) = fs::read_to_string(&file_path) else { - errors.push(TraceError::FileNotFound(file_path.clone())); - continue; - }; - - let comments = SingleThreadedComments::default(); - - let source_file = self.source_map.new_source_file( - FileName::Custom(file_path.to_string()).into(), - file_content.clone(), - ); - - let syntax = - if file_path.extension() == Some("ts") || file_path.extension() == Some("tsx") { - Syntax::Typescript(TsSyntax { - tsx: file_path.extension() == Some("tsx"), - decorators: true, - ..Default::default() - }) - } else { - Syntax::Es(EsSyntax { - jsx: file_path.ends_with(".jsx"), - ..Default::default() - }) - }; - - let lexer = Lexer::new( - syntax, - EsVersion::EsNext, - StringInput::from(&*source_file), - Some(&comments), - ); + TraceResult { + files: seen, + errors: self.errors, + } + } - let mut parser = Parser::new_from(Capturing::new(lexer)); + pub async fn reverse_trace(mut self) -> TraceResult { + let files = match globwalk::globwalk( + &self.cwd, + &[ + "**/*.js".parse().expect("valid glob"), + "**/*.jsx".parse().expect("valid glob"), + "**/*.ts".parse().expect("valid glob"), + "**/*.tsx".parse().expect("valid glob"), + ], + &[ + "**/node_modules/**".parse().expect("valid glob"), + "**/.next/**".parse().expect("valid glob"), + ], + WalkType::Files, + ) { + Ok(files) => files, + Err(e) => { + return TraceResult { + files: HashMap::new(), + errors: vec![e.into()], + } + } + }; - // Parse the file as a module - let Ok(module) = parser.parse_module() else { - errors.push(TraceError::FileNotFound(file_path.to_owned())); - continue; - }; + let mut futures = JoinSet::new(); - // Visit the AST and find imports - let mut finder = ImportFinder::default(); - module.visit_with(&mut finder); + let resolver = Arc::new(self.create_resolver()); + let shared_self = Arc::new(self); - entry.ast = Some(module); + for file in files { + let shared_self = shared_self.clone(); + let resolver = resolver.clone(); + futures.spawn(async move { + let file_resolver = Self::infer_resolver_with_ts_config(&file, &resolver); + let mut errors = Vec::new(); - // Convert found imports/requires to absolute paths and add them to files to - // visit - for (import, span) in finder.imports() { - let Some(file_dir) = file_path.parent() else { - errors.push(TraceError::RootFile(file_path.to_owned())); - continue; + let Some((imported_files, seen_file)) = Self::get_imports_from_file( + &shared_self.source_map, + &mut errors, + file_resolver.as_ref().unwrap_or(&resolver), + &file, + ) + .await + else { + return (errors, None); }; - match resolver.resolve(file_dir, import) { - Ok(resolved) => match resolved.into_path_buf().try_into() { - Ok(path) => self.files.push((path, file_depth + 1)), - Err(err) => { - errors.push(TraceError::PathEncoding(err)); - } - }, - Err(ResolveError::Builtin { .. }) => {} - Err(_) => { - let (start, end) = self.source_map.span_to_char_offset(&source_file, *span); - - errors.push(TraceError::Resolve { - span: (start as usize, end as usize).into(), - text: NamedSource::new(file_path.to_string(), file_content.clone()), - }); + + for import in imported_files { + if shared_self + .files + .iter() + .any(|(source, _)| import.as_path() == source.as_path()) + { + return (errors, Some((file, seen_file))); } } + + (errors, None) + }); + } + + let mut usages = HashMap::new(); + let mut errors = Vec::new(); + + while let Some(result) = futures.join_next().await { + let (errs, file) = result.unwrap(); + errors.extend(errs); + + if let Some((path, seen_file)) = file { + usages.insert(path, seen_file); } } TraceResult { - files: seen, + files: usages, errors, } } diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 318bf6759a4dd..136cfa7154d0d 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -1148,6 +1148,15 @@ pub async fn run( AbsoluteSystemPathBuf::cwd()? }; + // Windows has this annoying habit of abbreviating paths + // like `C:\Users\Admini~1` instead of `C:\Users\Administrator` + // We canonicalize to get the proper, full length path + let repo_root = if cfg!(windows) { + repo_root.to_realpath()? + } else { + repo_root + }; + cli_args.command = Some(command); cli_args.cwd = Some(repo_root.as_path().to_owned()); diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 8c3e8ac14d2e6..5fdd280e6a312 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -20,12 +20,15 @@ pub struct File { } impl File { - pub fn new(run: Arc, path: AbsoluteSystemPathBuf) -> Self { - Self { + pub fn new(run: Arc, path: AbsoluteSystemPathBuf) -> Result { + #[cfg(windows)] + let path = path.to_realpath()?; + + Ok(Self { run, path, ast: None, - } + }) } pub fn with_ast(mut self, ast: Option) -> Self { @@ -96,7 +99,15 @@ impl From for TraceError { path: Some(path.to_string()), ..Default::default() }, - turbo_trace::TraceError::Resolve { span, text } => { + turbo_trace::TraceError::ParseError(e) => TraceError { + message: format!("failed to parse file: {:?}", e), + ..Default::default() + }, + turbo_trace::TraceError::GlobError(err) => TraceError { + message: format!("failed to glob files: {}", err), + ..Default::default() + }, + turbo_trace::TraceError::Resolve { span, text, .. } => { let import = text .inner() .read_span(&span, 1, 1) @@ -122,16 +133,16 @@ struct TraceResult { } impl TraceResult { - fn new(result: turbo_trace::TraceResult, run: Arc) -> Self { - Self { + fn new(result: turbo_trace::TraceResult, run: Arc) -> Result { + Ok(Self { files: result .files .into_iter() .sorted_by(|a, b| a.0.cmp(&b.0)) - .map(|(path, file)| File::new(run.clone(), path).with_ast(file.ast)) - .collect(), + .map(|(path, file)| Ok(File::new(run.clone(), path)?.with_ast(file.ast))) + .collect::>()?, errors: result.errors.into_iter().map(|e| e.into()).collect(), - } + }) } } @@ -154,24 +165,31 @@ impl File { Ok(self.path.to_string()) } - async fn dependencies(&self, depth: Option, ts_config: Option) -> TraceResult { - let ts_config = match ts_config { - Some(ts_config) => Some(Utf8PathBuf::from(ts_config)), - None => self - .path - .ancestors() - .skip(1) - .find(|p| p.join_component("tsconfig.json").exists()) - .map(|p| p.as_path().to_owned()), - }; + async fn dependencies( + &self, + depth: Option, + ts_config: Option, + ) -> Result { + let tracer = Tracer::new( + self.run.repo_root().to_owned(), + vec![self.path.clone()], + ts_config.map(Utf8PathBuf::from), + ); + + let mut result = tracer.trace(depth).await; + // Remove the file itself from the result + result.files.remove(&self.path); + TraceResult::new(result, self.run.clone()) + } + async fn dependents(&self, ts_config: Option) -> Result { let tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], - ts_config, + ts_config.map(Utf8PathBuf::from), ); - let mut result = tracer.trace(depth); + let mut result = tracer.reverse_trace().await; // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index f6add1f4dd7ef..b2dd00ce63f00 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -530,7 +530,7 @@ impl RepositoryQuery { return Err(Error::FileNotFound(abs_path.to_string())); } - Ok(File::new(self.run.clone(), abs_path)) + File::new(self.run.clone(), abs_path) } /// Gets a list of packages that match the given filter diff --git a/crates/turborepo/tests/common/mod.rs b/crates/turborepo/tests/common/mod.rs index d362457a81d9b..c8dc504d2ea39 100644 --- a/crates/turborepo/tests/common/mod.rs +++ b/crates/turborepo/tests/common/mod.rs @@ -48,6 +48,7 @@ macro_rules! check_json { let tempdir = tempfile::tempdir()?; crate::common::setup_fixture($fixture, $package_manager, tempdir.path())?; $( + println!("Running command: `turbo {} {}` in {}", $command, $query, $fixture); let output = assert_cmd::Command::cargo_bin("turbo")? .arg($command) .arg($query) diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index b6767a60c5b2c..18308f173a9f5 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -21,7 +21,7 @@ fn test_double_symlink() -> Result<(), anyhow::Error> { } #[test] -fn test_trace() -> Result<(), anyhow::Error> { +fn test_ast() -> Result<(), anyhow::Error> { // Separate because the `\\` -> `/` filter isn't compatible with ast check_json!( "turbo_trace", @@ -30,6 +30,11 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `main.ts` with ast" => "query { file(path: \"main.ts\") { path ast } }", ); + Ok(()) +} + +#[test] +fn test_trace() -> Result<(), anyhow::Error> { insta::with_settings!({ filters => vec![(r"\\\\", "/")]}, { check_json!( "turbo_trace", @@ -41,8 +46,37 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `circular.ts` with dependencies" => "query { file(path: \"circular.ts\") { path dependencies { files { items { path } } } } }", "get `invalid.ts` with dependencies" => "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", "get `main.ts` with depth = 0" => "query { file(path: \"main.ts\") { path dependencies(depth: 1) { files { items { path } } } } }", + "get `with_prefix.ts` with dependencies" => "query { file(path: \"with_prefix.ts\") { path dependencies { files { items { path } } } } }", ); Ok(()) }) } + +#[test] +fn test_trace_on_monorepo() -> Result<(), anyhow::Error> { + insta::with_settings!({ filters => vec![(r"\\\\", "/")]}, { + check_json!( + "turbo_trace_monorepo", + "npm@10.5.0", + "query", + "get `apps/my-app/index.ts` with dependencies" => "query { file(path: \"apps/my-app/index.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", + "get `packages/utils/index.ts` with dependents" => "query { file(path: \"packages/utils/index.ts\") { path dependents { files { items { path } } errors { items { message } } } } }", + "get `packages/another/index.js` with dependents" => "query { file(path: \"packages/another/index.js\") { path dependents { files { items { path } } errors { items { message } } } } }", + ); + + Ok(()) + }) +} + +#[test] +fn test_reverse_trace() -> Result<(), anyhow::Error> { + check_json!( + "turbo_trace", + "npm@10.5.0", + "query", + "get `button.tsx` with dependents" => "query { file(path: \"button.tsx\") { path dependents { files { items { path } } } } }", + ); + + Ok(()) +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..e49db2b924ed6 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependents_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "button.tsx", + "dependents": { + "files": { + "items": [ + { + "path": "invalid.ts" + }, + { + "path": "main.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap index 8354df28773f7..55436189c5f86 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap @@ -17,7 +17,7 @@ expression: query_output "errors": { "items": [ { - "message": "failed to resolve import" + "message": "failed to resolve import to `./non-existent-file.js`" } ] } diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`with_prefix.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`with_prefix.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..062887b12ac53 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`with_prefix.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "with_prefix.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "bar.js" + }, + { + "path": "foo.js" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..62bfdc21cbe16 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,32 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "apps/my-app/index.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "apps/my-app/types.ts" + }, + { + "path": "packages/another/index.js" + }, + { + "path": "packages/utils/index.ts" + }, + { + "path": "packages/utils/my-hook.ts" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..d5fb69de4071c --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "packages/another/index.js", + "dependents": { + "files": { + "items": [ + { + "path": "apps/my-app/index.ts" + }, + { + "path": "apps/my-app/types.ts" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..4e6e7ed0e3329 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "packages/utils/index.ts", + "dependents": { + "files": { + "items": [ + { + "path": "apps/my-app/index.ts" + }, + { + "path": "packages/another/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..4e6e7ed0e3329 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "packages/utils/index.ts", + "dependents": { + "files": { + "items": [ + { + "path": "apps/my-app/index.ts" + }, + { + "path": "packages/another/index.js" + } + ] + }, + "errors": { + "items": [] + } + } + } + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/tsconfig.json b/turborepo-tests/integration/fixtures/turbo_trace/tsconfig.json new file mode 100644 index 0000000000000..51d884f8a82d0 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "paths": { + "@*": [ + ".*" + ] + } + } +} \ No newline at end of file diff --git a/turborepo-tests/integration/fixtures/turbo_trace/with_prefix.ts b/turborepo-tests/integration/fixtures/turbo_trace/with_prefix.ts new file mode 100644 index 0000000000000..b5668f3729691 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/with_prefix.ts @@ -0,0 +1 @@ +import foo from "@/foo"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/.gitignore b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/.gitignore new file mode 100644 index 0000000000000..77af9fc60321d --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/.gitignore @@ -0,0 +1,3 @@ +node_modules/ +.turbo +.npmrc diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/.env.local b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/.env.local new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts new file mode 100644 index 0000000000000..2b6c3821b3f30 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts @@ -0,0 +1,4 @@ +import { useMyHook } from "utils/my-hook"; +import ship from "utils"; +import { blackbeard } from "../../packages/another/index.js"; +import { Pirate } from "@/types.ts"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json new file mode 100644 index 0000000000000..cf17ebf161c4a --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json @@ -0,0 +1,10 @@ +{ + "name": "my-app", + "scripts": { + "build": "echo building", + "maybefails": "exit 4" + }, + "dependencies": { + "utils": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/tsconfig.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/tsconfig.json new file mode 100644 index 0000000000000..c199498e2ce9f --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/tsconfig.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "paths": { + "@/*": [ + "./*" + ] + } + } +} \ No newline at end of file diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts new file mode 100644 index 0000000000000..b20bb0af42f65 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts @@ -0,0 +1,5 @@ +import { blackbeard } from "@/../../packages/another/index.js"; + +export interface Pirate { + ship: string; +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/package.json new file mode 100644 index 0000000000000..83e4fa43c6849 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/package.json @@ -0,0 +1,11 @@ +{ + "name": "monorepo", + "scripts": { + "something": "turbo run build" + }, + "packageManager": "npm@10.5.0", + "workspaces": [ + "apps/**", + "packages/**" + ] +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js new file mode 100644 index 0000000000000..94639c6347160 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js @@ -0,0 +1,3 @@ +import ship from "utils"; + +export const blackbeard = "Edward Teach on " + ship; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/package.json new file mode 100644 index 0000000000000..bb796c8455b16 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/package.json @@ -0,0 +1,9 @@ +{ + "name": "another", + "scripts": { + "dev": "echo building" + }, + "dependencies": { + "utils": "*" + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/index.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/index.ts new file mode 100644 index 0000000000000..5475301176b3b --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/index.ts @@ -0,0 +1,2 @@ +const ship = "The Queen Anne's Revenge"; +export default ship; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/my-hook.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/my-hook.ts new file mode 100644 index 0000000000000..dad43626ffbc4 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/my-hook.ts @@ -0,0 +1,3 @@ +export const useMyHook = () => { + console.log("arrrr matey"); +}; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/package.json new file mode 100644 index 0000000000000..2184abb4f4989 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/utils/package.json @@ -0,0 +1,12 @@ +{ + "name": "utils", + "scripts": { + "build": "echo building", + "maybefails": "echo didnotfail" + }, + "main": "index.ts", + "exports": { + ".": "./index.ts", + "./my-hook": "./my-hook.ts" + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/turbo.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/turbo.json new file mode 100644 index 0000000000000..9e26dfeeb6e64 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/turbo.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t index 1cced6353923b..5896b4b6b3d2c 100644 --- a/turborepo-tests/integration/tests/turbo-trace.t +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -91,7 +91,7 @@ Trace file with invalid import "errors": { "items": [ { - "message": "failed to resolve import" + "message": "failed to resolve import to `./non-existent-file.js`" } ] } From 7bf02281910c032aaad5479d236d0e32c14d4d6f Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 29 Oct 2024 14:44:41 -0400 Subject: [PATCH 121/218] feat(query): include css and json files in trace output (#9346) --- cli/turbo.json | 21 ++- crates/turbo-trace/src/tracer.rs | 7 +- ...n.tsx`_with_dependencies_(npm@10.5.0).snap | 9 +- ...id.ts`_with_dependencies_(npm@10.5.0).snap | 6 + ...e_get_`main.ts`_with_ast_(npm@10.5.0).snap | 114 +++++++-------- ...in.ts`_with_dependencies_(npm@10.5.0).snap | 6 + .../fixtures/turbo_trace/button.css | 0 .../fixtures/turbo_trace/button.json | 0 .../fixtures/turbo_trace/button.tsx | 3 + .../integration/fixtures/turbo_trace/main.ts | 2 +- .../integration/tests/turbo-trace.t | 135 ++++++++++-------- 11 files changed, 177 insertions(+), 126 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/button.css create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/button.json diff --git a/cli/turbo.json b/cli/turbo.json index 40f72bb6de27c..084392ced1b61 100644 --- a/cli/turbo.json +++ b/cli/turbo.json @@ -1,14 +1,19 @@ { "$schema": "../docs/public/schema.json", - "extends": ["//"], + "extends": [ + "//" + ], "tasks": { // A task that is used for detecting if any turborepo Rust sources change "rust-src": { - "env": ["RUNNER_OS"], + "env": [ + "RUNNER_OS" + ], "inputs": [ "../version.txt", - "../crates/turborepo*/**/*.rs", // Rust crates - "../crates/turborepo*/Cargo.toml", + "../crates/**/*.rs", + // Rust crates + "../crates/*/Cargo.toml", "../Cargo.toml", "../Cargo.lock", "!../crates/**/target" @@ -21,8 +26,12 @@ "../target/release/turbo", "../target/release/turbo.exe" ], - "dependsOn": ["rust-src"], - "passThroughEnv": ["ProgramData"] + "dependsOn": [ + "rust-src" + ], + "passThroughEnv": [ + "ProgramData" + ] } } } diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index cd0521280cffe..24db1d2baa4d8 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -181,15 +181,16 @@ impl Tracer { ) { let file_resolver = Self::infer_resolver_with_ts_config(&file_path, resolver); - if matches!(file_path.extension(), Some("css") | Some("json")) { - return; - } if seen.contains_key(&file_path) { return; } let entry = seen.entry(file_path.clone()).or_default(); + if matches!(file_path.extension(), Some("css") | Some("json")) { + return; + } + let Some((imports, seen_file)) = Self::get_imports_from_file( &self.source_map, &mut self.errors, diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap index 183e2c8e75dd7..570c87caee9d5 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap @@ -8,7 +8,14 @@ expression: query_output "path": "button.tsx", "dependencies": { "files": { - "items": [] + "items": [ + { + "path": "button.css" + }, + { + "path": "button.json" + } + ] } } } diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap index 55436189c5f86..c67ae3145901c 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap @@ -9,6 +9,12 @@ expression: query_output "dependencies": { "files": { "items": [ + { + "path": "button.css" + }, + { + "path": "button.json" + }, { "path": "button.tsx" } diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap index 863d9791335e2..886d8e1495543 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap @@ -10,14 +10,14 @@ expression: query_output "type": "Module", "span": { "start": 1, - "end": 169 + "end": 173 }, "body": [ { "type": "ImportDeclaration", "span": { "start": 1, - "end": 35 + "end": 39 }, "specifiers": [ { @@ -44,10 +44,10 @@ expression: query_output "type": "StringLiteral", "span": { "start": 24, - "end": 34 + "end": 38 }, - "value": "./button", - "raw": "\"./button\"" + "value": "./button.tsx", + "raw": "\"./button.tsx\"" }, "typeOnly": false, "with": null, @@ -56,21 +56,21 @@ expression: query_output { "type": "ImportDeclaration", "span": { - "start": 36, - "end": 60 + "start": 40, + "end": 64 }, "specifiers": [ { "type": "ImportDefaultSpecifier", "span": { - "start": 43, - "end": 46 + "start": 47, + "end": 50 }, "local": { "type": "Identifier", "span": { - "start": 43, - "end": 46 + "start": 47, + "end": 50 }, "ctxt": 0, "value": "foo", @@ -81,8 +81,8 @@ expression: query_output "source": { "type": "StringLiteral", "span": { - "start": 52, - "end": 59 + "start": 56, + "end": 63 }, "value": "./foo", "raw": "\"./foo\"" @@ -94,21 +94,21 @@ expression: query_output { "type": "ImportDeclaration", "span": { - "start": 61, - "end": 96 + "start": 65, + "end": 100 }, "specifiers": [ { "type": "ImportDefaultSpecifier", "span": { - "start": 68, - "end": 74 + "start": 72, + "end": 78 }, "local": { "type": "Identifier", "span": { - "start": 68, - "end": 74 + "start": 72, + "end": 78 }, "ctxt": 0, "value": "repeat", @@ -119,8 +119,8 @@ expression: query_output "source": { "type": "StringLiteral", "span": { - "start": 80, - "end": 95 + "start": 84, + "end": 99 }, "value": "repeat-string", "raw": "\"repeat-string\"" @@ -132,8 +132,8 @@ expression: query_output { "type": "VariableDeclaration", "span": { - "start": 98, - "end": 126 + "start": 102, + "end": 130 }, "ctxt": 0, "kind": "const", @@ -142,14 +142,14 @@ expression: query_output { "type": "VariableDeclarator", "span": { - "start": 104, - "end": 125 + "start": 108, + "end": 129 }, "id": { "type": "Identifier", "span": { - "start": 104, - "end": 110 + "start": 108, + "end": 114 }, "ctxt": 0, "value": "button", @@ -159,15 +159,15 @@ expression: query_output "init": { "type": "NewExpression", "span": { - "start": 113, - "end": 125 + "start": 117, + "end": 129 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 117, - "end": 123 + "start": 121, + "end": 127 }, "ctxt": 0, "value": "Button", @@ -183,27 +183,27 @@ expression: query_output { "type": "ExpressionStatement", "span": { - "start": 128, - "end": 144 + "start": 132, + "end": 148 }, "expression": { "type": "CallExpression", "span": { - "start": 128, - "end": 143 + "start": 132, + "end": 147 }, "ctxt": 0, "callee": { "type": "MemberExpression", "span": { - "start": 128, - "end": 141 + "start": 132, + "end": 145 }, "object": { "type": "Identifier", "span": { - "start": 128, - "end": 134 + "start": 132, + "end": 138 }, "ctxt": 0, "value": "button", @@ -212,8 +212,8 @@ expression: query_output "property": { "type": "Identifier", "span": { - "start": 135, - "end": 141 + "start": 139, + "end": 145 }, "value": "render" } @@ -225,21 +225,21 @@ expression: query_output { "type": "ExpressionStatement", "span": { - "start": 145, - "end": 162 + "start": 149, + "end": 166 }, "expression": { "type": "CallExpression", "span": { - "start": 145, - "end": 161 + "start": 149, + "end": 165 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 145, - "end": 151 + "start": 149, + "end": 155 }, "ctxt": 0, "value": "repeat", @@ -251,8 +251,8 @@ expression: query_output "expression": { "type": "StringLiteral", "span": { - "start": 152, - "end": 157 + "start": 156, + "end": 161 }, "value": "foo", "raw": "\"foo\"" @@ -263,8 +263,8 @@ expression: query_output "expression": { "type": "NumericLiteral", "span": { - "start": 159, - "end": 160 + "start": 163, + "end": 164 }, "value": 5.0, "raw": "5" @@ -277,21 +277,21 @@ expression: query_output { "type": "ExpressionStatement", "span": { - "start": 163, - "end": 169 + "start": 167, + "end": 173 }, "expression": { "type": "CallExpression", "span": { - "start": 163, - "end": 168 + "start": 167, + "end": 172 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 163, - "end": 166 + "start": 167, + "end": 170 }, "ctxt": 0, "value": "foo", diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap index d4762d093daf4..60af6161734f8 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap @@ -12,6 +12,12 @@ expression: query_output { "path": "bar.js" }, + { + "path": "button.css" + }, + { + "path": "button.json" + }, { "path": "button.tsx" }, diff --git a/turborepo-tests/integration/fixtures/turbo_trace/button.css b/turborepo-tests/integration/fixtures/turbo_trace/button.css new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/turborepo-tests/integration/fixtures/turbo_trace/button.json b/turborepo-tests/integration/fixtures/turbo_trace/button.json new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/turborepo-tests/integration/fixtures/turbo_trace/button.tsx b/turborepo-tests/integration/fixtures/turbo_trace/button.tsx index 0d23cb038dfae..eee8cacf69ee9 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace/button.tsx +++ b/turborepo-tests/integration/fixtures/turbo_trace/button.tsx @@ -1,3 +1,6 @@ +import "./button.css"; +import "./button.json"; + export const Button = ({ children }: { children: React.ReactNode }) => { return ; }; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/main.ts b/turborepo-tests/integration/fixtures/turbo_trace/main.ts index 815521f02dd8d..eb3cb80424d76 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace/main.ts +++ b/turborepo-tests/integration/fixtures/turbo_trace/main.ts @@ -1,4 +1,4 @@ -import { Button } from "./button"; +import { Button } from "./button.tsx"; import foo from "./foo"; import repeat from "repeat-string"; diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t index 5896b4b6b3d2c..56a1f13dea51d 100644 --- a/turborepo-tests/integration/tests/turbo-trace.t +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -23,6 +23,12 @@ Setup { "path": "bar.js" }, + { + "path": "button.css" + }, + { + "path": "button.json" + }, { "path": "button.tsx" }, @@ -47,7 +53,14 @@ Setup "path": "button.tsx", "dependencies": { "files": { - "items": [] + "items": [ + { + "path": "button.css" + }, + { + "path": "button.json" + } + ] } } } @@ -83,6 +96,12 @@ Trace file with invalid import "dependencies": { "files": { "items": [ + { + "path": "button.css" + }, + { + "path": "button.json" + }, { "path": "button.tsx" } @@ -111,14 +130,14 @@ Get AST from file "type": "Module", "span": { "start": 1, - "end": 169 + "end": 173 }, "body": [ { "type": "ImportDeclaration", "span": { "start": 1, - "end": 35 + "end": 39 }, "specifiers": [ { @@ -145,10 +164,10 @@ Get AST from file "type": "StringLiteral", "span": { "start": 24, - "end": 34 + "end": 38 }, - "value": "./button", - "raw": "\"./button\"" + "value": "./button.tsx", + "raw": "\"./button.tsx\"" }, "typeOnly": false, "with": null, @@ -157,21 +176,21 @@ Get AST from file { "type": "ImportDeclaration", "span": { - "start": 36, - "end": 60 + "start": 40, + "end": 64 }, "specifiers": [ { "type": "ImportDefaultSpecifier", "span": { - "start": 43, - "end": 46 + "start": 47, + "end": 50 }, "local": { "type": "Identifier", "span": { - "start": 43, - "end": 46 + "start": 47, + "end": 50 }, "ctxt": 0, "value": "foo", @@ -182,8 +201,8 @@ Get AST from file "source": { "type": "StringLiteral", "span": { - "start": 52, - "end": 59 + "start": 56, + "end": 63 }, "value": "./foo", "raw": "\"./foo\"" @@ -195,21 +214,21 @@ Get AST from file { "type": "ImportDeclaration", "span": { - "start": 61, - "end": 96 + "start": 65, + "end": 100 }, "specifiers": [ { "type": "ImportDefaultSpecifier", "span": { - "start": 68, - "end": 74 + "start": 72, + "end": 78 }, "local": { "type": "Identifier", "span": { - "start": 68, - "end": 74 + "start": 72, + "end": 78 }, "ctxt": 0, "value": "repeat", @@ -220,8 +239,8 @@ Get AST from file "source": { "type": "StringLiteral", "span": { - "start": 80, - "end": 95 + "start": 84, + "end": 99 }, "value": "repeat-string", "raw": "\"repeat-string\"" @@ -233,8 +252,8 @@ Get AST from file { "type": "VariableDeclaration", "span": { - "start": 98, - "end": 126 + "start": 102, + "end": 130 }, "ctxt": 0, "kind": "const", @@ -243,14 +262,14 @@ Get AST from file { "type": "VariableDeclarator", "span": { - "start": 104, - "end": 125 + "start": 108, + "end": 129 }, "id": { "type": "Identifier", "span": { - "start": 104, - "end": 110 + "start": 108, + "end": 114 }, "ctxt": 0, "value": "button", @@ -260,15 +279,15 @@ Get AST from file "init": { "type": "NewExpression", "span": { - "start": 113, - "end": 125 + "start": 117, + "end": 129 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 117, - "end": 123 + "start": 121, + "end": 127 }, "ctxt": 0, "value": "Button", @@ -284,27 +303,27 @@ Get AST from file { "type": "ExpressionStatement", "span": { - "start": 128, - "end": 144 + "start": 132, + "end": 148 }, "expression": { "type": "CallExpression", "span": { - "start": 128, - "end": 143 + "start": 132, + "end": 147 }, "ctxt": 0, "callee": { "type": "MemberExpression", "span": { - "start": 128, - "end": 141 + "start": 132, + "end": 145 }, "object": { "type": "Identifier", "span": { - "start": 128, - "end": 134 + "start": 132, + "end": 138 }, "ctxt": 0, "value": "button", @@ -313,8 +332,8 @@ Get AST from file "property": { "type": "Identifier", "span": { - "start": 135, - "end": 141 + "start": 139, + "end": 145 }, "value": "render" } @@ -326,21 +345,21 @@ Get AST from file { "type": "ExpressionStatement", "span": { - "start": 145, - "end": 162 + "start": 149, + "end": 166 }, "expression": { "type": "CallExpression", "span": { - "start": 145, - "end": 161 + "start": 149, + "end": 165 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 145, - "end": 151 + "start": 149, + "end": 155 }, "ctxt": 0, "value": "repeat", @@ -352,8 +371,8 @@ Get AST from file "expression": { "type": "StringLiteral", "span": { - "start": 152, - "end": 157 + "start": 156, + "end": 161 }, "value": "foo", "raw": "\"foo\"" @@ -364,8 +383,8 @@ Get AST from file "expression": { "type": "NumericLiteral", "span": { - "start": 159, - "end": 160 + "start": 163, + "end": 164 }, "value": 5.0, "raw": "5" @@ -378,21 +397,21 @@ Get AST from file { "type": "ExpressionStatement", "span": { - "start": 163, - "end": 169 + "start": 167, + "end": 173 }, "expression": { "type": "CallExpression", "span": { - "start": 163, - "end": 168 + "start": 167, + "end": 172 }, "ctxt": 0, "callee": { "type": "Identifier", "span": { - "start": 163, - "end": 166 + "start": 167, + "end": 170 }, "ctxt": 0, "value": "foo", From ba769dc14dbb556f6aace5c6c7c775ae894a2b1b Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 29 Oct 2024 15:39:29 -0400 Subject: [PATCH 122/218] feat: support task id entrypoints (#9344) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Currently if you run `turbo cli#build` you will get the following failure*: ``` Error: × could not find task `cli#build` in project ``` *It works if you had `"tasks": {"cli#build": {...}}` in your root level `turbo.json` After this PR, passing a fully qualified task id to run will now work, regardless of how the task definition is defined: - In the root `turbo.json` as `build` - In the root `turbo.json` as `cli#build` - In the `cli` workspace's `turbo.json` as `build` The usage of `#` is safe here as you already have been unable to use `#` in a unqualified task name. - If you attempt to use a `#` in a task name in a workspace level `turbo.json` you will get an error about using package task syntax in a workspace file. - If you attempt to specify a task in the root `turbo.json` of the form `foo#bar` it will be read as the `bar` task in package `foo` - If you attempt to use `foo#bar#baz` as a task name in root `turbo.json` it will work currently with `foo#bar#baz` and after this PR it will continue to work ### Testing Instructions Added unit tests! Manual verification by running `turbo cli#build`. --- Cargo.lock | 1 + crates/turborepo-lib/Cargo.toml | 1 + crates/turborepo-lib/src/engine/builder.rs | 129 +++++++++++++++++- ..._test__run_package_task_exact_error-2.snap | 5 + ...r__test__run_package_task_exact_error.snap | 5 + .../tests/workspace-configs/cross-workspace.t | 21 +++ 6 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error-2.snap create mode 100644 crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error.snap diff --git a/Cargo.lock b/Cargo.lock index f771fb4b19314..8402f1465122c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6367,6 +6367,7 @@ dependencies = [ "human_format", "humantime", "ignore", + "insta", "itertools 0.10.5", "jsonc-parser 0.21.0", "lazy_static", diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index 56816b40a639c..b7a6b4234034c 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -19,6 +19,7 @@ daemon-file-hashing = [] anyhow = { workspace = true, features = ["backtrace"] } assert_cmd = { workspace = true } async-stream = "0.3.4" +insta = { workspace = true } itertools = { workspace = true } port_scanner = { workspace = true } pretty_assertions = { workspace = true } diff --git a/crates/turborepo-lib/src/engine/builder.rs b/crates/turborepo-lib/src/engine/builder.rs index acd2dbb4efa3b..7dfe7b987c16c 100644 --- a/crates/turborepo-lib/src/engine/builder.rs +++ b/crates/turborepo-lib/src/engine/builder.rs @@ -433,8 +433,16 @@ impl<'a> EngineBuilder<'a> { }; let task_id_as_name = task_id.as_task_name(); - if turbo_json.tasks.contains_key(&task_id_as_name) + if + // See if pkg#task is defined e.g. `docs#build`. This can only happen in root turbo.json + turbo_json.tasks.contains_key(&task_id_as_name) + // See if task is defined e.g. `build`. This can happen in root or workspace turbo.json + // This will fail if the user provided a task id e.g. turbo `docs#build` || turbo_json.tasks.contains_key(task_name) + // If user provided a task id, then we see if the task is defined + // e.g. `docs#build` should resolve if there's a `build` in root turbo.json or docs workspace level turbo.json + || (matches!(workspace, PackageName::Root) && turbo_json.tasks.contains_key(&TaskName::from(task_name.task()))) + || (workspace == &PackageName::from(task_id.package()) && turbo_json.tasks.contains_key(&TaskName::from(task_name.task()))) { Ok(true) } else if !matches!(workspace, PackageName::Root) { @@ -553,6 +561,7 @@ fn validate_task_name(task: Spanned<&str>) -> Result<(), Error> { mod test { use std::assert_matches::assert_matches; + use insta::assert_json_snapshot; use pretty_assertions::assert_eq; use serde_json::json; use tempfile::TempDir; @@ -680,6 +689,10 @@ mod test { #[test_case(PackageName::from("b"), "build", "b#build", true ; "workspace task in workspace")] #[test_case(PackageName::from("b"), "test", "b#test", true ; "task missing from workspace")] #[test_case(PackageName::from("c"), "missing", "c#missing", false ; "task missing")] + #[test_case(PackageName::from("c"), "c#curse", "c#curse", true ; "root defined task")] + #[test_case(PackageName::from("b"), "c#curse", "c#curse", true ; "non-workspace root defined task")] + #[test_case(PackageName::from("b"), "b#special", "b#special", true ; "workspace defined task")] + #[test_case(PackageName::from("c"), "b#special", "b#special", false ; "non-workspace defined task")] fn test_task_definition( workspace: PackageName, task_name: &'static str, @@ -694,6 +707,7 @@ mod test { "test": { "inputs": ["testing"] }, "build": { "inputs": ["primary"] }, "a#build": { "inputs": ["special"] }, + "c#curse": {}, } })), ), @@ -702,6 +716,7 @@ mod test { turbo_json(json!({ "tasks": { "build": { "inputs": ["outer"]}, + "special": {}, } })), ), @@ -1245,4 +1260,116 @@ mod test { .err(); assert_eq!(result.as_deref(), reason); } + + #[test] + fn test_run_package_task_exact() { + let repo_root_dir = TempDir::with_prefix("repo").unwrap(); + let repo_root = AbsoluteSystemPathBuf::new(repo_root_dir.path().to_str().unwrap()).unwrap(); + let package_graph = mock_package_graph( + &repo_root, + package_jsons! { + repo_root, + "app1" => ["libA"], + "app2" => ["libA"], + "libA" => [] + }, + ); + let turbo_jsons = vec![ + ( + PackageName::Root, + turbo_json(json!({ + "tasks": { + "build": { "dependsOn": ["^build"] }, + "special": { "dependsOn": ["^build"] }, + } + })), + ), + ( + PackageName::from("app2"), + turbo_json(json!({ + "extends": ["//"], + "tasks": { + "another": { "dependsOn": ["^build"] }, + } + })), + ), + ] + .into_iter() + .collect(); + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) + .with_tasks(vec![ + Spanned::new(TaskName::from("app1#special")), + Spanned::new(TaskName::from("app2#another")), + ]) + .with_workspaces(vec![PackageName::from("app1"), PackageName::from("app2")]) + .build() + .unwrap(); + + let expected = deps! { + "app1#special" => ["libA#build"], + "app2#another" => ["libA#build"], + "libA#build" => ["___ROOT___"] + }; + assert_eq!(all_dependencies(&engine), expected); + } + + #[test] + fn test_run_package_task_exact_error() { + let repo_root_dir = TempDir::with_prefix("repo").unwrap(); + let repo_root = AbsoluteSystemPathBuf::new(repo_root_dir.path().to_str().unwrap()).unwrap(); + let package_graph = mock_package_graph( + &repo_root, + package_jsons! { + repo_root, + "app1" => ["libA"], + "libA" => [] + }, + ); + let turbo_jsons = vec![ + ( + PackageName::Root, + turbo_json(json!({ + "tasks": { + "build": { "dependsOn": ["^build"] }, + } + })), + ), + ( + PackageName::from("app1"), + turbo_json(json!({ + "extends": ["//"], + "tasks": { + "another": { "dependsOn": ["^build"] }, + } + })), + ), + ] + .into_iter() + .collect(); + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader.clone(), false) + .with_tasks(vec![Spanned::new(TaskName::from("app1#special"))]) + .with_workspaces(vec![PackageName::from("app1")]) + .build(); + assert!(engine.is_err()); + let report = miette::Report::new(engine.unwrap_err()); + let mut msg = String::new(); + miette::JSONReportHandler::new() + .render_report(&mut msg, report.as_ref()) + .unwrap(); + assert_json_snapshot!(msg); + + let engine = EngineBuilder::new(&repo_root, &package_graph, loader, false) + .with_tasks(vec![Spanned::new(TaskName::from("app1#another"))]) + .with_workspaces(vec![PackageName::from("libA")]) + .build(); + assert!(engine.is_err()); + let report = miette::Report::new(engine.unwrap_err()); + let mut msg = String::new(); + miette::JSONReportHandler::new() + .render_report(&mut msg, report.as_ref()) + .unwrap(); + assert_json_snapshot!(msg); + } } diff --git a/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error-2.snap b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error-2.snap new file mode 100644 index 0000000000000..23933b974c392 --- /dev/null +++ b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error-2.snap @@ -0,0 +1,5 @@ +--- +source: crates/turborepo-lib/src/engine/builder.rs +expression: msg +--- +"{\"message\": \"missing tasks in project\",\"severity\": \"error\",\"causes\": [],\"labels\": [],\"related\": [{\"message\": \"could not find task `app1#another` in project\",\"severity\": \"error\",\"causes\": [],\"filename\": \"\",\"labels\": [],\"related\": []}]}" diff --git a/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error.snap b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error.snap new file mode 100644 index 0000000000000..24e22689cdfb9 --- /dev/null +++ b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_exact_error.snap @@ -0,0 +1,5 @@ +--- +source: crates/turborepo-lib/src/engine/builder.rs +expression: msg +--- +"{\"message\": \"missing tasks in project\",\"severity\": \"error\",\"causes\": [],\"labels\": [],\"related\": [{\"message\": \"could not find task `app1#special` in project\",\"severity\": \"error\",\"causes\": [],\"filename\": \"\",\"labels\": [],\"related\": []}]}" diff --git a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t index 17af56d6dabe9..dbe0c150f016b 100644 --- a/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t +++ b/turborepo-tests/integration/tests/workspace-configs/cross-workspace.t @@ -21,3 +21,24 @@ Setup Cached: 0 cached, 2 total Time:\s*[\.0-9]+m?s (re) + $ ${TURBO} run cross-workspace#cross-workspace-task + \xe2\x80\xa2 Packages in scope: add-keys, add-tasks, bad-json, blank-pkg, cached, config-change, cross-workspace, invalid-config, missing-workspace-config, omit-keys, override-values, persistent (esc) + \xe2\x80\xa2 Running cross-workspace#cross-workspace-task in 12 packages (esc) + \xe2\x80\xa2 Remote caching disabled (esc) + blank-pkg:cross-workspace-underlying-task: cache hit, replaying logs 39566f6362976823 + blank-pkg:cross-workspace-underlying-task: + blank-pkg:cross-workspace-underlying-task: > cross-workspace-underlying-task + blank-pkg:cross-workspace-underlying-task: > echo cross-workspace-underlying-task from blank-pkg + blank-pkg:cross-workspace-underlying-task: + blank-pkg:cross-workspace-underlying-task: cross-workspace-underlying-task from blank-pkg + cross-workspace:cross-workspace-task: cache hit, replaying logs bce507a110930f07 + cross-workspace:cross-workspace-task: + cross-workspace:cross-workspace-task: > cross-workspace-task + cross-workspace:cross-workspace-task: > echo cross-workspace-task + cross-workspace:cross-workspace-task: + cross-workspace:cross-workspace-task: cross-workspace-task + + Tasks: 2 successful, 2 total + Cached: 2 cached, 2 total + Time:\s*[\.0-9]+m?s >>> FULL TURBO (re) + From f2a191bc03917752d71224fbe65f7618f4fcce6a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 11:37:01 -0400 Subject: [PATCH 123/218] release(turborepo): 2.2.4-canary.3 (#9347) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 5663dc8599d21..549d133f7d2aa 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 839a54644c993..14a6fd82ac2ed 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 6e9d5e2287f86..08320694e882c 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 61f5ddbdd916a..1d337e90632fb 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 699c0508204ba..bdbb202d8b3ec 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index ced81ce7f5732..385a8f6b7d2b3 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index b46c0e1f46243..5423dba7fa9d4 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index cb631a0b04c48..fd7d29ce95ec8 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index aea6fa68fcd81..e641c9456b9ef 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.2", + "version": "2.2.4-canary.3", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.2", - "turbo-darwin-arm64": "2.2.4-canary.2", - "turbo-linux-64": "2.2.4-canary.2", - "turbo-linux-arm64": "2.2.4-canary.2", - "turbo-windows-64": "2.2.4-canary.2", - "turbo-windows-arm64": "2.2.4-canary.2" + "turbo-darwin-64": "2.2.4-canary.3", + "turbo-darwin-arm64": "2.2.4-canary.3", + "turbo-linux-64": "2.2.4-canary.3", + "turbo-linux-arm64": "2.2.4-canary.3", + "turbo-windows-64": "2.2.4-canary.3", + "turbo-windows-arm64": "2.2.4-canary.3" } } diff --git a/version.txt b/version.txt index d65199aaf6f84..b5ab9eea8690f 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.2 +2.2.4-canary.3 canary From 7f12bad2874f4d891bfd66d493d6c6c270afebf2 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 30 Oct 2024 12:32:44 -0400 Subject: [PATCH 124/218] fix(tui): make sure to open stdin for all tasks (#9354) ### Description In https://github.com/vercel/turborepo/pull/9306 I somehow dropped the `cmd.open_stdin()` call so we never started tasks hooked up to stdin. I verified I copied the closing/forwarding stdin logic in my refactor [as seen here](https://github.com/vercel/turborepo/blob/main/crates/turborepo-lib/src/task_graph/visitor/exec.rs#L376), we were just never opening it in the first place. ### Testing Instructions `turbo_dev dev` should now let you interact with `persistent` tasks --- crates/turborepo-lib/src/task_graph/visitor/command.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/turborepo-lib/src/task_graph/visitor/command.rs b/crates/turborepo-lib/src/task_graph/visitor/command.rs index b5459db8ebfa9..79135d94f519b 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/command.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/command.rs @@ -73,6 +73,10 @@ impl<'a> CommandFactory<'a> { cmd.env_clear(); cmd.envs(environment.iter()); + // We always open stdin and the visitor will close it depending on task + // configuration + cmd.open_stdin(); + Ok(Some(cmd)) } } From 0b0ab97a307dc2406c2cf534986e434a83c67a87 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 14:31:36 -0400 Subject: [PATCH 125/218] release(turborepo): 2.2.4-canary.4 (#9355) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 549d133f7d2aa..86ae2f124d036 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 14a6fd82ac2ed..989888842f385 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 08320694e882c..ed32669d86167 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 1d337e90632fb..a26369bf1ea73 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index bdbb202d8b3ec..0c0e76cec9319 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 385a8f6b7d2b3..a78b8f77ef0c8 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 5423dba7fa9d4..37891b75c39bd 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index fd7d29ce95ec8..abcd18433ba25 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index e641c9456b9ef..391c96d955fc5 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.3", + "version": "2.2.4-canary.4", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.3", - "turbo-darwin-arm64": "2.2.4-canary.3", - "turbo-linux-64": "2.2.4-canary.3", - "turbo-linux-arm64": "2.2.4-canary.3", - "turbo-windows-64": "2.2.4-canary.3", - "turbo-windows-arm64": "2.2.4-canary.3" + "turbo-darwin-64": "2.2.4-canary.4", + "turbo-darwin-arm64": "2.2.4-canary.4", + "turbo-linux-64": "2.2.4-canary.4", + "turbo-linux-arm64": "2.2.4-canary.4", + "turbo-windows-64": "2.2.4-canary.4", + "turbo-windows-arm64": "2.2.4-canary.4" } } diff --git a/version.txt b/version.txt index b5ab9eea8690f..ae9fdfb6eb3f5 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.3 +2.2.4-canary.4 canary From b52e1bdd42e4235f44ed42140d5feaf034fcc4ca Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Wed, 30 Oct 2024 18:33:28 -0600 Subject: [PATCH 126/218] feat(ui): Hide task list with `h` key. (#9350) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Toggle the visibility of the task list with an `h` hotkey. https://github.com/user-attachments/assets/7a8b3ad1-5ead-47d0-9aaf-513acce6ad3c Future note: I don't love that I'm stealing a vertical line from the task list. Screen real estate is valuable. It's likely we could give the `Task` header and footer instructions a faded style and get rid of the horizontal bars. (I'd recommend doing this regardless of the result of this PR. ### Testing Instructions 👀 --- crates/turborepo-ui/src/tui/app.rs | 14 ++++++++++++-- crates/turborepo-ui/src/tui/event.rs | 1 + crates/turborepo-ui/src/tui/input.rs | 1 + crates/turborepo-ui/src/tui/pane.rs | 29 ++++++++++++++++++++-------- crates/turborepo-ui/src/tui/table.rs | 8 +++++--- 5 files changed, 40 insertions(+), 13 deletions(-) diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 99fc06c0d8c39..632cc5ccb1266 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -49,6 +49,7 @@ pub struct App { scroll: TableState, selected_task_index: usize, has_user_scrolled: bool, + has_sidebar: bool, done: bool, } @@ -92,6 +93,7 @@ impl App { tasks_by_status, scroll: TableState::default().with_selected(selected_task_index), selected_task_index, + has_sidebar: true, has_user_scrolled: has_user_interacted, } } @@ -771,6 +773,9 @@ fn update( app.has_user_scrolled = true; app.interact()?; } + Event::ToggleSidebar => { + app.has_sidebar = !app.has_sidebar; + } Event::Input { bytes } => { app.forward_input(&bytes)?; } @@ -822,13 +827,18 @@ fn update( fn view(app: &mut App, f: &mut Frame) { let cols = app.size.pane_cols(); - let horizontal = Layout::horizontal([Constraint::Fill(1), Constraint::Length(cols)]); + let horizontal = if app.has_sidebar { + Layout::horizontal([Constraint::Fill(1), Constraint::Length(cols)]) + } else { + Layout::horizontal([Constraint::Max(0), Constraint::Length(cols)]) + }; let [table, pane] = horizontal.areas(f.size()); let active_task = app.active_task().unwrap().to_string(); let output_logs = app.tasks.get(&active_task).unwrap(); - let pane_to_render: TerminalPane = TerminalPane::new(output_logs, &active_task, &app.focus); + let pane_to_render: TerminalPane = + TerminalPane::new(output_logs, &active_task, &app.focus, app.has_sidebar); let table_to_render = TaskTable::new(&app.tasks_by_status); diff --git a/crates/turborepo-ui/src/tui/event.rs b/crates/turborepo-ui/src/tui/event.rs index 4f609f9a59028..446f110d8f176 100644 --- a/crates/turborepo-ui/src/tui/event.rs +++ b/crates/turborepo-ui/src/tui/event.rs @@ -50,6 +50,7 @@ pub enum Event { rows: u16, cols: u16, }, + ToggleSidebar, SearchEnter, SearchExit { restore_scroll: bool, diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index 7ae9fb55dbb88..fb17dc5b19b8d 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -85,6 +85,7 @@ fn translate_key_event(options: InputOptions, key_event: KeyEvent) -> Option Some(Event::ToggleSidebar), KeyCode::Enter if matches!(options.focus, LayoutSections::Search { .. }) => { Some(Event::SearchExit { restore_scroll: false, diff --git a/crates/turborepo-ui/src/tui/pane.rs b/crates/turborepo-ui/src/tui/pane.rs index a1c5e584477b2..361743c7f4567 100644 --- a/crates/turborepo-ui/src/tui/pane.rs +++ b/crates/turborepo-ui/src/tui/pane.rs @@ -1,7 +1,7 @@ use ratatui::{ style::Style, text::Line, - widgets::{Block, Borders, Widget}, + widgets::{Block, Widget}, }; use tui_term::widget::PseudoTerminal; @@ -10,11 +10,13 @@ use super::{app::LayoutSections, TerminalOutput}; const FOOTER_TEXT_ACTIVE: &str = "Press`Ctrl-Z` to stop interacting."; const FOOTER_TEXT_INACTIVE: &str = "Press `Enter` to interact."; const HAS_SELECTION: &str = "Press `c` to copy selection"; +const TASK_LIST_HIDDEN: &str = "Press `h` to show task list."; pub struct TerminalPane<'a, W> { terminal_output: &'a TerminalOutput, task_name: &'a str, section: &'a LayoutSections, + has_sidebar: bool, } impl<'a, W> TerminalPane<'a, W> { @@ -22,11 +24,13 @@ impl<'a, W> TerminalPane<'a, W> { terminal_output: &'a TerminalOutput, task_name: &'a str, section: &'a LayoutSections, + has_sidebar: bool, ) -> Self { Self { terminal_output, section, task_name, + has_sidebar, } } @@ -35,15 +39,25 @@ impl<'a, W> TerminalPane<'a, W> { } fn footer(&self) -> Line { + let task_list_message = if !self.has_sidebar { + TASK_LIST_HIDDEN + } else { + "" + }; + match self.section { - LayoutSections::Pane if self.terminal_output.has_selection() => { - Line::from(format!("{FOOTER_TEXT_ACTIVE} {HAS_SELECTION}")).centered() - } + LayoutSections::Pane if self.terminal_output.has_selection() => Line::from(format!( + "{FOOTER_TEXT_ACTIVE} {task_list_message} {HAS_SELECTION}" + )) + .centered(), LayoutSections::Pane => Line::from(FOOTER_TEXT_ACTIVE.to_owned()).centered(), - LayoutSections::TaskList if self.terminal_output.has_selection() => { - Line::from(format!("{FOOTER_TEXT_INACTIVE} {HAS_SELECTION}")).centered() + LayoutSections::TaskList if self.terminal_output.has_selection() => Line::from( + format!("{FOOTER_TEXT_INACTIVE} {task_list_message} {HAS_SELECTION}"), + ) + .centered(), + LayoutSections::TaskList => { + Line::from(format!("{FOOTER_TEXT_INACTIVE} {task_list_message}")).centered() } - LayoutSections::TaskList => Line::from(FOOTER_TEXT_INACTIVE.to_owned()).centered(), LayoutSections::Search { results, .. } => { Line::from(format!("/ {}", results.query())).left_aligned() } @@ -58,7 +72,6 @@ impl<'a, W> Widget for &TerminalPane<'a, W> { { let screen = self.terminal_output.parser.screen(); let block = Block::default() - .borders(Borders::LEFT) .title(self.terminal_output.title(self.task_name)) .title_bottom(self.footer()) .style(if self.highlight() { diff --git a/crates/turborepo-ui/src/tui/table.rs b/crates/turborepo-ui/src/tui/table.rs index ddeb5cb34f14f..c0524235579c7 100644 --- a/crates/turborepo-ui/src/tui/table.rs +++ b/crates/turborepo-ui/src/tui/table.rs @@ -2,7 +2,7 @@ use ratatui::{ layout::{Constraint, Rect}, style::{Color, Style, Stylize}, text::Text, - widgets::{Cell, Row, StatefulWidget, Table, TableState}, + widgets::{Block, Borders, Cell, Row, StatefulWidget, Table, TableState}, }; use super::{event::TaskResult, spinner::SpinnerState, task::TasksByStatus}; @@ -17,6 +17,7 @@ pub struct TaskTable<'b> { } const TASK_NAVIGATE_INSTRUCTIONS: &str = "↑ ↓ to navigate"; +const HIDE_INSTRUCTIONS: &str = "h to hide"; impl<'b> TaskTable<'b> { /// Construct a new table with all of the planned tasks @@ -105,6 +106,7 @@ impl<'a> StatefulWidget for &'a TaskTable<'a> { ) .highlight_style(Style::default().fg(Color::Yellow)) .column_spacing(0) + .block(Block::new().borders(Borders::RIGHT)) .header( vec![format!("Tasks\n{bar}"), " \n─".to_owned()] .into_iter() @@ -114,13 +116,13 @@ impl<'a> StatefulWidget for &'a TaskTable<'a> { ) .footer( vec![ - format!("{bar}\n{TASK_NAVIGATE_INSTRUCTIONS}"), + format!("{bar}\n{TASK_NAVIGATE_INSTRUCTIONS}\n{HIDE_INSTRUCTIONS}"), format!("─\n "), ] .into_iter() .map(Cell::from) .collect::() - .height(2), + .height(3), ); StatefulWidget::render(table, area, buf, state); } From 5a4369685730509c28abf12656dbfcc35bd0eade Mon Sep 17 00:00:00 2001 From: Alexander Lyon Date: Thu, 31 Oct 2024 14:56:05 +0100 Subject: [PATCH 127/218] fix: order tasks in order of interest, namely failed, successful, then cached (#9353) Currently, when running tasks using the new UI, turbo inserts passed / failed tasks below cached tasks (in order of completion) meaning the stuff users probably want to see (failed things) end up at the bottom of the list or off screen. This change attempts to improve that by inserting those items in front of the list of cached tasks. That way cached tasks (likely the least interesting) end up last and preceded by successful tasks and then failed tasks. This assumes that users will more interested in failed tasks than successful ones but I am also open to ordering just the failed / successful task in order of completion instead. In practice this means if running turbo in a large project with `--continue` where the majority of tasks are and will remain cached between runs, then the things that are 'interesting' will usually be close to the user's cursor. It also 'fixes' the case where viewing a task that is completed jumps past the cached tasks and you have to traverse back through them all to get to the top again. --- Cargo.lock | 1 + crates/turborepo-ui/Cargo.toml | 1 + crates/turborepo-ui/src/tui/table.rs | 64 +++++++++++++++++----------- 3 files changed, 42 insertions(+), 24 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8402f1465122c..7e7a78ca7908b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6614,6 +6614,7 @@ dependencies = [ "futures", "indicatif", "indoc", + "itertools 0.10.5", "lazy_static", "nix 0.26.2", "ratatui", diff --git a/crates/turborepo-ui/Cargo.toml b/crates/turborepo-ui/Cargo.toml index 9c0a0caf35c5b..e7869416818c0 100644 --- a/crates/turborepo-ui/Cargo.toml +++ b/crates/turborepo-ui/Cargo.toml @@ -28,6 +28,7 @@ crossterm = { version = "0.27.0", features = ["event-stream"] } dialoguer = { workspace = true } futures = { workspace = true } indicatif = { workspace = true } +itertools.workspace = true lazy_static = { workspace = true } nix = { version = "0.26.2", features = ["signal"] } ratatui = { workspace = true } diff --git a/crates/turborepo-ui/src/tui/table.rs b/crates/turborepo-ui/src/tui/table.rs index c0524235579c7..7e22795b67225 100644 --- a/crates/turborepo-ui/src/tui/table.rs +++ b/crates/turborepo-ui/src/tui/table.rs @@ -1,3 +1,4 @@ +use itertools::Itertools; use ratatui::{ layout::{Constraint, Rect}, style::{Color, Style, Stylize}, @@ -9,8 +10,13 @@ use super::{event::TaskResult, spinner::SpinnerState, task::TasksByStatus}; /// A widget that renders a table of their tasks and their current status /// -/// The table contains finished tasks, running tasks, and planned tasks rendered -/// in that order. +/// The tasks are ordered as follows: +/// - running tasks +/// - planned tasks +/// - finished tasks +/// - failed tasks +/// - successful tasks +/// - cached tasks pub struct TaskTable<'b> { tasks_by_type: &'b TasksByStatus, spinner: SpinnerState, @@ -47,29 +53,39 @@ impl<'b> TaskTable<'b> { } fn finished_rows(&self) -> impl Iterator + '_ { - self.tasks_by_type.finished.iter().map(move |task| { - let name = if matches!(task.result(), TaskResult::CacheHit) { - Cell::new(Text::styled(task.name(), Style::default().italic())) - } else { - Cell::new(task.name()) - }; + self.tasks_by_type + .finished + .iter() + // note we can't use the default Ord impl because + // we want failed tasks first + .sorted_by_key(|task| match task.result() { + TaskResult::Failure => 0, + TaskResult::Success => 1, + TaskResult::CacheHit => 2, + }) + .map(move |task| { + let name = if matches!(task.result(), TaskResult::CacheHit) { + Cell::new(Text::styled(task.name(), Style::default().italic())) + } else { + Cell::new(task.name()) + }; - Row::new(vec![ - name, - match task.result() { - // matches Next.js (and many other CLI tools) https://github.com/vercel/next.js/blob/1a04d94aaec943d3cce93487fea3b8c8f8898f31/packages/next/src/build/output/log.ts - TaskResult::Success => { - Cell::new(Text::styled("✓", Style::default().green().bold())) - } - TaskResult::CacheHit => { - Cell::new(Text::styled("⊙", Style::default().magenta())) - } - TaskResult::Failure => { - Cell::new(Text::styled("⨯", Style::default().red().bold())) - } - }, - ]) - }) + Row::new(vec![ + name, + match task.result() { + // matches Next.js (and many other CLI tools) https://github.com/vercel/next.js/blob/1a04d94aaec943d3cce93487fea3b8c8f8898f31/packages/next/src/build/output/log.ts + TaskResult::Success => { + Cell::new(Text::styled("✓", Style::default().green().bold())) + } + TaskResult::CacheHit => { + Cell::new(Text::styled("⊙", Style::default().magenta())) + } + TaskResult::Failure => { + Cell::new(Text::styled("⨯", Style::default().red().bold())) + } + }, + ]) + }) } fn running_rows(&self) -> impl Iterator + '_ { From daa078d99f4f42902ad195b94977d25d42e30647 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 31 Oct 2024 10:30:56 -0400 Subject: [PATCH 128/218] feat(trace): filtering by import type (#9357) --- crates/turbo-trace/src/import_finder.rs | 28 +++++++++++-- crates/turbo-trace/src/lib.rs | 2 +- crates/turbo-trace/src/tracer.rs | 22 +++++++++- crates/turborepo-lib/src/query/file.rs | 42 +++++++++++++++++-- crates/turborepo/tests/query.rs | 6 +++ ...s`_with_all_dependencies_(npm@10.5.0).snap | 23 ++++++++++ ...`_with_type_dependencies_(npm@10.5.0).snap | 20 +++++++++ ..._with_value_dependencies_(npm@10.5.0).snap | 20 +++++++++ ...tsx`_with_all_dependents_(npm@10.5.0).snap | 26 ++++++++++++ ...sx`_with_type_dependents_(npm@10.5.0).snap | 20 +++++++++ ...x`_with_value_dependents_(npm@10.5.0).snap | 23 ++++++++++ .../fixtures/turbo_trace/import_just_type.ts | 1 + .../fixtures/turbo_trace/import_just_value.ts | 1 + .../turbo_trace/import_value_and_type.ts | 2 + .../integration/fixtures/turbo_trace/link.tsx | 8 ++++ .../integration/fixtures/turbo_trace/types.ts | 1 + 16 files changed, 236 insertions(+), 9 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_all_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_type_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_value_dependencies_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_all_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_type_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_value_dependents_(npm@10.5.0).snap create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/import_just_type.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/import_just_value.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/import_value_and_type.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/link.tsx create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/types.ts diff --git a/crates/turbo-trace/src/import_finder.rs b/crates/turbo-trace/src/import_finder.rs index ddfbf83875418..79543c7185417 100644 --- a/crates/turbo-trace/src/import_finder.rs +++ b/crates/turbo-trace/src/import_finder.rs @@ -2,12 +2,21 @@ use swc_common::{Span, Spanned}; use swc_ecma_ast::{Decl, ModuleDecl, Stmt}; use swc_ecma_visit::{Visit, VisitWith}; -#[derive(Default)] +use crate::tracer::ImportType; + pub struct ImportFinder { + import_type: ImportType, imports: Vec<(String, Span)>, } impl ImportFinder { + pub fn new(import_type: ImportType) -> Self { + Self { + import_type, + imports: Vec::new(), + } + } + pub fn imports(&self) -> &[(String, Span)] { &self.imports } @@ -16,8 +25,21 @@ impl ImportFinder { impl Visit for ImportFinder { fn visit_module_decl(&mut self, decl: &ModuleDecl) { if let ModuleDecl::Import(import) = decl { - self.imports - .push((import.src.value.to_string(), import.span)); + match self.import_type { + ImportType::All => { + self.imports + .push((import.src.value.to_string(), import.span)); + } + ImportType::Types if import.type_only => { + self.imports + .push((import.src.value.to_string(), import.span)); + } + ImportType::Values if !import.type_only => { + self.imports + .push((import.src.value.to_string(), import.span)); + } + _ => {} + } } } diff --git a/crates/turbo-trace/src/lib.rs b/crates/turbo-trace/src/lib.rs index c37074f75fb8d..e0b38cd1bd02b 100644 --- a/crates/turbo-trace/src/lib.rs +++ b/crates/turbo-trace/src/lib.rs @@ -2,4 +2,4 @@ mod import_finder; mod tracer; -pub use tracer::{TraceError, TraceResult, Tracer}; +pub use tracer::{ImportType, TraceError, TraceResult, Tracer}; diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 24db1d2baa4d8..27e0602387b66 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -28,6 +28,7 @@ pub struct Tracer { source_map: Arc, cwd: AbsoluteSystemPathBuf, errors: Vec, + import_type: ImportType, } #[derive(Debug, Error, Diagnostic)] @@ -57,6 +58,17 @@ pub struct TraceResult { pub files: HashMap, } +/// The type of imports to trace. +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum ImportType { + /// Trace all imports. + All, + /// Trace only `import type` imports + Types, + /// Trace only `import` imports and not `import type` imports + Values, +} + impl Tracer { pub fn new( cwd: AbsoluteSystemPathBuf, @@ -72,17 +84,23 @@ impl Tracer { files, ts_config, cwd, + import_type: ImportType::All, errors: Vec::new(), source_map: Arc::new(SourceMap::default()), } } + pub fn set_import_type(&mut self, import_type: ImportType) { + self.import_type = import_type; + } + #[tracing::instrument(skip(resolver, source_map))] pub async fn get_imports_from_file( source_map: &SourceMap, errors: &mut Vec, resolver: &Resolver, file_path: &AbsoluteSystemPath, + import_type: ImportType, ) -> Option<(Vec, SeenFile)> { // Read the file content let Ok(file_content) = tokio::fs::read_to_string(&file_path).await else { @@ -130,7 +148,7 @@ impl Tracer { }; // Visit the AST and find imports - let mut finder = ImportFinder::default(); + let mut finder = ImportFinder::new(import_type); module.visit_with(&mut finder); // Convert found imports/requires to absolute paths and add them to files to // visit @@ -196,6 +214,7 @@ impl Tracer { &mut self.errors, file_resolver.as_ref().unwrap_or(resolver), &file_path, + self.import_type, ) .await else { @@ -306,6 +325,7 @@ impl Tracer { &mut errors, file_resolver.as_ref().unwrap_or(&resolver), &file, + shared_self.import_type, ) .await else { diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 5fdd280e6a312..c1893d396ab3e 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -1,6 +1,6 @@ use std::sync::Arc; -use async_graphql::{Object, SimpleObject}; +use async_graphql::{Enum, Object, SimpleObject}; use camino::Utf8PathBuf; use itertools::Itertools; use swc_ecma_ast::EsVersion; @@ -146,6 +146,27 @@ impl TraceResult { } } +/// The type of imports to trace. +#[derive(Copy, Clone, Debug, PartialEq, Eq, Enum)] +pub enum ImportType { + /// Trace all imports. + All, + /// Trace only `import type` imports + Types, + /// Trace only `import` imports and not `import type` imports + Values, +} + +impl From for turbo_trace::ImportType { + fn from(import_type: ImportType) -> Self { + match import_type { + ImportType::All => turbo_trace::ImportType::All, + ImportType::Types => turbo_trace::ImportType::Types, + ImportType::Values => turbo_trace::ImportType::Values, + } + } +} + #[Object] impl File { async fn contents(&self) -> Result { @@ -169,26 +190,39 @@ impl File { &self, depth: Option, ts_config: Option, + import_type: Option, ) -> Result { - let tracer = Tracer::new( + let mut tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], ts_config.map(Utf8PathBuf::from), ); + if let Some(import_type) = import_type { + tracer.set_import_type(import_type.into()); + } + let mut result = tracer.trace(depth).await; // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) } - async fn dependents(&self, ts_config: Option) -> Result { - let tracer = Tracer::new( + async fn dependents( + &self, + ts_config: Option, + import_type: Option, + ) -> Result { + let mut tracer = Tracer::new( self.run.repo_root().to_owned(), vec![self.path.clone()], ts_config.map(Utf8PathBuf::from), ); + if let Some(import_type) = import_type { + tracer.set_import_type(import_type.into()); + } + let mut result = tracer.reverse_trace().await; // Remove the file itself from the result result.files.remove(&self.path); diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 18308f173a9f5..fdaf7ec8555ae 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -47,6 +47,12 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `invalid.ts` with dependencies" => "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", "get `main.ts` with depth = 0" => "query { file(path: \"main.ts\") { path dependencies(depth: 1) { files { items { path } } } } }", "get `with_prefix.ts` with dependencies" => "query { file(path: \"with_prefix.ts\") { path dependencies { files { items { path } } } } }", + "get `import_value_and_type.ts` with all dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: ALL) { files { items { path } } } } }", + "get `import_value_and_type.ts` with type dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: TYPES) { files { items { path } } } } }", + "get `import_value_and_type.ts` with value dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: VALUES) { files { items { path } } } } }", + "get `link.tsx` with all dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: ALL) { files { items { path } } } } }", + "get `link.tsx` with type dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: TYPES) { files { items { path } } } } }", + "get `link.tsx` with value dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: VALUES) { files { items { path } } } } }", ); Ok(()) diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_all_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_all_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..46eabec764c43 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_all_dependencies_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "import_value_and_type.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "link.tsx" + }, + { + "path": "types.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_type_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_type_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..04f12c8b158c3 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_type_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "import_value_and_type.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "types.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_value_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_value_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..1cc31c9e9f2e3 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`import_value_and_type.ts`_with_value_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "import_value_and_type.ts", + "dependencies": { + "files": { + "items": [ + { + "path": "link.tsx" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_all_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_all_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..c4355ebb18e29 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_all_dependents_(npm@10.5.0).snap @@ -0,0 +1,26 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "link.tsx", + "dependents": { + "files": { + "items": [ + { + "path": "import_just_type.ts" + }, + { + "path": "import_just_value.ts" + }, + { + "path": "import_value_and_type.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_type_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_type_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..5549ac43b44e1 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_type_dependents_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "link.tsx", + "dependents": { + "files": { + "items": [ + { + "path": "import_just_type.ts" + } + ] + } + } + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_value_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_value_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..e25a771e6f9cb --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`link.tsx`_with_value_dependents_(npm@10.5.0).snap @@ -0,0 +1,23 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "link.tsx", + "dependents": { + "files": { + "items": [ + { + "path": "import_just_value.ts" + }, + { + "path": "import_value_and_type.ts" + } + ] + } + } + } + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/import_just_type.ts b/turborepo-tests/integration/fixtures/turbo_trace/import_just_type.ts new file mode 100644 index 0000000000000..6f29b3cb73ccd --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/import_just_type.ts @@ -0,0 +1 @@ +import type { LinkProps } from "./link"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/import_just_value.ts b/turborepo-tests/integration/fixtures/turbo_trace/import_just_value.ts new file mode 100644 index 0000000000000..e1b79a7059213 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/import_just_value.ts @@ -0,0 +1 @@ +import { Link } from "./link"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/import_value_and_type.ts b/turborepo-tests/integration/fixtures/turbo_trace/import_value_and_type.ts new file mode 100644 index 0000000000000..c4d9493d9bd5a --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/import_value_and_type.ts @@ -0,0 +1,2 @@ +import type { LinkProps } from "./types"; +import { Link } from "./link"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/link.tsx b/turborepo-tests/integration/fixtures/turbo_trace/link.tsx new file mode 100644 index 0000000000000..8654121b50e51 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/link.tsx @@ -0,0 +1,8 @@ +export interface LinkProps { + children: React.ReactNode; + href: string; +} + +export const Link = ({ children, href }: LinkProps) => { + return {children}; +}; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/types.ts b/turborepo-tests/integration/fixtures/turbo_trace/types.ts new file mode 100644 index 0000000000000..c3a0137b0d333 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/types.ts @@ -0,0 +1 @@ +export type LinkProps = string; From 06fef5fb2a43d4cfad4ef357c8f2d306381ecedc Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 31 Oct 2024 10:32:04 -0400 Subject: [PATCH 129/218] chore: bump dependencies for Windows ARM support (#9343) --- Cargo.lock | 290 ++++++++++-------- Cargo.toml | 8 +- crates/turborepo-api-client/Cargo.toml | 2 +- crates/turborepo-lib/src/commands/link.rs | 2 +- .../src/daemon/default_timeout_layer.rs | 2 +- crates/turborepo-updater/Cargo.toml | 2 +- 6 files changed, 174 insertions(+), 132 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 7e7a78ca7908b..32d7e1a1666d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1586,14 +1586,15 @@ dependencies = [ [[package]] name = "dialoguer" -version = "0.10.4" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59c6f2989294b9a498d3ad5491a79c6deb604617378e1cdc4bfc1c1361fe2f87" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" dependencies = [ "console", "fuzzy-matcher", "shell-words", "tempfile", + "thiserror", "zeroize", ] @@ -2455,19 +2456,26 @@ dependencies = [ "pin-project-lite", "smallvec", "tokio", + "want", ] [[package]] name = "hyper-rustls" -version = "0.23.2" +version = "0.27.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1788965e61b367cd03a62950836d5cd41560c3577d90e40e0819373194d1661c" +checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ - "http 0.2.11", - "hyper 0.14.28", - "rustls 0.20.9", + "futures-util", + "http 1.1.0", + "hyper 1.4.1", + "hyper-util", + "rustls", + "rustls-native-certs", + "rustls-pki-types", "tokio", "tokio-rustls", + "tower-service", + "webpki-roots", ] [[package]] @@ -2484,15 +2492,18 @@ dependencies = [ [[package]] name = "hyper-tls" -version = "0.5.0" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", - "hyper 0.14.28", + "http-body-util", + "hyper 1.4.1", + "hyper-util", "native-tls", "tokio", "tokio-native-tls", + "tower-service", ] [[package]] @@ -2502,12 +2513,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cde7055719c54e36e95e8719f95883f22072a48ede39db7fc17a4e1d5281e9b9" dependencies = [ "bytes", + "futures-channel", "futures-util", "http 1.1.0", "http-body 1.0.1", "hyper 1.4.1", "pin-project-lite", + "socket2 0.5.6", "tokio", + "tower", + "tower-service", + "tracing", ] [[package]] @@ -3202,7 +3218,7 @@ dependencies = [ "httparse", "memchr", "mime", - "spin 0.9.8", + "spin", "version_check", ] @@ -4131,6 +4147,54 @@ dependencies = [ "rand", ] +[[package]] +name = "quinn" +version = "0.11.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c7c5fdde3cdae7203427dc4f0a68fe0ed09833edc525a03456b153b79828684" +dependencies = [ + "bytes", + "pin-project-lite", + "quinn-proto", + "quinn-udp", + "rustc-hash 2.0.0", + "rustls", + "socket2 0.5.6", + "thiserror", + "tokio", + "tracing", +] + +[[package]] +name = "quinn-proto" +version = "0.11.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fadfaed2cd7f389d0161bb73eeb07b7b78f8691047a6f3e73caaeae55310a4a6" +dependencies = [ + "bytes", + "rand", + "ring", + "rustc-hash 2.0.0", + "rustls", + "slab", + "thiserror", + "tinyvec", + "tracing", +] + +[[package]] +name = "quinn-udp" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4fe68c2e9e1a1234e218683dbdf9f9dfcb094113c5ac2b938dfcb9bab4c4140b" +dependencies = [ + "libc", + "once_cell", + "socket2 0.5.6", + "tracing", + "windows-sys 0.59.0", +] + [[package]] name = "quote" version = "1.0.36" @@ -4301,21 +4365,22 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" [[package]] name = "reqwest" -version = "0.11.17" +version = "0.12.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13293b639a097af28fc8a90f22add145a9c954e49d77da06263d58cf44d5fb91" +checksum = "a77c62af46e79de0a562e1a9849205ffcb7fc1238876e9bd743357570e04046f" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "bytes", - "encoding_rs", + "futures-channel", "futures-core", "futures-util", - "h2 0.3.24", - "http 0.2.11", - "http-body 0.4.5", - "hyper 0.14.28", + "http 1.1.0", + "http-body 1.0.1", + "http-body-util", + "hyper 1.4.1", "hyper-rustls", "hyper-tls", + "hyper-util", "ipnet", "js-sys", "log", @@ -4324,12 +4389,15 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls 0.20.9", + "quinn", + "rustls", "rustls-native-certs", "rustls-pemfile", + "rustls-pki-types", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper 1.0.1", "tokio", "tokio-native-tls", "tokio-rustls", @@ -4340,23 +4408,8 @@ dependencies = [ "wasm-bindgen-futures", "wasm-streams", "web-sys", - "webpki-roots 0.22.6", - "winreg", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", + "webpki-roots", + "windows-registry", ] [[package]] @@ -4368,8 +4421,8 @@ dependencies = [ "cc", "getrandom", "libc", - "spin 0.9.8", - "untrusted 0.9.0", + "spin", + "untrusted", "windows-sys 0.48.0", ] @@ -4458,57 +4511,56 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.9" +version = "0.23.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b80e3dec595989ea8510028f30c408a4630db12c9cbb8de34203b89d6577e99" +checksum = "eee87ff5d9b36712a58574e12e9f0ea80f915a5b0ac518d322b24a465617925e" dependencies = [ "log", - "ring 0.16.20", - "sct", - "webpki", -] - -[[package]] -name = "rustls" -version = "0.21.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" -dependencies = [ - "log", - "ring 0.17.7", + "once_cell", + "ring", + "rustls-pki-types", "rustls-webpki", - "sct", + "subtle", + "zeroize", ] [[package]] name = "rustls-native-certs" -version = "0.6.3" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9aace74cb666635c918e9c12bc0d348266037aa8eb599b5cba565709a8dff00" +checksum = "fcaf18a4f2be7326cd874a5fa579fae794320a0f388d365dca7e480e55f83f8a" dependencies = [ "openssl-probe", "rustls-pemfile", + "rustls-pki-types", "schannel", "security-framework", ] [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" dependencies = [ - "base64 0.21.4", + "rustls-pki-types", ] +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + [[package]] name = "rustls-webpki" -version = "0.101.7" +version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.7", - "untrusted 0.9.0", + "ring", + "rustls-pki-types", + "untrusted", ] [[package]] @@ -4577,16 +4629,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "sct" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d53dcdb7c9f8158937a7981b48accfd39a43af418591a5d008c7b22b5e1b7ca4" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - [[package]] name = "security-framework" version = "2.8.2" @@ -4953,12 +4995,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -5335,6 +5371,9 @@ name = "sync_wrapper" version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" +dependencies = [ + "futures-core", +] [[package]] name = "sysinfo" @@ -5646,13 +5685,13 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.4" +version = "0.26.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" dependencies = [ - "rustls 0.20.9", + "rustls", + "rustls-pki-types", "tokio", - "webpki", ] [[package]] @@ -6138,7 +6177,7 @@ dependencies = [ "anyhow", "bytes", "chrono", - "http 0.2.11", + "http 1.1.0", "httpmock", "insta", "lazy_static", @@ -6838,12 +6877,6 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -6853,8 +6886,7 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "update-informer" version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f8811797a24ff123db3c6e1087aa42551d03d772b3724be421ad063da1f5f3f" +source = "git+https://github.com/nicholaslyang/update-informer.git#7a78e90e62479e022bae77ada824c9df53036f96" dependencies = [ "directories", "reqwest", @@ -6866,21 +6898,21 @@ dependencies = [ [[package]] name = "ureq" -version = "2.9.1" +version = "2.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8cdd25c339e200129fe4de81451814e5228c9b771d57378817d6117cc2b3f97" +checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" dependencies = [ - "base64 0.21.4", + "base64 0.22.1", "flate2", "log", "native-tls", "once_cell", - "rustls 0.21.10", - "rustls-webpki", + "rustls", + "rustls-pki-types", "serde", "serde_json", "url", - "webpki-roots 0.25.3", + "webpki-roots", ] [[package]] @@ -7076,9 +7108,9 @@ checksum = "4f186bd2dcf04330886ce82d6f33dd75a7bfcf69ecf5763b89fcde53b6ac9838" [[package]] name = "wasm-streams" -version = "0.2.3" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bbae3363c08332cadccd13b67db371814cd214c2524020932f0804b8cf7c078" +checksum = "4e072d4e72f700fb3443d8fe94a39315df013eef1104903cdb0a2abd322bbecd" dependencies = [ "futures-util", "js-sys", @@ -7133,31 +7165,15 @@ dependencies = [ "web-sys", ] -[[package]] -name = "webpki" -version = "0.22.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f095d78192e208183081cc07bc5515ef55216397af48b873e5edcd72637fa1bd" -dependencies = [ - "ring 0.16.20", - "untrusted 0.7.1", -] - [[package]] name = "webpki-roots" -version = "0.22.6" +version = "0.26.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6c71e40d7d2c34a5106301fb632274ca37242cd0c9d3e64dbece371a40a2d87" +checksum = "841c67bff177718f1d4dfefde8d8f0e78f9b6589319ba88312f567fc5841a958" dependencies = [ - "webpki", + "rustls-pki-types", ] -[[package]] -name = "webpki-roots" -version = "0.25.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1778a42e8b3b90bff8d0f5032bf22250792889a5cdc752aa0020c84abe3aaf10" - [[package]] name = "which" version = "4.4.0" @@ -7209,6 +7225,36 @@ dependencies = [ "windows-targets 0.48.1", ] +[[package]] +name = "windows-registry" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" +dependencies = [ + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.42.0" @@ -7495,9 +7541,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.6.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" [[package]] name = "zstd" diff --git a/Cargo.toml b/Cargo.toml index d378b41e4fa7a..55a62f4dedef5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -66,11 +66,7 @@ turborepo-vercel-api = { path = "crates/turborepo-vercel-api" } turborepo-vercel-api-mock = { path = "crates/turborepo-vercel-api-mock" } turborepo-vt100 = { path = "crates/turborepo-vt100" } -# Be careful when selecting tls backend, including change default tls backend. -# If you changed, must verify with ALL build targets with next-swc to ensure -# it works. next-swc have various platforms, some doesn't support native (using openssl-sys) -# and some aren't buildable with rustls. -reqwest = { version = "=0.11.17", default-features = false } +reqwest = { version = "0.12.9", default-features = false } anyhow = "1.0.69" assert_cmd = "2.0.8" @@ -101,7 +97,7 @@ console-subscriber = "0.1.8" crossbeam-channel = "0.5.8" dashmap = "5.4.0" derive_setters = "0.1.6" -dialoguer = "0.10.3" +dialoguer = "0.11.0" dunce = "1.0.3" either = "1.9.0" futures = "0.3.26" diff --git a/crates/turborepo-api-client/Cargo.toml b/crates/turborepo-api-client/Cargo.toml index 2022a5bacc920..dc2290a4b2301 100644 --- a/crates/turborepo-api-client/Cargo.toml +++ b/crates/turborepo-api-client/Cargo.toml @@ -11,7 +11,7 @@ rustls-tls = ["reqwest/rustls-tls-native-roots"] [dev-dependencies] anyhow = { workspace = true } -http = "0.2.9" +http = "1.1.0" httpmock = { workspace = true } insta = { workspace = true } port_scanner = { workspace = true } diff --git a/crates/turborepo-lib/src/commands/link.rs b/crates/turborepo-lib/src/commands/link.rs index d01aaa46f4275..721c3a07458a4 100644 --- a/crates/turborepo-lib/src/commands/link.rs +++ b/crates/turborepo-lib/src/commands/link.rs @@ -47,7 +47,7 @@ pub enum Error { #[error("link cancelled")] NotLinking, #[error("canceled")] - UserCanceled(#[source] io::Error), + UserCanceled(#[source] dialoguer::Error), #[error("could not get user information {0}")] UserNotFound(#[source] turborepo_api_client::Error), // We failed to fetch the team for whatever reason diff --git a/crates/turborepo-lib/src/daemon/default_timeout_layer.rs b/crates/turborepo-lib/src/daemon/default_timeout_layer.rs index 386894382cd90..60f6e55211f43 100644 --- a/crates/turborepo-lib/src/daemon/default_timeout_layer.rs +++ b/crates/turborepo-lib/src/daemon/default_timeout_layer.rs @@ -85,8 +85,8 @@ mod test { sync::{Arc, Mutex}, }; - use reqwest::header::HeaderValue; use test_case::test_case; + use tonic::codegen::http::HeaderValue; use super::*; diff --git a/crates/turborepo-updater/Cargo.toml b/crates/turborepo-updater/Cargo.toml index 40c7cd268d2c4..c13725216ade1 100644 --- a/crates/turborepo-updater/Cargo.toml +++ b/crates/turborepo-updater/Cargo.toml @@ -22,6 +22,6 @@ reqwest = { workspace = true, features = ["json", "blocking"] } semver = { workspace = true } serde = { workspace = true, features = ["derive"] } thiserror = { workspace = true } -update-informer = { version = "1.1", default-features = false, features = [ +update-informer = { git = "https://github.com/nicholaslyang/update-informer.git", default-features = false, features = [ "reqwest", ] } From e186685fe2244cfcff71b99bc356235c98c81e12 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 31 Oct 2024 15:43:09 -0400 Subject: [PATCH 130/218] feat(mfe): inject local proxy (#9356) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description This PR adds all support necessary for starting a MFE local proxy: - Adds new `CommandProvider` to allow for multiple strategies for constructing a command depending on the type - Adds parsing logic for `micro-frontends.jsonc` - Parses all `micro-frontends.jsonc` found in the package graph* - Adding a task definition for the generated `proxy` task if MFE configs are found - Explicitly include the `proxy` tasks in engine building step if a MFE dev task is found in the product of the package `--filter` and the tasks specified in `turbo run` - Adds a `CommandProvider` that construct a command that invokes the MFE local proxy ⚠️ This currently only support MFE configs that are located in shared packages and doesn't respect a loose MFE configs. Follow up work: - [ ] Handle configurable MFE config location ### Testing Instructions In a repository with MFE, run a dev task for one of the configured MFE. This should result in a `#proxy` task being injected for that MFE and correctly configured to route traffic to the dev tasks or a remote host. --- Cargo.lock | 18 ++ Cargo.toml | 1 + crates/turborepo-lib/Cargo.toml | 1 + crates/turborepo-lib/src/engine/mod.rs | 5 +- crates/turborepo-lib/src/lib.rs | 1 + crates/turborepo-lib/src/micro_frontends.rs | 52 ++++ crates/turborepo-lib/src/process/command.rs | 5 + crates/turborepo-lib/src/run/builder.rs | 66 ++++- crates/turborepo-lib/src/run/error.rs | 2 + crates/turborepo-lib/src/run/mod.rs | 3 + .../src/task_graph/visitor/command.rs | 259 +++++++++++++++++- .../src/task_graph/visitor/exec.rs | 15 +- .../src/task_graph/visitor/mod.rs | 10 + crates/turborepo-lib/src/turbo_json/loader.rs | 56 +++- crates/turborepo-lib/src/turbo_json/mod.rs | 15 + crates/turborepo-micro-frontend/Cargo.toml | 23 ++ .../fixtures/sample.jsonc | 133 +++++++++ crates/turborepo-micro-frontend/src/error.rs | 20 ++ crates/turborepo-micro-frontend/src/lib.rs | 73 +++++ .../src/package_graph/mod.rs | 9 + 20 files changed, 741 insertions(+), 26 deletions(-) create mode 100644 crates/turborepo-lib/src/micro_frontends.rs create mode 100644 crates/turborepo-micro-frontend/Cargo.toml create mode 100644 crates/turborepo-micro-frontend/fixtures/sample.jsonc create mode 100644 crates/turborepo-micro-frontend/src/error.rs create mode 100644 crates/turborepo-micro-frontend/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 32d7e1a1666d9..bba34a03ca13b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6475,6 +6475,7 @@ dependencies = [ "turborepo-fs", "turborepo-graph-utils", "turborepo-lockfiles", + "turborepo-micro-frontend", "turborepo-repository", "turborepo-scm", "turborepo-telemetry", @@ -6529,6 +6530,23 @@ dependencies = [ "wax", ] +[[package]] +name = "turborepo-micro-frontend" +version = "0.1.0" +dependencies = [ + "biome_deserialize", + "biome_deserialize_macros", + "biome_diagnostics", + "biome_json_parser", + "biome_json_syntax", + "pretty_assertions", + "serde", + "serde_json", + "thiserror", + "turbopath", + "turborepo-errors", +] + [[package]] name = "turborepo-napi" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 55a62f4dedef5..4b0a20b9e9a20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -57,6 +57,7 @@ turborepo-errors = { path = "crates/turborepo-errors" } turborepo-fs = { path = "crates/turborepo-fs" } turborepo-lib = { path = "crates/turborepo-lib", default-features = false } turborepo-lockfiles = { path = "crates/turborepo-lockfiles" } +turborepo-micro-frontend = { path = "crates/turborepo-micro-frontend" } turborepo-repository = { path = "crates/turborepo-repository" } turborepo-ui = { path = "crates/turborepo-ui" } turborepo-unescape = { path = "crates/turborepo-unescape" } diff --git a/crates/turborepo-lib/Cargo.toml b/crates/turborepo-lib/Cargo.toml index b7a6b4234034c..644cc96eecac6 100644 --- a/crates/turborepo-lib/Cargo.toml +++ b/crates/turborepo-lib/Cargo.toml @@ -133,6 +133,7 @@ turborepo-filewatch = { path = "../turborepo-filewatch" } turborepo-fs = { path = "../turborepo-fs" } turborepo-graph-utils = { path = "../turborepo-graph-utils" } turborepo-lockfiles = { workspace = true } +turborepo-micro-frontend = { workspace = true } turborepo-repository = { path = "../turborepo-repository" } turborepo-scm = { workspace = true } turborepo-telemetry = { path = "../turborepo-telemetry" } diff --git a/crates/turborepo-lib/src/engine/mod.rs b/crates/turborepo-lib/src/engine/mod.rs index 81176f6e5c16b..f852c1f2a03fb 100644 --- a/crates/turborepo-lib/src/engine/mod.rs +++ b/crates/turborepo-lib/src/engine/mod.rs @@ -404,7 +404,10 @@ impl Engine { .filter_map(|task| { let pkg_name = PackageName::from(task.package()); let json = pkg_graph.package_json(&pkg_name)?; - json.command(task.task()).map(|_| task.to_string()) + // TODO: delegate to command factory to filter down tasks to those that will + // have a runnable command. + (task.task() == "proxy" || json.command(task.task()).is_some()) + .then(|| task.to_string()) }) .collect() } diff --git a/crates/turborepo-lib/src/lib.rs b/crates/turborepo-lib/src/lib.rs index 5124adb23d036..4bda1819c4407 100644 --- a/crates/turborepo-lib/src/lib.rs +++ b/crates/turborepo-lib/src/lib.rs @@ -23,6 +23,7 @@ mod framework; mod gitignore; pub(crate) mod globwatcher; mod hash; +mod micro_frontends; mod opts; mod package_changes_watcher; mod panic_handler; diff --git a/crates/turborepo-lib/src/micro_frontends.rs b/crates/turborepo-lib/src/micro_frontends.rs new file mode 100644 index 0000000000000..341e0b4e30ceb --- /dev/null +++ b/crates/turborepo-lib/src/micro_frontends.rs @@ -0,0 +1,52 @@ +use std::collections::{HashMap, HashSet}; + +use turbopath::AbsoluteSystemPath; +use turborepo_micro_frontend::{Config as MFEConfig, Error, DEFAULT_MICRO_FRONTENDS_CONFIG}; +use turborepo_repository::package_graph::PackageGraph; + +use crate::run::task_id::TaskId; + +#[derive(Debug, Clone)] +pub struct MicroFrontendsConfigs { + configs: HashMap>>, +} + +impl MicroFrontendsConfigs { + pub fn new( + repo_root: &AbsoluteSystemPath, + package_graph: &PackageGraph, + ) -> Result, Error> { + let mut configs = HashMap::new(); + for (package_name, package_info) in package_graph.packages() { + let config_path = repo_root + .resolve(package_info.package_path()) + .join_component(DEFAULT_MICRO_FRONTENDS_CONFIG); + let Some(config) = MFEConfig::load(&config_path)? else { + continue; + }; + let tasks = config + .applications + .iter() + .map(|(application, options)| { + let dev_task = options.development.task.as_deref().unwrap_or("dev"); + TaskId::new(application, dev_task).into_owned() + }) + .collect(); + configs.insert(package_name.to_string(), tasks); + } + + Ok((!configs.is_empty()).then_some(Self { configs })) + } + + pub fn contains_package(&self, package_name: &str) -> bool { + self.configs.contains_key(package_name) + } + + pub fn configs(&self) -> impl Iterator>)> { + self.configs.iter() + } + + pub fn get(&self, package_name: &str) -> Option<&HashSet>> { + self.configs.get(package_name) + } +} diff --git a/crates/turborepo-lib/src/process/command.rs b/crates/turborepo-lib/src/process/command.rs index 1bf0a8f1b92b2..a8814f8229871 100644 --- a/crates/turborepo-lib/src/process/command.rs +++ b/crates/turborepo-lib/src/process/command.rs @@ -101,6 +101,11 @@ impl Command { pub fn will_open_stdin(&self) -> bool { self.open_stdin } + + /// Program for the command + pub fn program(&self) -> &OsStr { + &self.program + } } impl From for tokio::process::Command { diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index dbfaa33f8324f..aeb4ac081ae5e 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -6,6 +6,7 @@ use std::{ }; use chrono::Local; +use itertools::Itertools; use tracing::debug; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use turborepo_analytics::{start_analytics, AnalyticsHandle, AnalyticsSender}; @@ -37,10 +38,12 @@ use { }, }; +use super::task_id::TaskId; use crate::{ cli::DryRunMode, commands::CommandBase, engine::{Engine, EngineBuilder}, + micro_frontends::MicroFrontendsConfigs, opts::Opts, process::ProcessManager, run::{scope, task_access::TaskAccess, task_id::TaskName, Error, Run, RunCache}, @@ -370,6 +373,7 @@ impl RunBuilder { repo_telemetry.track_package_manager(pkg_dep_graph.package_manager().to_string()); repo_telemetry.track_size(pkg_dep_graph.len()); run_telemetry.track_run_type(self.opts.run_opts.dry_run.is_some()); + let micro_frontend_configs = MicroFrontendsConfigs::new(&self.repo_root, &pkg_dep_graph)?; let scm = scm.await.expect("detecting scm panicked"); let async_cache = AsyncCache::new( @@ -401,6 +405,13 @@ impl RunBuilder { self.repo_root.clone(), pkg_dep_graph.packages(), ) + } else if let Some(micro_frontends) = µ_frontend_configs { + TurboJsonLoader::workspace_with_microfrontends( + self.repo_root.clone(), + self.root_turbo_json_path.clone(), + pkg_dep_graph.packages(), + micro_frontends.clone(), + ) } else { TurboJsonLoader::workspace( self.repo_root.clone(), @@ -427,6 +438,7 @@ impl RunBuilder { &root_turbo_json, filtered_pkgs.keys(), turbo_json_loader.clone(), + micro_frontend_configs.as_ref(), )?; if self.opts.run_opts.parallel { @@ -436,6 +448,7 @@ impl RunBuilder { &root_turbo_json, filtered_pkgs.keys(), turbo_json_loader, + micro_frontend_configs.as_ref(), )?; } @@ -476,6 +489,7 @@ impl RunBuilder { signal_handler: signal_handler.clone(), daemon, should_print_prelude, + micro_frontend_configs, }) } @@ -485,7 +499,52 @@ impl RunBuilder { root_turbo_json: &TurboJson, filtered_pkgs: impl Iterator, turbo_json_loader: TurboJsonLoader, + micro_frontends_configs: Option<&MicroFrontendsConfigs>, ) -> Result { + let mut tasks = self + .opts + .run_opts + .tasks + .iter() + .map(|task| { + // TODO: Pull span info from command + Spanned::new(TaskName::from(task.as_str()).into_owned()) + }) + .collect::>(); + let mut workspace_packages = filtered_pkgs.cloned().collect::>(); + if let Some(micro_frontends_configs) = micro_frontends_configs { + // TODO: this logic is very similar to what happens inside engine builder and + // could probably be exposed + let tasks_from_filter = workspace_packages + .iter() + .map(|package| package.as_str()) + .cartesian_product(tasks.iter()) + .map(|(package, task)| { + task.task_id().map_or_else( + || TaskId::new(package, task.task()).into_owned(), + |task_id| task_id.into_owned(), + ) + }) + .collect::>(); + // we need to add the MFE config packages into the scope here to make sure the + // proxy gets run + // TODO(olszewski): We are relying on the fact that persistent tasks must be + // entry points to the task graph so we can get away with only + // checking the entrypoint tasks. + for (mfe_config_package, dev_tasks) in micro_frontends_configs.configs() { + for dev_task in dev_tasks { + if tasks_from_filter.contains(dev_task) { + workspace_packages.push(PackageName::from(mfe_config_package.as_str())); + tasks.push(Spanned::new( + TaskId::new(mfe_config_package, "proxy") + .as_task_name() + .into_owned(), + )); + break; + } + } + } + } let mut builder = EngineBuilder::new( &self.repo_root, pkg_dep_graph, @@ -494,11 +553,8 @@ impl RunBuilder { ) .with_root_tasks(root_turbo_json.tasks.keys().cloned()) .with_tasks_only(self.opts.run_opts.only) - .with_workspaces(filtered_pkgs.cloned().collect()) - .with_tasks(self.opts.run_opts.tasks.iter().map(|task| { - // TODO: Pull span info from command - Spanned::new(TaskName::from(task.as_str()).into_owned()) - })); + .with_workspaces(workspace_packages) + .with_tasks(tasks); if self.add_all_tasks { builder = builder.add_all_tasks(); diff --git a/crates/turborepo-lib/src/run/error.rs b/crates/turborepo-lib/src/run/error.rs index b0806dd18a47b..e4ba94be2a5af 100644 --- a/crates/turborepo-lib/src/run/error.rs +++ b/crates/turborepo-lib/src/run/error.rs @@ -60,4 +60,6 @@ pub enum Error { UI(#[from] turborepo_ui::Error), #[error(transparent)] Tui(#[from] tui::Error), + #[error("Error reading micro frontends configuration: {0}")] + MicroFrontends(#[from] turborepo_micro_frontend::Error), } diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index c94fb8fed7d3b..efe0c9c7dd3e9 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -41,6 +41,7 @@ pub use crate::run::error::Error; use crate::{ cli::EnvMode, engine::Engine, + micro_frontends::MicroFrontendsConfigs, opts::Opts, process::ProcessManager, run::{global_hash::get_global_hash_inputs, summary::RunTracker, task_access::TaskAccess}, @@ -73,6 +74,7 @@ pub struct Run { task_access: TaskAccess, daemon: Option>, should_print_prelude: bool, + micro_frontend_configs: Option, } type UIResult = Result>)>, Error>; @@ -460,6 +462,7 @@ impl Run { global_env, ui_sender, is_watch, + self.micro_frontend_configs.as_ref(), ) .await; diff --git a/crates/turborepo-lib/src/task_graph/visitor/command.rs b/crates/turborepo-lib/src/task_graph/visitor/command.rs index 79135d94f519b..b211d57c60e92 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/command.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/command.rs @@ -1,21 +1,69 @@ -use std::path::PathBuf; +use std::{collections::HashSet, path::PathBuf}; use turbopath::AbsoluteSystemPath; use turborepo_env::EnvironmentVariableMap; -use turborepo_repository::package_graph::{PackageGraph, PackageName}; +use turborepo_micro_frontend::MICRO_FRONTENDS_PACKAGES; +use turborepo_repository::package_graph::{PackageGraph, PackageInfo, PackageName}; use super::Error; -use crate::{opts::TaskArgs, process::Command, run::task_id::TaskId}; +use crate::{ + engine::Engine, micro_frontends::MicroFrontendsConfigs, opts::TaskArgs, process::Command, + run::task_id::TaskId, +}; -#[derive(Debug)] +pub trait CommandProvider { + fn command( + &self, + task_id: &TaskId, + environment: EnvironmentVariableMap, + ) -> Result, Error>; +} + +/// A collection of command providers. +/// +/// Will attempt to find a command from any of the providers it contains. +/// Ordering of the providers matters as the first present command will be +/// returned. Any errors returned by the providers will be immediately returned. pub struct CommandFactory<'a> { + providers: Vec>, +} + +impl<'a> CommandFactory<'a> { + pub fn new() -> Self { + Self { + providers: Vec::new(), + } + } + + pub fn add_provider(&mut self, provider: impl CommandProvider + 'a + Send) -> &mut Self { + self.providers.push(Box::new(provider)); + self + } + + pub fn command( + &self, + task_id: &TaskId, + environment: EnvironmentVariableMap, + ) -> Result, Error> { + for provider in self.providers.iter() { + let cmd = provider.command(task_id, environment.clone())?; + if cmd.is_some() { + return Ok(cmd); + } + } + Ok(None) + } +} + +#[derive(Debug)] +pub struct PackageGraphCommandProvider<'a> { repo_root: &'a AbsoluteSystemPath, package_graph: &'a PackageGraph, package_manager_binary: Result, task_args: TaskArgs<'a>, } -impl<'a> CommandFactory<'a> { +impl<'a> PackageGraphCommandProvider<'a> { pub fn new( repo_root: &'a AbsoluteSystemPath, package_graph: &'a PackageGraph, @@ -30,18 +78,23 @@ impl<'a> CommandFactory<'a> { } } - pub fn command( - &self, - task_id: &TaskId, - environment: EnvironmentVariableMap, - ) -> Result, Error> { - let workspace_info = self - .package_graph + fn package_info(&self, task_id: &TaskId) -> Result<&PackageInfo, Error> { + self.package_graph .package_info(&PackageName::from(task_id.package())) .ok_or_else(|| Error::MissingPackage { package_name: task_id.package().into(), task_id: task_id.clone().into_owned(), - })?; + }) + } +} + +impl<'a> CommandProvider for PackageGraphCommandProvider<'a> { + fn command( + &self, + task_id: &TaskId, + environment: EnvironmentVariableMap, + ) -> Result, Error> { + let workspace_info = self.package_info(task_id)?; // bail if the script doesn't exist or is empty if workspace_info @@ -80,3 +133,183 @@ impl<'a> CommandFactory<'a> { Ok(Some(cmd)) } } + +#[derive(Debug)] +pub struct MicroFrontendProxyProvider<'a> { + repo_root: &'a AbsoluteSystemPath, + package_graph: &'a PackageGraph, + tasks_in_graph: HashSet>, + mfe_configs: &'a MicroFrontendsConfigs, +} + +impl<'a> MicroFrontendProxyProvider<'a> { + pub fn new( + repo_root: &'a AbsoluteSystemPath, + package_graph: &'a PackageGraph, + engine: &Engine, + micro_frontends_configs: &'a MicroFrontendsConfigs, + ) -> Self { + let tasks_in_graph = engine + .tasks() + .filter_map(|task| match task { + crate::engine::TaskNode::Task(task_id) => Some(task_id), + crate::engine::TaskNode::Root => None, + }) + .cloned() + .collect(); + Self { + repo_root, + package_graph, + tasks_in_graph, + mfe_configs: micro_frontends_configs, + } + } + + fn dev_tasks(&self, task_id: &TaskId) -> Option<&HashSet>> { + (task_id.task() == "proxy") + .then(|| self.mfe_configs.get(task_id.package())) + .flatten() + } + + fn package_info(&self, task_id: &TaskId) -> Result<&PackageInfo, Error> { + self.package_graph + .package_info(&PackageName::from(task_id.package())) + .ok_or_else(|| Error::MissingPackage { + package_name: task_id.package().into(), + task_id: task_id.clone().into_owned(), + }) + } +} + +impl<'a> CommandProvider for MicroFrontendProxyProvider<'a> { + fn command( + &self, + task_id: &TaskId, + _environment: EnvironmentVariableMap, + ) -> Result, Error> { + let Some(dev_tasks) = self.dev_tasks(task_id) else { + return Ok(None); + }; + let package_info = self.package_info(task_id)?; + let has_mfe_dependency = package_info + .package_json + .all_dependencies() + .any(|(package, _version)| MICRO_FRONTENDS_PACKAGES.contains(&package.as_str())); + if !has_mfe_dependency { + return Err(Error::MissingMFEDependency { + package: task_id.package().into(), + }); + } + let local_apps = dev_tasks + .iter() + .filter(|task| self.tasks_in_graph.contains(task)) + .map(|task| task.package()); + let package_dir = self.repo_root.resolve(package_info.package_path()); + let mfe_path = package_dir.join_component("micro-frontends.jsonc"); + let mut args = vec!["proxy", mfe_path.as_str(), "--names"]; + args.extend(local_apps); + + // TODO: leverage package manager to find the local proxy + let program = package_dir.join_components(&["node_modules", ".bin", "micro-frontends"]); + let mut cmd = Command::new(program.as_std_path()); + cmd.current_dir(package_dir).args(args).open_stdin(); + + Ok(Some(cmd)) + } +} + +#[cfg(test)] +mod test { + use std::ffi::OsStr; + + use insta::assert_snapshot; + + use super::*; + + struct EchoCmdFactory; + + impl CommandProvider for EchoCmdFactory { + fn command( + &self, + _task_id: &TaskId, + _environment: EnvironmentVariableMap, + ) -> Result, Error> { + Ok(Some(Command::new("echo"))) + } + } + + struct ErrProvider; + + impl CommandProvider for ErrProvider { + fn command( + &self, + _task_id: &TaskId, + _environment: EnvironmentVariableMap, + ) -> Result, Error> { + Err(Error::InternalErrors("oops!".into())) + } + } + + struct NoneProvider; + + impl CommandProvider for NoneProvider { + fn command( + &self, + _task_id: &TaskId, + _environment: EnvironmentVariableMap, + ) -> Result, Error> { + Ok(None) + } + } + + #[test] + fn test_first_present_cmd_returned() { + let mut factory = CommandFactory::new(); + factory + .add_provider(EchoCmdFactory) + .add_provider(ErrProvider); + let task_id = TaskId::new("foo", "build"); + let cmd = factory + .command(&task_id, EnvironmentVariableMap::default()) + .unwrap() + .unwrap(); + assert_eq!(cmd.program(), OsStr::new("echo")); + } + + #[test] + fn test_error_short_circuits_factory() { + let mut factory = CommandFactory::new(); + factory + .add_provider(ErrProvider) + .add_provider(EchoCmdFactory); + let task_id = TaskId::new("foo", "build"); + let cmd = factory + .command(&task_id, EnvironmentVariableMap::default()) + .unwrap_err(); + assert_snapshot!(cmd.to_string(), @"internal errors encountered: oops!"); + } + + #[test] + fn test_none_values_filtered() { + let mut factory = CommandFactory::new(); + factory + .add_provider(EchoCmdFactory) + .add_provider(NoneProvider); + let task_id = TaskId::new("foo", "build"); + let cmd = factory + .command(&task_id, EnvironmentVariableMap::default()) + .unwrap() + .unwrap(); + assert_eq!(cmd.program(), OsStr::new("echo")); + } + + #[test] + fn test_none_returned_if_no_commands_found() { + let factory = CommandFactory::new(); + let task_id = TaskId::new("foo", "build"); + let cmd = factory + .command(&task_id, EnvironmentVariableMap::default()) + .unwrap(); + assert!(cmd.is_none(), "expected no cmd, got {cmd:?}"); + } +} diff --git a/crates/turborepo-lib/src/task_graph/visitor/exec.rs b/crates/turborepo-lib/src/task_graph/visitor/exec.rs index 811fd198a6b0b..d41a34043dadf 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/exec.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/exec.rs @@ -13,7 +13,7 @@ use turborepo_telemetry::events::{task::PackageTaskEventBuilder, TrackedErrors}; use turborepo_ui::{ColorConfig, OutputWriter}; use super::{ - command::CommandFactory, + command::{CommandFactory, MicroFrontendProxyProvider, PackageGraphCommandProvider}, error::{TaskError, TaskErrorCause, TaskWarning}, output::TaskCacheOutput, TaskOutput, Visitor, @@ -46,11 +46,22 @@ impl<'a> ExecContextFactory<'a> { manager: ProcessManager, engine: &'a Arc, ) -> Result { - let command_factory = CommandFactory::new( + let pkg_graph_provider = PackageGraphCommandProvider::new( visitor.repo_root, &visitor.package_graph, visitor.run_opts.task_args(), ); + let mut command_factory = CommandFactory::new(); + if let Some(micro_frontends_configs) = visitor.micro_frontends_configs { + command_factory.add_provider(MicroFrontendProxyProvider::new( + visitor.repo_root, + &visitor.package_graph, + engine, + micro_frontends_configs, + )); + } + command_factory.add_provider(pkg_graph_provider); + Ok(Self { visitor, errors, diff --git a/crates/turborepo-lib/src/task_graph/visitor/mod.rs b/crates/turborepo-lib/src/task_graph/visitor/mod.rs index 0d8db7fa3cc55..6dd29bce6ba96 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/mod.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/mod.rs @@ -23,6 +23,7 @@ use tracing::{debug, error, warn, Span}; use turbopath::{AbsoluteSystemPath, AnchoredSystemPath}; use turborepo_ci::{Vendor, VendorBehavior}; use turborepo_env::{platform::PlatformEnv, EnvironmentVariableMap}; +use turborepo_micro_frontend::DEFAULT_MICRO_FRONTENDS_CONFIG; use turborepo_repository::package_graph::{PackageGraph, PackageName, ROOT_PKG_NAME}; use turborepo_telemetry::events::{ generic::GenericEventBuilder, task::PackageTaskEventBuilder, EventBuilder, TrackedErrors, @@ -34,6 +35,7 @@ use turborepo_ui::{ use crate::{ cli::EnvMode, engine::{Engine, ExecutionOptions}, + micro_frontends::MicroFrontendsConfigs, opts::RunOpts, process::ProcessManager, run::{ @@ -65,6 +67,7 @@ pub struct Visitor<'a> { is_watch: bool, ui_sender: Option, warnings: Arc>>, + micro_frontends_configs: Option<&'a MicroFrontendsConfigs>, } #[derive(Debug, thiserror::Error, Diagnostic)] @@ -97,6 +100,11 @@ pub enum Error { InternalErrors(String), #[error("unable to find package manager binary: {0}")] Which(#[from] which::Error), + #[error( + "'{package}' is configured with a {DEFAULT_MICRO_FRONTENDS_CONFIG}, but doesn't have \ + '@vercel/microfrontends' listed as a dependency" + )] + MissingMFEDependency { package: String }, } impl<'a> Visitor<'a> { @@ -119,6 +127,7 @@ impl<'a> Visitor<'a> { global_env: EnvironmentVariableMap, ui_sender: Option, is_watch: bool, + micro_frontends_configs: Option<&'a MicroFrontendsConfigs>, ) -> Self { let task_hasher = TaskHasher::new( package_inputs_hashes, @@ -155,6 +164,7 @@ impl<'a> Visitor<'a> { ui_sender, is_watch, warnings: Default::default(), + micro_frontends_configs, } } diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs index 603ec5297306c..4a4ddbda55bfc 100644 --- a/crates/turborepo-lib/src/turbo_json/loader.rs +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -12,6 +12,7 @@ use super::{Pipeline, RawTaskDefinition, TurboJson, CONFIG_FILE}; use crate::{ cli::EnvMode, config::Error, + micro_frontends::MicroFrontendsConfigs, run::{task_access::TASK_ACCESS_CONFIG_PATH, task_id::TaskName}, }; @@ -34,6 +35,7 @@ enum Strategy { Workspace { // Map of package names to their package specific turbo.json packages: HashMap, + micro_frontends_configs: Option, }, WorkspaceNoTurboJson { // Map of package names to their scripts @@ -57,7 +59,28 @@ impl TurboJsonLoader { Self { repo_root, cache: HashMap::new(), - strategy: Strategy::Workspace { packages }, + strategy: Strategy::Workspace { + packages, + micro_frontends_configs: None, + }, + } + } + + /// Create a loader that will load turbo.json files throughout the workspace + pub fn workspace_with_microfrontends<'a>( + repo_root: AbsoluteSystemPathBuf, + root_turbo_json_path: AbsoluteSystemPathBuf, + packages: impl Iterator, + micro_frontends_configs: MicroFrontendsConfigs, + ) -> Self { + let packages = package_turbo_jsons(&repo_root, root_turbo_json_path, packages); + Self { + repo_root, + cache: HashMap::new(), + strategy: Strategy::Workspace { + packages, + micro_frontends_configs: Some(micro_frontends_configs), + }, } } @@ -147,9 +170,25 @@ impl TurboJsonLoader { load_from_root_package_json(&self.repo_root, root_turbo_json, package_json) } } - Strategy::Workspace { packages } => { + Strategy::Workspace { + packages, + micro_frontends_configs, + } => { let path = packages.get(package).ok_or_else(|| Error::NoTurboJSON)?; - load_from_file(&self.repo_root, path) + let should_inject_proxy_task = micro_frontends_configs + .as_ref() + .map_or(false, |configs| configs.contains_package(package.as_str())); + let turbo_json = load_from_file(&self.repo_root, path); + if should_inject_proxy_task { + let mut turbo_json = turbo_json.or_else(|err| match err { + Error::NoTurboJSON => Ok(TurboJson::default()), + err => Err(err), + })?; + turbo_json.with_proxy(); + Ok(turbo_json) + } else { + turbo_json + } } Strategy::WorkspaceNoTurboJson { packages } => { let script_names = packages.get(package).ok_or(Error::NoTurboJSON)?; @@ -385,6 +424,7 @@ mod test { packages: vec![(PackageName::Root, root_turbo_json)] .into_iter() .collect(), + micro_frontends_configs: None, }, }; @@ -581,7 +621,10 @@ mod test { let mut loader = TurboJsonLoader { repo_root: repo_root.to_owned(), cache: HashMap::new(), - strategy: Strategy::Workspace { packages }, + strategy: Strategy::Workspace { + packages, + micro_frontends_configs: None, + }, }; let result = loader.load(&PackageName::from("a")); assert!( @@ -610,7 +653,10 @@ mod test { let mut loader = TurboJsonLoader { repo_root: repo_root.to_owned(), cache: HashMap::new(), - strategy: Strategy::Workspace { packages }, + strategy: Strategy::Workspace { + packages, + micro_frontends_configs: None, + }, }; a_turbo_json .create_with_contents(r#"{"tasks": {"build": {}}}"#) diff --git a/crates/turborepo-lib/src/turbo_json/mod.rs b/crates/turborepo-lib/src/turbo_json/mod.rs index 5c14cbaf6be11..afa025dfc652e 100644 --- a/crates/turborepo-lib/src/turbo_json/mod.rs +++ b/crates/turborepo-lib/src/turbo_json/mod.rs @@ -608,6 +608,21 @@ impl TurboJson { .iter() .any(|(task_name, _)| task_name.package() == Some(ROOT_PKG_NAME)) } + + /// Adds a local proxy task to a workspace TurboJson + pub fn with_proxy(&mut self) { + if self.extends.is_empty() { + self.extends = Spanned::new(vec!["//".into()]); + } + + self.tasks.insert( + TaskName::from("proxy"), + Spanned::new(RawTaskDefinition { + cache: Some(Spanned::new(false)), + ..Default::default() + }), + ); + } } type TurboJSONValidation = fn(&TurboJson) -> Vec; diff --git a/crates/turborepo-micro-frontend/Cargo.toml b/crates/turborepo-micro-frontend/Cargo.toml new file mode 100644 index 0000000000000..3c20340f1da70 --- /dev/null +++ b/crates/turborepo-micro-frontend/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "turborepo-micro-frontend" +version = "0.1.0" +edition = "2021" +license = "MIT" + +[dependencies] +biome_deserialize = { workspace = true } +biome_deserialize_macros = { workspace = true } +biome_diagnostics = { workspace = true } +biome_json_parser = { workspace = true } +biome_json_syntax = { workspace = true } +serde = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } +turbopath = { workspace = true } +turborepo-errors = { workspace = true } + +[dev-dependencies] +pretty_assertions = { workspace = true } + +[lints] +workspace = true diff --git a/crates/turborepo-micro-frontend/fixtures/sample.jsonc b/crates/turborepo-micro-frontend/fixtures/sample.jsonc new file mode 100644 index 0000000000000..38ef07308d98b --- /dev/null +++ b/crates/turborepo-micro-frontend/fixtures/sample.jsonc @@ -0,0 +1,133 @@ +{ + "version": "1", + "applications": { + "main-site": { + "default": true, + "development": { + "local": { + "protocol": "http", + "host": "localhost", + "port": 3331 + }, + "fallback": { + "protocol": "https", + "host": "main-preview.sh" + } + }, + "production": { + "protocol": "https", + "host": "main.com" + }, + "vercel": { + "projectId": "id1", + "projectName": "main-site" + } + }, + "vercel-marketing": { + "default": false, + "routing": { + "assetPrefix": "market-site", + "matches": [ + { + "group": "blog", + "paths": [ + "/blog", + "/blog/:slug*", + "/press", + "/changelog", + "/changelog/:slug*", + "/customers/:slug*" + ] + }, + { + "group": "navbar", + "paths": [ + "/", + "/contact", + "/pricing", + "/enterprise", + // Resources + "/customers", + "/solutions/composable-commerce" + ] + } + ] + }, + "development": { + "local": { + "protocol": "http", + "host": "localhost", + "port": 3332 + }, + "fallback": { + "protocol": "https", + "host": "market-preview.sh" + } + }, + "production": { + "protocol": "https", + "host": "market.main.com" + }, + "vercel": { + "projectId": "id2", + "projectName": "market-site" + } + }, + "foo-docs": { + "default": false, + "routing": { + "assetPrefix": "foo", + "matches": [ + { + "paths": ["/foo/:path*"] + } + ] + }, + "development": { + "fallback": { + "protocol": "https", + "host": "foo-preview.sh" + }, + "local": { + "protocol": "http", + "host": "localhost", + "port": 3333 + } + }, + "production": { + "protocol": "https", + "host": "foo.main.com" + }, + "vercel": { + "projectId": "id3", + "projectName": "foo-docs" + } + }, + "docs": { + "default": false, + "routing": { + "assetPrefix": "docs", + "matches": [] + }, + "development": { + "fallback": { + "protocol": "https", + "host": "docs-preview.sh" + }, + "local": { + "protocol": "http", + "host": "localhost", + "port": 3334 + } + }, + "production": { + "protocol": "https", + "host": "docs.main.com" + }, + "vercel": { + "projectId": "id4", + "projectName": "docs-site" + } + } + } +} diff --git a/crates/turborepo-micro-frontend/src/error.rs b/crates/turborepo-micro-frontend/src/error.rs new file mode 100644 index 0000000000000..f13eba267362b --- /dev/null +++ b/crates/turborepo-micro-frontend/src/error.rs @@ -0,0 +1,20 @@ +use turborepo_errors::ParseDiagnostic; + +#[derive(Debug, thiserror::Error)] +pub enum Error { + #[error("Unable to read configuration file: {0}")] + Io(#[from] std::io::Error), + #[error("Unable to parse JSON: {0}")] + JsonParse(String), +} + +impl Error { + /// Constructs an error message from multiple biome diagnostic errors + pub fn biome_error(errors: Vec) -> Self { + let error_messages = errors + .into_iter() + .map(|err| ParseDiagnostic::from(err).to_string()) + .collect::>(); + Self::JsonParse(error_messages.join("\n")) + } +} diff --git a/crates/turborepo-micro-frontend/src/lib.rs b/crates/turborepo-micro-frontend/src/lib.rs new file mode 100644 index 0000000000000..8a0cabc54ff39 --- /dev/null +++ b/crates/turborepo-micro-frontend/src/lib.rs @@ -0,0 +1,73 @@ +#![deny(clippy::all)] +mod error; + +use std::collections::BTreeMap; + +use biome_deserialize_macros::Deserializable; +use biome_json_parser::JsonParserOptions; +pub use error::Error; +use serde::Serialize; +use turbopath::AbsoluteSystemPath; + +/// Currently the default path for a package that provides a configuration. +/// +/// This is subject to change at any time. +pub const DEFAULT_MICRO_FRONTENDS_CONFIG: &str = "micro-frontends.jsonc"; +pub const MICRO_FRONTENDS_PACKAGES: &[&str] = ["@vercel/micro-frontends-internal"].as_slice(); + +/// The minimal amount of information Turborepo needs to correctly start a local +/// proxy server for microfrontends +#[derive(Debug, PartialEq, Eq, Serialize, Deserializable, Default)] +pub struct Config { + pub version: String, + pub applications: BTreeMap, +} + +impl Config { + /// Reads config from given path. + /// Returns `Ok(None)` if the file does not exist + pub fn load(config_path: &AbsoluteSystemPath) -> Result, Error> { + let Some(contents) = config_path.read_existing_to_string()? else { + return Ok(None); + }; + let config = Self::from_str(&contents, config_path.as_str()).map_err(Error::biome_error)?; + Ok(Some(config)) + } + + pub fn from_str(input: &str, source: &str) -> Result> { + let (config, errs) = biome_deserialize::json::deserialize_from_json_str( + input, + JsonParserOptions::default().with_allow_comments(), + source, + ) + .consume(); + if let Some(config) = config { + Ok(config) + } else { + Err(errs) + } + } +} + +#[derive(Debug, PartialEq, Eq, Serialize, Deserializable, Default)] +pub struct Application { + pub development: Development, +} + +#[derive(Debug, PartialEq, Eq, Serialize, Deserializable, Default)] +pub struct Development { + #[serde(skip_serializing_if = "Option::is_none")] + pub task: Option, +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_example_parses() { + let input = include_str!("../fixtures/sample.jsonc"); + let example_config = Config::from_str(input, "something.json"); + assert!(example_config.is_ok()); + } +} diff --git a/crates/turborepo-repository/src/package_graph/mod.rs b/crates/turborepo-repository/src/package_graph/mod.rs index bdff72e1d862b..439fabf97e1dd 100644 --- a/crates/turborepo-repository/src/package_graph/mod.rs +++ b/crates/turborepo-repository/src/package_graph/mod.rs @@ -109,6 +109,15 @@ impl Serialize for PackageName { } } +impl PackageName { + pub fn as_str(&self) -> &str { + match self { + PackageName::Root => ROOT_PKG_NAME, + PackageName::Other(name) => name, + } + } +} + #[derive(Debug, Clone, Hash, Eq, PartialEq, Ord, PartialOrd)] pub enum PackageNode { Root, From b1479dd5d87b9a04bee35becbb4935fbf5c11f55 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 31 Oct 2024 14:18:44 -0600 Subject: [PATCH 131/218] (chore): Update outdated error message referring to experimental UI. (#9359) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Leftover from when UI used to be experimental! ### Testing Instructions 👀 --- crates/turborepo-lib/src/engine/mod.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-lib/src/engine/mod.rs b/crates/turborepo-lib/src/engine/mod.rs index f852c1f2a03fb..6de56e27e24f2 100644 --- a/crates/turborepo-lib/src/engine/mod.rs +++ b/crates/turborepo-lib/src/engine/mod.rs @@ -574,8 +574,8 @@ pub enum ValidateError { concurrency: u32, }, #[error( - "Cannot run interactive task \"{task}\" without experimental UI. Set `\"experimentalUI\": \ - true` in `turbo.json` or `TURBO_EXPERIMENTAL_UI=true` as an environment variable" + "Cannot run interactive task \"{task}\" without Terminal UI. Set `\"ui\": true` in \ + `turbo.json`, use the `--ui=tui` flag, or set `TURBO_UI=true` as an environment variable." )] InteractiveNeedsUI { task: String }, } From f4059b4dcd5b0d23ee9723b49c4096e8de1e207a Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 31 Oct 2024 16:56:37 -0400 Subject: [PATCH 132/218] hack(js): bump codemod test timeout (#9361) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description I have tried 5 times to cut a release. Temporarily bumping these so I can get one out. See https://github.com/vercel/turborepo/actions/runs/11619011909/job/32359529053 ### Testing Instructions 👀 --- .../get-turbo-upgrade-command.test.ts | 78 ++++++++++--------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts index ac8b97dd4287c..f3a5b2ee967fe 100644 --- a/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts +++ b/packages/turbo-codemod/__tests__/get-turbo-upgrade-command.test.ts @@ -597,7 +597,7 @@ describe("get-turbo-upgrade-command", () => { mockedExec.mockRestore(); mockGetAvailablePackageManagers.mockRestore(); mockGetWorkspaceDetails.mockRestore(); - }); + }, 10000); it.each([ { @@ -612,47 +612,51 @@ describe("get-turbo-upgrade-command", () => { fixture: "no-deps", name: "fails gracefully if package.json has no deps or devDeps", }, - ])("$name", async ({ fixture }) => { - const { root } = useFixture({ - fixture, - }); - - const mockedExec = jest - .spyOn(utils, "exec") - .mockImplementation((command: string) => { - // fail the check for the turbo to force local - if (command.includes("bin")) { - return undefined; - } + ])( + "$name", + async ({ fixture }) => { + const { root } = useFixture({ + fixture, }); - const mockGetAvailablePackageManagers = jest - .spyOn(turboUtils, "getAvailablePackageManagers") - .mockResolvedValue({ - pnpm: "8.0.0", - npm: undefined, - yarn: undefined, - bun: undefined, + const mockedExec = jest + .spyOn(utils, "exec") + .mockImplementation((command: string) => { + // fail the check for the turbo to force local + if (command.includes("bin")) { + return undefined; + } + }); + + const mockGetAvailablePackageManagers = jest + .spyOn(turboUtils, "getAvailablePackageManagers") + .mockResolvedValue({ + pnpm: "8.0.0", + npm: undefined, + yarn: undefined, + bun: undefined, + }); + + const project = getWorkspaceDetailsMockReturnValue({ + root, + packageManager: "pnpm", }); + const mockGetWorkspaceDetails = jest + .spyOn(turboWorkspaces, "getWorkspaceDetails") + .mockResolvedValue(project); - const project = getWorkspaceDetailsMockReturnValue({ - root, - packageManager: "pnpm", - }); - const mockGetWorkspaceDetails = jest - .spyOn(turboWorkspaces, "getWorkspaceDetails") - .mockResolvedValue(project); - - // get the command - const upgradeCommand = await getTurboUpgradeCommand({ - project, - }); + // get the command + const upgradeCommand = await getTurboUpgradeCommand({ + project, + }); - expect(upgradeCommand).toEqual(undefined); + expect(upgradeCommand).toEqual(undefined); - mockedExec.mockRestore(); - mockGetAvailablePackageManagers.mockRestore(); - mockGetWorkspaceDetails.mockRestore(); - }); + mockedExec.mockRestore(); + mockGetAvailablePackageManagers.mockRestore(); + mockGetWorkspaceDetails.mockRestore(); + }, + 10000 + ); }); }); From a140fc7ec5ceeecccc3922a2244fc2496454f89a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 07:51:16 -0400 Subject: [PATCH 133/218] release(turborepo): 2.2.4-canary.5 (#9362) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 86ae2f124d036..55851def58b35 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 989888842f385..0b2ecdc96ab08 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index ed32669d86167..2fc11f20dca7c 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index a26369bf1ea73..ffcc237279272 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 0c0e76cec9319..74feb956bec2e 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index a78b8f77ef0c8..e7710dcc93fac 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 37891b75c39bd..c655568299438 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index abcd18433ba25..248e16fc69def 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 391c96d955fc5..d84f7d9e7f27f 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.4", + "version": "2.2.4-canary.5", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.4", - "turbo-darwin-arm64": "2.2.4-canary.4", - "turbo-linux-64": "2.2.4-canary.4", - "turbo-linux-arm64": "2.2.4-canary.4", - "turbo-windows-64": "2.2.4-canary.4", - "turbo-windows-arm64": "2.2.4-canary.4" + "turbo-darwin-64": "2.2.4-canary.5", + "turbo-darwin-arm64": "2.2.4-canary.5", + "turbo-linux-64": "2.2.4-canary.5", + "turbo-linux-arm64": "2.2.4-canary.5", + "turbo-windows-64": "2.2.4-canary.5", + "turbo-windows-arm64": "2.2.4-canary.5" } } diff --git a/version.txt b/version.txt index ae9fdfb6eb3f5..afd16ccb13cd1 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.4 +2.2.4-canary.5 canary From 2121ba97913fbbeb8634acf655abcf5ba1a06cd5 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Fri, 1 Nov 2024 11:34:32 -0400 Subject: [PATCH 134/218] feat(trace): add export conditions `import` and `require` to trace resolver (#9360) ### Description `package.json` exports can be selected based on conditions such as whether the package is being imported as an esm `import` or a `require`. We added `import` and `require` as default conditions for the resolver so packages that define these conditions trace properly. ### Testing Instructions Added a test with `swr` which uses these package export conditions --- crates/turbo-trace/src/tracer.rs | 41 ++++++++++++++----- crates/turborepo-lib/src/query/file.rs | 3 +- crates/turborepo/tests/query.rs | 7 ++-- ...tions`_with_dependencies_(npm@10.5.0).snap | 20 +++++++++ .../fixtures/turbo_trace/export_conditions.js | 1 + .../fixtures/turbo_trace/package.json | 3 +- 6 files changed, 60 insertions(+), 15 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`export_conditions`_with_dependencies_(npm@10.5.0).snap create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/export_conditions.js diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 27e0602387b66..351c6ff0b0e76 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -33,8 +33,8 @@ pub struct Tracer { #[derive(Debug, Error, Diagnostic)] pub enum TraceError { - #[error("failed to parse file: {:?}", .0)] - ParseError(swc_ecma_parser::error::Error), + #[error("failed to parse file {}: {:?}", .0, .1)] + ParseError(AbsoluteSystemPathBuf, swc_ecma_parser::error::Error), #[error("failed to read file: {0}")] FileNotFound(AbsoluteSystemPathBuf), #[error(transparent)] @@ -124,7 +124,7 @@ impl Tracer { }) } else { Syntax::Es(EsSyntax { - jsx: file_path.extension() == Some("jsx"), + jsx: true, ..Default::default() }) }; @@ -142,7 +142,7 @@ impl Tracer { let module = match parser.parse_module() { Ok(module) => module, Err(err) => { - errors.push(TraceError::ParseError(err)); + errors.push(TraceError::ParseError(file_path.to_owned(), err)); return None; } }; @@ -198,6 +198,7 @@ impl Tracer { seen: &mut HashMap, ) { let file_resolver = Self::infer_resolver_with_ts_config(&file_path, resolver); + let resolver = file_resolver.as_ref().unwrap_or(resolver); if seen.contains_key(&file_path) { return; @@ -212,7 +213,7 @@ impl Tracer { let Some((imports, seen_file)) = Self::get_imports_from_file( &self.source_map, &mut self.errors, - file_resolver.as_ref().unwrap_or(resolver), + resolver, &file_path, self.import_type, ) @@ -233,17 +234,35 @@ impl Tracer { root: &AbsoluteSystemPath, existing_resolver: &Resolver, ) -> Option { - root.ancestors() + let resolver = root + .ancestors() .skip(1) .find(|p| p.join_component("tsconfig.json").exists()) - .map(|ts_config| { + .map(|ts_config_dir| { let mut options = existing_resolver.options().clone(); options.tsconfig = Some(TsconfigOptions { - config_file: ts_config.as_std_path().into(), + config_file: ts_config_dir + .join_component("tsconfig.json") + .as_std_path() + .into(), references: TsconfigReferences::Auto, }); existing_resolver.clone_with_options(options) + }); + + root.ancestors() + .skip(1) + .find(|p| p.join_component("node_modules").exists()) + .map(|node_modules_dir| { + let node_modules = node_modules_dir.join_component("node_modules"); + let resolver = resolver.as_ref().unwrap_or(existing_resolver); + let options = resolver + .options() + .clone() + .with_module(node_modules.to_string()); + + resolver.clone_with_options(options) }) } @@ -252,7 +271,8 @@ impl Tracer { .with_builtin_modules(true) .with_force_extension(EnforceExtension::Disabled) .with_extension(".ts") - .with_extension(".tsx"); + .with_extension(".tsx") + .with_condition_names(&["import", "require"]); if let Some(ts_config) = self.ts_config.take() { options.tsconfig = Some(TsconfigOptions { @@ -318,12 +338,13 @@ impl Tracer { let resolver = resolver.clone(); futures.spawn(async move { let file_resolver = Self::infer_resolver_with_ts_config(&file, &resolver); + let resolver = file_resolver.as_ref().unwrap_or(&resolver); let mut errors = Vec::new(); let Some((imported_files, seen_file)) = Self::get_imports_from_file( &shared_self.source_map, &mut errors, - file_resolver.as_ref().unwrap_or(&resolver), + resolver, &file, shared_self.import_type, ) diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index c1893d396ab3e..2b1d06112122c 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -99,8 +99,9 @@ impl From for TraceError { path: Some(path.to_string()), ..Default::default() }, - turbo_trace::TraceError::ParseError(e) => TraceError { + turbo_trace::TraceError::ParseError(path, e) => TraceError { message: format!("failed to parse file: {:?}", e), + path: Some(path.to_string()), ..Default::default() }, turbo_trace::TraceError::GlobError(err) => TraceError { diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index fdaf7ec8555ae..08414593677b1 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -50,9 +50,7 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `import_value_and_type.ts` with all dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: ALL) { files { items { path } } } } }", "get `import_value_and_type.ts` with type dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: TYPES) { files { items { path } } } } }", "get `import_value_and_type.ts` with value dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: VALUES) { files { items { path } } } } }", - "get `link.tsx` with all dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: ALL) { files { items { path } } } } }", - "get `link.tsx` with type dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: TYPES) { files { items { path } } } } }", - "get `link.tsx` with value dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: VALUES) { files { items { path } } } } }", + "get `export_conditions` with dependencies" => "query { file(path: \"export_conditions.js\") { path dependencies(depth: 1) { files { items { path } } } } }", ); Ok(()) @@ -82,6 +80,9 @@ fn test_reverse_trace() -> Result<(), anyhow::Error> { "npm@10.5.0", "query", "get `button.tsx` with dependents" => "query { file(path: \"button.tsx\") { path dependents { files { items { path } } } } }", + "get `link.tsx` with all dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: ALL) { files { items { path } } } } }", + "get `link.tsx` with type dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: TYPES) { files { items { path } } } } }", + "get `link.tsx` with value dependents" => "query { file(path: \"link.tsx\") { path dependents(importType: VALUES) { files { items { path } } } } }", ); Ok(()) diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`export_conditions`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`export_conditions`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..f014e64198a2b --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`export_conditions`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "export_conditions.js", + "dependencies": { + "files": { + "items": [ + { + "path": "node_modules/swr/dist/core/index.mjs" + } + ] + } + } + } + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/export_conditions.js b/turborepo-tests/integration/fixtures/turbo_trace/export_conditions.js new file mode 100644 index 0000000000000..208c8ea240e27 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/export_conditions.js @@ -0,0 +1 @@ +import useSWR from "swr"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace/package.json b/turborepo-tests/integration/fixtures/turbo_trace/package.json index 3fb9d50ee0b59..e175c2b051724 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace/package.json +++ b/turborepo-tests/integration/fixtures/turbo_trace/package.json @@ -5,7 +5,8 @@ "node": ">=18" }, "dependencies": { - "repeat-string": "^1.6.1" + "repeat-string": "^1.6.1", + "swr": "^2.2.5" }, "workspaces": [ "apps/*", From 5f7e80a1f30171931a2b46bf0618bb69694a25f4 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Fri, 1 Nov 2024 11:28:46 -0600 Subject: [PATCH 135/218] refactor(tui): Use color instead of bars to distinguish sections of task list. (#9365) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Screen real estate is valuable. We were using horizontal bars to distinguish the header and footer from the task list itself. Instead, let's use color, and get rid of the bars. ### Testing Instructions 👀 I checked light mode for color contrast, as well, and did the best I could. I don't know if there's a way to tell Ratatui to use different foreground colors for light vs. dark backgrounds? I at least couldn't find any documentation on it or example in our codebase. Before: ![CleanShot 2024-10-31 at 22 09 27@2x](https://github.com/user-attachments/assets/5a069863-e75c-45d7-ba13-7deb496713d1) After: ![CleanShot 2024-10-31 at 22 10 08@2x](https://github.com/user-attachments/assets/10423e98-4107-4fab-a277-78575316b72c) --------- Co-authored-by: Chris Olszewski --- crates/turborepo-ui/src/tui/table.rs | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/crates/turborepo-ui/src/tui/table.rs b/crates/turborepo-ui/src/tui/table.rs index 7e22795b67225..9580988600b09 100644 --- a/crates/turborepo-ui/src/tui/table.rs +++ b/crates/turborepo-ui/src/tui/table.rs @@ -1,7 +1,7 @@ use itertools::Itertools; use ratatui::{ layout::{Constraint, Rect}, - style::{Color, Style, Stylize}, + style::{Color, Modifier, Style, Stylize}, text::Text, widgets::{Block, Borders, Cell, Row, StatefulWidget, Table, TableState}, }; @@ -108,8 +108,6 @@ impl<'a> StatefulWidget for &'a TaskTable<'a> { type State = TableState; fn render(self, area: Rect, buf: &mut ratatui::prelude::Buffer, state: &mut Self::State) { - let width = area.width; - let bar = "─".repeat(usize::from(width)); let table = Table::new( self.running_rows() .chain(self.planned_rows()) @@ -124,21 +122,24 @@ impl<'a> StatefulWidget for &'a TaskTable<'a> { .column_spacing(0) .block(Block::new().borders(Borders::RIGHT)) .header( - vec![format!("Tasks\n{bar}"), " \n─".to_owned()] - .into_iter() - .map(Cell::from) - .collect::() - .height(2), + vec![Text::styled( + "Tasks", + Style::default().add_modifier(Modifier::DIM), + )] + .into_iter() + .map(Cell::from) + .collect::() + .height(1), ) .footer( - vec![ - format!("{bar}\n{TASK_NAVIGATE_INSTRUCTIONS}\n{HIDE_INSTRUCTIONS}"), - format!("─\n "), - ] + vec![Text::styled( + format!("{TASK_NAVIGATE_INSTRUCTIONS}\n{HIDE_INSTRUCTIONS}"), + Style::default().add_modifier(Modifier::DIM), + )] .into_iter() .map(Cell::from) .collect::() - .height(3), + .height(2), ); StatefulWidget::render(table, area, buf, state); } From 73637f8996bbd1f350d97a4e73efe4b09c07068e Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Fri, 1 Nov 2024 13:58:12 -0400 Subject: [PATCH 136/218] fix(tui): respect --no-color (#9369) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Look ma, no color! ### Testing Instructions Screenshot 2024-11-01 at 1 25 52 PM --- crates/turborepo-lib/src/run/mod.rs | 6 ++++-- crates/turborepo-ui/src/tui/app.rs | 22 ++++++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index efe0c9c7dd3e9..8120f4dcd569b 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -261,8 +261,10 @@ impl Run { } let (sender, receiver) = TuiSender::new(); - let handle = - tokio::task::spawn(async move { Ok(tui::run_app(task_names, receiver).await?) }); + let color_config = self.color_config; + let handle = tokio::task::spawn(async move { + Ok(tui::run_app(task_names, receiver, color_config).await?) + }); Ok(Some((sender, handle))) } diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 632cc5ccb1266..30fe306970318 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -26,9 +26,12 @@ use super::{ search::SearchResults, AppReceiver, Debouncer, Error, Event, InputOptions, SizeInfo, TaskTable, TerminalPane, }; -use crate::tui::{ - task::{Task, TasksByStatus}, - term_output::TerminalOutput, +use crate::{ + tui::{ + task::{Task, TasksByStatus}, + term_output::TerminalOutput, + }, + ColorConfig, }; #[derive(Debug, Clone)] @@ -559,8 +562,12 @@ impl App { /// Handle the rendering of the `App` widget based on events received by /// `receiver` -pub async fn run_app(tasks: Vec, receiver: AppReceiver) -> Result<(), Error> { - let mut terminal = startup()?; +pub async fn run_app( + tasks: Vec, + receiver: AppReceiver, + color_config: ColorConfig, +) -> Result<(), Error> { + let mut terminal = startup(color_config)?; let size = terminal.size()?; let mut app: App> = App::new(size.height, size.width, tasks); @@ -673,7 +680,10 @@ pub fn terminal_big_enough() -> Result { /// Configures terminal for rendering App #[tracing::instrument] -fn startup() -> io::Result>> { +fn startup(color_config: ColorConfig) -> io::Result>> { + if color_config.should_strip_ansi { + crossterm::style::force_color_output(false); + } crossterm::terminal::enable_raw_mode()?; let mut stdout = io::stdout(); // Ensure all pending writes are flushed before we switch to alternative screen From cb5a8e678460d0aa0012d8db5c9462f0d723cfe5 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Sun, 3 Nov 2024 21:58:53 -0500 Subject: [PATCH 137/218] fix(tui): sort tasks in state not just view (#9373) ### Description Move the new task ordering from just the view to the underlying state so that the task list syncs up with the pane. ### Testing Instructions Added unit testing for new insertion order. --- crates/turborepo-ui/src/tui/app.rs | 3 +- crates/turborepo-ui/src/tui/table.rs | 55 +++++------ crates/turborepo-ui/src/tui/task.rs | 131 +++++++++++++++++++++++++++ 3 files changed, 155 insertions(+), 34 deletions(-) diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 30fe306970318..282867ea93af7 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -326,7 +326,8 @@ impl App { .ok_or_else(|| Error::TaskNotFound { name: task.into() })?; let running = self.tasks_by_status.running.remove(running_idx); - self.tasks_by_status.finished.push(running.finish(result)); + self.tasks_by_status + .insert_finished_task(running.finish(result)); self.tasks .get_mut(task) diff --git a/crates/turborepo-ui/src/tui/table.rs b/crates/turborepo-ui/src/tui/table.rs index 9580988600b09..1757d8657f9ae 100644 --- a/crates/turborepo-ui/src/tui/table.rs +++ b/crates/turborepo-ui/src/tui/table.rs @@ -1,4 +1,3 @@ -use itertools::Itertools; use ratatui::{ layout::{Constraint, Rect}, style::{Color, Modifier, Style, Stylize}, @@ -53,39 +52,29 @@ impl<'b> TaskTable<'b> { } fn finished_rows(&self) -> impl Iterator + '_ { - self.tasks_by_type - .finished - .iter() - // note we can't use the default Ord impl because - // we want failed tasks first - .sorted_by_key(|task| match task.result() { - TaskResult::Failure => 0, - TaskResult::Success => 1, - TaskResult::CacheHit => 2, - }) - .map(move |task| { - let name = if matches!(task.result(), TaskResult::CacheHit) { - Cell::new(Text::styled(task.name(), Style::default().italic())) - } else { - Cell::new(task.name()) - }; + self.tasks_by_type.finished.iter().map(move |task| { + let name = if matches!(task.result(), TaskResult::CacheHit) { + Cell::new(Text::styled(task.name(), Style::default().italic())) + } else { + Cell::new(task.name()) + }; - Row::new(vec![ - name, - match task.result() { - // matches Next.js (and many other CLI tools) https://github.com/vercel/next.js/blob/1a04d94aaec943d3cce93487fea3b8c8f8898f31/packages/next/src/build/output/log.ts - TaskResult::Success => { - Cell::new(Text::styled("✓", Style::default().green().bold())) - } - TaskResult::CacheHit => { - Cell::new(Text::styled("⊙", Style::default().magenta())) - } - TaskResult::Failure => { - Cell::new(Text::styled("⨯", Style::default().red().bold())) - } - }, - ]) - }) + Row::new(vec![ + name, + match task.result() { + // matches Next.js (and many other CLI tools) https://github.com/vercel/next.js/blob/1a04d94aaec943d3cce93487fea3b8c8f8898f31/packages/next/src/build/output/log.ts + TaskResult::Success => { + Cell::new(Text::styled("✓", Style::default().green().bold())) + } + TaskResult::CacheHit => { + Cell::new(Text::styled("⊙", Style::default().magenta())) + } + TaskResult::Failure => { + Cell::new(Text::styled("⨯", Style::default().red().bold())) + } + }, + ]) + }) } fn running_rows(&self) -> impl Iterator + '_ { diff --git a/crates/turborepo-ui/src/tui/task.rs b/crates/turborepo-ui/src/tui/task.rs index 996077784bc14..55650f41cfd84 100644 --- a/crates/turborepo-ui/src/tui/task.rs +++ b/crates/turborepo-ui/src/tui/task.rs @@ -103,6 +103,7 @@ impl Task { } } +#[derive(Default)] pub struct TaskNamesByStatus { pub running: Vec, pub planned: Vec, @@ -117,6 +118,10 @@ pub struct TasksByStatus { } impl TasksByStatus { + pub fn new() -> Self { + Self::default() + } + pub fn all_empty(&self) -> bool { self.planned.is_empty() && self.finished.is_empty() && self.running.is_empty() } @@ -189,4 +194,130 @@ impl TasksByStatus { ); self.planned.sort_unstable(); } + + /// Insert a finished task into the correct place in the finished section. + /// The order of `finished` is expected to be: failure, success, cached + /// with each subsection being sorted by finish time. + /// Returns the index task was inserted at + pub fn insert_finished_task(&mut self, task: Task) -> usize { + let index = match task.result() { + TaskResult::Failure => self + .finished + .iter() + .enumerate() + .skip_while(|(_, task)| task.result() == TaskResult::Failure) + .map(|(idx, _)| idx) + .next(), + TaskResult::Success => self + .finished + .iter() + .enumerate() + .skip_while(|(_, task)| { + task.result() == TaskResult::Failure || task.result() == TaskResult::Success + }) + .map(|(idx, _)| idx) + .next(), + TaskResult::CacheHit => None, + } + .unwrap_or(self.finished.len()); + self.finished.insert(index, task); + index + } +} + +#[cfg(test)] +mod test { + use test_case::test_case; + + use super::*; + + struct TestCase { + failed: &'static [&'static str], + passed: &'static [&'static str], + cached: &'static [&'static str], + result: TaskResult, + expected_index: usize, + } + + impl TestCase { + pub const fn new(result: TaskResult, expected_index: usize) -> Self { + Self { + failed: &[], + passed: &[], + cached: &[], + result, + expected_index, + } + } + + pub const fn failed(mut self, failed: &'static [&'static str; N]) -> Self { + self.failed = failed.as_slice(); + self + } + + pub const fn passed(mut self, passed: &'static [&'static str; N]) -> Self { + self.passed = passed.as_slice(); + self + } + + pub const fn cached(mut self, cached: &'static [&'static str; N]) -> Self { + self.cached = cached.as_slice(); + self + } + + pub fn tasks(&self) -> TasksByStatus { + let failed = self.failed.iter().map(|name| { + Task::new(name.to_string()) + .start() + .finish(TaskResult::Failure) + }); + let passed = self.passed.iter().map(|name| { + Task::new(name.to_string()) + .start() + .finish(TaskResult::Success) + }); + let cached = self.passed.iter().map(|name| { + Task::new(name.to_string()) + .start() + .finish(TaskResult::CacheHit) + }); + TasksByStatus { + running: Vec::new(), + planned: Vec::new(), + finished: failed.chain(passed).chain(cached).collect(), + } + } + } + + const EMPTY_FAIL: TestCase = TestCase::new(TaskResult::Failure, 0); + const EMPTY_PASS: TestCase = TestCase::new(TaskResult::Success, 0); + const EMPTY_CACHE: TestCase = TestCase::new(TaskResult::CacheHit, 0); + const BASIC_FAIL: TestCase = TestCase::new(TaskResult::Failure, 1) + .failed(&["fail"]) + .passed(&["passed"]) + .cached(&["cached"]); + const BASIC_PASS: TestCase = TestCase::new(TaskResult::Success, 2) + .failed(&["fail"]) + .passed(&["passed"]) + .cached(&["cached"]); + const BASIC_CACHE: TestCase = TestCase::new(TaskResult::CacheHit, 3) + .failed(&["fail"]) + .passed(&["passed"]) + .cached(&["cached"]); + + #[test_case(EMPTY_FAIL)] + #[test_case(EMPTY_PASS)] + #[test_case(EMPTY_CACHE)] + #[test_case(BASIC_FAIL)] + #[test_case(BASIC_PASS)] + #[test_case(BASIC_CACHE)] + fn test_finished_task(test_case: TestCase) { + let mut tasks = test_case.tasks(); + let actual = tasks.insert_finished_task( + Task::new("inserted".into()) + .start() + .finish(test_case.result), + ); + assert_eq!(actual, test_case.expected_index); + } } From 6a793bc3b1d6bcd41ec571b70d93cc4251e044fd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 4 Nov 2024 14:03:35 -0700 Subject: [PATCH 138/218] release(turborepo): 2.2.4-canary.6 (#9374) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 55851def58b35..272bf54d4e4c3 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 0b2ecdc96ab08..f5b5698d3cadd 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 2fc11f20dca7c..a790fb0c242ae 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index ffcc237279272..fa66c043d8404 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 74feb956bec2e..bd230682b7861 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index e7710dcc93fac..260bd3cf7102b 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index c655568299438..e6d3f34d9a98a 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 248e16fc69def..32e12e8b1f47e 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index d84f7d9e7f27f..39bb37ff87627 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.5", + "version": "2.2.4-canary.6", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.5", - "turbo-darwin-arm64": "2.2.4-canary.5", - "turbo-linux-64": "2.2.4-canary.5", - "turbo-linux-arm64": "2.2.4-canary.5", - "turbo-windows-64": "2.2.4-canary.5", - "turbo-windows-arm64": "2.2.4-canary.5" + "turbo-darwin-64": "2.2.4-canary.6", + "turbo-darwin-arm64": "2.2.4-canary.6", + "turbo-linux-64": "2.2.4-canary.6", + "turbo-linux-arm64": "2.2.4-canary.6", + "turbo-windows-64": "2.2.4-canary.6", + "turbo-windows-arm64": "2.2.4-canary.6" } } diff --git a/version.txt b/version.txt index afd16ccb13cd1..83c28e547e68d 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.5 +2.2.4-canary.6 canary From 6d039f71ef9d57630de81fb81d3ec10dc4e8c86b Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Mon, 4 Nov 2024 17:43:14 -0500 Subject: [PATCH 139/218] chore(ci): bump macOS runner to 13 (#9375) --- .github/workflows/lsp.yml | 4 ++-- .github/workflows/test-js-packages.yml | 2 +- .github/workflows/turborepo-test.yml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/lsp.yml b/.github/workflows/lsp.yml index c586ab1b7e4c1..22567bcc1bdec 100644 --- a/.github/workflows/lsp.yml +++ b/.github/workflows/lsp.yml @@ -15,10 +15,10 @@ jobs: fail-fast: false matrix: settings: - - host: macos-12 + - host: macos-13 target: "x86_64-apple-darwin" container-options: "--rm" - - host: macos-12 + - host: macos-13 target: "aarch64-apple-darwin" container-options: "--rm" - host: ubuntu-latest diff --git a/.github/workflows/test-js-packages.yml b/.github/workflows/test-js-packages.yml index 2e4de376bec24..7f22b8cc9532f 100644 --- a/.github/workflows/test-js-packages.yml +++ b/.github/workflows/test-js-packages.yml @@ -68,7 +68,7 @@ jobs: - "x64" - "metal" - name: macos - runner: macos-12 + runner: macos-13 node-version: - 18 - 20 diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml index abcfeb4c67b30..f505d66eddf44 100644 --- a/.github/workflows/turborepo-test.yml +++ b/.github/workflows/turborepo-test.yml @@ -116,7 +116,7 @@ jobs: matrix: os: - runner: ubuntu-latest - - runner: macos-12 + - runner: macos-13 - runner: windows-latest steps: # On Windows, set autocrlf to input so that when the repo is cloned down @@ -276,7 +276,7 @@ jobs: - "metal" nextest: linux - name: macos - runner: macos-12 + runner: macos-13 nextest: mac - name: windows runner: windows-latest From 21863add07ef52ee4dbfde7cc10a303a773357b8 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Mon, 4 Nov 2024 17:06:38 -0700 Subject: [PATCH 140/218] fix: Don't require a name for the root package.json. (#9378) --- .../src/package_graph/mod.rs | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-repository/src/package_graph/mod.rs b/crates/turborepo-repository/src/package_graph/mod.rs index 439fabf97e1dd..15cd6351b02cc 100644 --- a/crates/turborepo-repository/src/package_graph/mod.rs +++ b/crates/turborepo-repository/src/package_graph/mod.rs @@ -145,9 +145,20 @@ impl PackageGraph { pub fn validate(&self) -> Result<(), Error> { for info in self.packages.values() { let name = info.package_json.name.as_deref(); - if matches!(name, None | Some("")) { - let package_json_path = self.repo_root.resolve(info.package_json_path()); - return Err(Error::PackageJsonMissingName(package_json_path)); + let package_json_path = self.repo_root.resolve(info.package_json_path()); + match name { + Some("") => { + return Err(Error::PackageJsonMissingName(package_json_path)); + } + None => { + // We don't need to require a name for the root package.json. + if package_json_path == self.repo_root.join_component("package.json") { + continue; + } + + return Err(Error::PackageJsonMissingName(package_json_path)); + } + Some(_) => continue, } } graph::validate_graph(&self.graph).map_err(Error::InvalidPackageGraph)?; @@ -902,4 +913,17 @@ mod test { )) ); } + + #[tokio::test] + async fn test_does_not_require_name_for_root_package_json() { + let root = + AbsoluteSystemPathBuf::new(if cfg!(windows) { r"C:\repo" } else { "/repo" }).unwrap(); + let pkg_graph = PackageGraph::builder(&root, PackageJson::from_value(json!({})).unwrap()) + .with_package_discovery(MockDiscovery) + .build() + .await + .unwrap(); + + assert!(pkg_graph.validate().is_ok()); + } } From 7d996094899209e0dc014a97da8388a1068b39b8 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Mon, 4 Nov 2024 22:58:07 -0700 Subject: [PATCH 141/218] refactor: Use simpler root package.json check. (#9382) ### Description Following up on Chris' comment on #9378. I didn't see it before I hit merge because I was on mobile. --- .../src/package_graph/mod.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/crates/turborepo-repository/src/package_graph/mod.rs b/crates/turborepo-repository/src/package_graph/mod.rs index 15cd6351b02cc..988c8850cad0f 100644 --- a/crates/turborepo-repository/src/package_graph/mod.rs +++ b/crates/turborepo-repository/src/package_graph/mod.rs @@ -143,19 +143,14 @@ impl PackageGraph { #[tracing::instrument(skip(self))] pub fn validate(&self) -> Result<(), Error> { - for info in self.packages.values() { + for (package_name, info) in self.packages.iter() { + if matches!(package_name, PackageName::Root) { + continue; + } let name = info.package_json.name.as_deref(); - let package_json_path = self.repo_root.resolve(info.package_json_path()); match name { - Some("") => { - return Err(Error::PackageJsonMissingName(package_json_path)); - } - None => { - // We don't need to require a name for the root package.json. - if package_json_path == self.repo_root.join_component("package.json") { - continue; - } - + Some("") | None => { + let package_json_path = self.repo_root.resolve(info.package_json_path()); return Err(Error::PackageJsonMissingName(package_json_path)); } Some(_) => continue, From 8c6d8d547d1f8ec221f140249bbdc56a118be294 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 07:10:37 -0700 Subject: [PATCH 142/218] chore: Stop running unnecessary checks for docs-only changes. (#9387) --- .github/workflows/test-js-packages.yml | 10 +--------- .github/workflows/turborepo-native-lib-test.yml | 2 ++ 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test-js-packages.yml b/.github/workflows/test-js-packages.yml index 7f22b8cc9532f..47202a6eed8c6 100644 --- a/.github/workflows/test-js-packages.yml +++ b/.github/workflows/test-js-packages.yml @@ -39,22 +39,14 @@ jobs: PATTERNS: | packages/** - - name: Docs related changes - id: docs - uses: technote-space/get-diff-action@v6 - with: - PATTERNS: | - docs/** - outputs: ci: ${{ steps.ci.outputs.diff != ''}} packages: ${{ steps.packages.outputs.diff != '' }} - docs: ${{ steps.docs.outputs.diff != '' }} js_packages: name: "JS Package Tests (${{matrix.os.name}}, Node ${{matrix.node-version}})" timeout-minutes: 30 - if: needs.determine_jobs.outputs.ci == 'true' || needs.determine_jobs.outputs.packages == 'true' || needs.determine_jobs.outputs.docs == 'true' + if: needs.determine_jobs.outputs.ci == 'true' || needs.determine_jobs.outputs.packages == 'true' needs: [determine_jobs] runs-on: ${{ matrix.os.runner }} strategy: diff --git a/.github/workflows/turborepo-native-lib-test.yml b/.github/workflows/turborepo-native-lib-test.yml index 0b6e5a31cbc22..8368d2a55669d 100644 --- a/.github/workflows/turborepo-native-lib-test.yml +++ b/.github/workflows/turborepo-native-lib-test.yml @@ -2,6 +2,8 @@ name: Turborepo Native Library Tests on: push: branches: [main] + paths-ignore: + - "docs/**" pull_request: permissions: From d02463f01d4756e0a8d0b6892ca7dee91db2a51b Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 5 Nov 2024 09:13:47 -0500 Subject: [PATCH 143/218] fix(mfe): build internal package if present in graph (#9383) ### Description Previously we were relying on the proxy already being built, for non-internal use cases this will be true, but for the internal case we need to make sure it is built before we try to start the proxy. ### Testing Instructions - Edit `packages/micro-frontends/dist/bin/cli.cjs` and add a `throw new Error("oops")` to the top - `turbo vercel-docs#dev` should fail due to the proxy script failing - Now try with the PR `turbo`: `turbo_dev --skip-infer vercel-docs#dev`, you will see the MFE package being built before the proxy is started. --- crates/turborepo-lib/src/turbo_json/loader.rs | 7 ++++++- crates/turborepo-lib/src/turbo_json/mod.rs | 8 +++++++- crates/turborepo-micro-frontend/src/lib.rs | 3 ++- crates/turborepo-unescape/src/lib.rs | 5 +++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-lib/src/turbo_json/loader.rs b/crates/turborepo-lib/src/turbo_json/loader.rs index 4a4ddbda55bfc..1b895f6ee690e 100644 --- a/crates/turborepo-lib/src/turbo_json/loader.rs +++ b/crates/turborepo-lib/src/turbo_json/loader.rs @@ -1,8 +1,10 @@ use std::collections::HashMap; +use itertools::Itertools; use tracing::debug; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; use turborepo_errors::Spanned; +use turborepo_micro_frontend::MICRO_FRONTENDS_PACKAGE_INTERNAL; use turborepo_repository::{ package_graph::{PackageInfo, PackageName}, package_json::PackageJson, @@ -184,7 +186,10 @@ impl TurboJsonLoader { Error::NoTurboJSON => Ok(TurboJson::default()), err => Err(err), })?; - turbo_json.with_proxy(); + let needs_proxy_build = packages + .keys() + .contains(&PackageName::from(MICRO_FRONTENDS_PACKAGE_INTERNAL)); + turbo_json.with_proxy(needs_proxy_build); Ok(turbo_json) } else { turbo_json diff --git a/crates/turborepo-lib/src/turbo_json/mod.rs b/crates/turborepo-lib/src/turbo_json/mod.rs index afa025dfc652e..25c5f02f84ba9 100644 --- a/crates/turborepo-lib/src/turbo_json/mod.rs +++ b/crates/turborepo-lib/src/turbo_json/mod.rs @@ -12,6 +12,7 @@ use serde::{Deserialize, Serialize}; use struct_iterable::Iterable; use turbopath::AbsoluteSystemPath; use turborepo_errors::Spanned; +use turborepo_micro_frontend::MICRO_FRONTENDS_PACKAGE_INTERNAL; use turborepo_repository::package_graph::ROOT_PKG_NAME; use turborepo_unescape::UnescapedString; @@ -610,7 +611,7 @@ impl TurboJson { } /// Adds a local proxy task to a workspace TurboJson - pub fn with_proxy(&mut self) { + pub fn with_proxy(&mut self, needs_proxy_build: bool) { if self.extends.is_empty() { self.extends = Spanned::new(vec!["//".into()]); } @@ -619,6 +620,11 @@ impl TurboJson { TaskName::from("proxy"), Spanned::new(RawTaskDefinition { cache: Some(Spanned::new(false)), + depends_on: needs_proxy_build.then(|| { + Spanned::new(vec![Spanned::new(UnescapedString::from(format!( + "{MICRO_FRONTENDS_PACKAGE_INTERNAL}#build" + )))]) + }), ..Default::default() }), ); diff --git a/crates/turborepo-micro-frontend/src/lib.rs b/crates/turborepo-micro-frontend/src/lib.rs index 8a0cabc54ff39..e250d7779088a 100644 --- a/crates/turborepo-micro-frontend/src/lib.rs +++ b/crates/turborepo-micro-frontend/src/lib.rs @@ -13,7 +13,8 @@ use turbopath::AbsoluteSystemPath; /// /// This is subject to change at any time. pub const DEFAULT_MICRO_FRONTENDS_CONFIG: &str = "micro-frontends.jsonc"; -pub const MICRO_FRONTENDS_PACKAGES: &[&str] = ["@vercel/micro-frontends-internal"].as_slice(); +pub const MICRO_FRONTENDS_PACKAGES: &[&str] = [MICRO_FRONTENDS_PACKAGE_INTERNAL].as_slice(); +pub const MICRO_FRONTENDS_PACKAGE_INTERNAL: &str = "@vercel/micro-frontends-internal"; /// The minimal amount of information Turborepo needs to correctly start a local /// proxy server for microfrontends diff --git a/crates/turborepo-unescape/src/lib.rs b/crates/turborepo-unescape/src/lib.rs index 27e1b9a637fd6..bbffef4ac3a9d 100644 --- a/crates/turborepo-unescape/src/lib.rs +++ b/crates/turborepo-unescape/src/lib.rs @@ -57,6 +57,11 @@ impl From for String { } } +impl From for UnescapedString { + fn from(value: String) -> Self { + Self(value) + } +} // For testing purposes impl From<&'static str> for UnescapedString { fn from(value: &'static str) -> Self { From 062874a2c6f13a70f0239ed9b076133ff54f8eba Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 09:45:14 -0500 Subject: [PATCH 144/218] release(turborepo): 2.2.4-canary.7 (#9388) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 272bf54d4e4c3..6284cec637595 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index f5b5698d3cadd..0ed4c379cea78 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index a790fb0c242ae..fb18d2101ccd6 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index fa66c043d8404..0613a89d65ab7 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index bd230682b7861..87a7b3a60a830 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 260bd3cf7102b..166b21cf80929 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index e6d3f34d9a98a..e5d81ecb7dc57 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 32e12e8b1f47e..5bc1b17bc5624 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 39bb37ff87627..cca2ee5626d3d 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.6", + "version": "2.2.4-canary.7", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.6", - "turbo-darwin-arm64": "2.2.4-canary.6", - "turbo-linux-64": "2.2.4-canary.6", - "turbo-linux-arm64": "2.2.4-canary.6", - "turbo-windows-64": "2.2.4-canary.6", - "turbo-windows-arm64": "2.2.4-canary.6" + "turbo-darwin-64": "2.2.4-canary.7", + "turbo-darwin-arm64": "2.2.4-canary.7", + "turbo-linux-64": "2.2.4-canary.7", + "turbo-linux-arm64": "2.2.4-canary.7", + "turbo-windows-64": "2.2.4-canary.7", + "turbo-windows-arm64": "2.2.4-canary.7" } } diff --git a/version.txt b/version.txt index 83c28e547e68d..c1cc433c75e58 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.6 +2.2.4-canary.7 canary From 7c9731ba8c670c89737bd85333d98cca6ce1d8c9 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 08:38:06 -0700 Subject: [PATCH 145/218] docs: Clarify that `TURBO_FORCE` is a boolean. (#9380) ### Description According to some user feedback, it was unclear that `TURBO_FORCE` accepts a boolean. Clarifying that here. --- docs/repo-docs/reference/system-environment-variables.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/reference/system-environment-variables.mdx b/docs/repo-docs/reference/system-environment-variables.mdx index 9032bfd473882..9eec6200cf085 100644 --- a/docs/repo-docs/reference/system-environment-variables.mdx +++ b/docs/repo-docs/reference/system-environment-variables.mdx @@ -17,7 +17,7 @@ System environment variables are always overridden by flag values provided direc | `TURBO_CI_VENDOR_ENV_KEY` | Set a prefix for environment variables that you want **excluded** from [Framework Inference](/repo/docs/crafting-your-repository/using-environment-variables#framework-inference). **NOTE**: This does not need to be set by the user and should be configured automatically by supported platforms. | | `TURBO_DANGEROUSLY_DISABLE_PACKAGE_MANAGER_CHECK` | Disable checking the `packageManager` field in `package.json`. You may run into [errors and unexpected caching behavior](/repo/docs/reference/run#--dangerously-disable-package-manager-check) when disabling this check. Use `true` or `1` to disable. | | `TURBO_DOWNLOAD_LOCAL_ENABLED` | Enables global `turbo` to install the correct local version if one is not found. | -| `TURBO_FORCE` | Always force all tasks to run in full, opting out of all caching. | +| `TURBO_FORCE` | Set to `true` to force all tasks to run in full, opting out of all caching. | | `TURBO_GLOBAL_WARNING_DISABLED` | Disable warning when global `turbo` cannot find a local version to use. | | `TURBO_PRINT_VERSION_DISABLED` | Disable printing the version of `turbo` that is being executed. | | `TURBO_LOG_ORDER` | Set the [log order](/repo/docs/reference/run#--log-order-option). Allowed values are `grouped` and `default`. | @@ -32,7 +32,7 @@ System environment variables are always overridden by flag values provided direc | `TURBO_REMOTE_ONLY` | Always ignore the local filesystem cache for all tasks. | | `TURBO_RUN_SUMMARY` | Generate a [Run Summary](/repo/docs/reference/run#--summarize) when you run tasks. | | `TURBO_SCM_BASE` | Base used by `--affected` when calculating what has changed from `base...head` | -| `TURBO_SCM_HEAD` | Head used by `--affected` when calculating what has changed from `base...head` | +| `TURBO_SCM_HEAD` | Head used by `--affected` when calculating what has changed from `base...head` | | `TURBO_TEAM` | The account name associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's slug. | | `TURBO_TEAMID` | The account identifier associated with your repository. When using [Vercel Remote Cache](https://vercel.com/docs/monorepos/remote-caching#vercel-remote-cache), this is your team's ID. | | `TURBO_TELEMETRY_MESSAGE_DISABLED` | Disable the message notifying you that [Telemetry](/repo/docs/telemetry) is enabled. | From 3d9b2597abd5d6fb39b1e1e1fb853221a09d3b3f Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 5 Nov 2024 11:10:19 -0500 Subject: [PATCH 146/218] fix(query): validate package name (#9370) ### Description Before we'd just trust that a package would exist with the name provided. This would lead to errors when using the package but not when constructing it. Now we actually validate it during construction. ### Testing Instructions Added test for invalid package constructor --------- Co-authored-by: Chris Olszewski --- crates/turborepo-lib/src/commands/query.rs | 9 +- crates/turborepo-lib/src/query/mod.rs | 83 ++++--- crates/turborepo-lib/src/query/package.rs | 22 +- crates/turborepo-lib/src/query/task.rs | 220 ++++++++---------- crates/turborepo/tests/query.rs | 12 + ...ckage_that_doesn't_exist_(npm@10.5.0).snap | 21 ++ 6 files changed, 204 insertions(+), 163 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__basic_monorepo_get_package_that_doesn't_exist_(npm@10.5.0).snap diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index 24fac3e27e66c..c3d79df1f9fe0 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -33,10 +33,10 @@ struct QueryError { impl QueryError { fn get_index_from_row_column(query: &str, row: usize, column: usize) -> usize { let mut index = 0; - for line in query.lines().take(row + 1) { + for line in query.lines().take(row.saturating_sub(1)) { index += line.len() + 1; } - index + column + index + column - 1 } fn new(server_error: ServerError, query: String) -> Self { let span: Option = server_error.locations.first().map(|location| { @@ -106,9 +106,8 @@ pub async fn run( let request = Request::new(&query).variables(variables); let result = schema.execute(request).await; - if result.errors.is_empty() { - println!("{}", serde_json::to_string_pretty(&result)?); - } else { + println!("{}", serde_json::to_string_pretty(&result)?); + if !result.errors.is_empty() { for error in result.errors { let error = QueryError::new(error, query.clone()); eprintln!("{:?}", Report::new(error)); diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index b2dd00ce63f00..97e02e5208ee4 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -3,11 +3,14 @@ mod package; mod server; mod task; -use std::{io, sync::Arc}; +use std::{ + io, + ops::{Deref, DerefMut}, + sync::Arc, +}; use async_graphql::{http::GraphiQLSource, *}; use axum::{response, response::IntoResponse}; -use itertools::Itertools; use miette::Diagnostic; use package::Package; pub use server::run_server; @@ -74,6 +77,19 @@ pub struct Array { length: usize, } +impl Deref for Array { + type Target = [T]; + fn deref(&self) -> &Self::Target { + &self.items + } +} + +impl DerefMut for Array { + fn deref_mut(&mut self) -> &mut Self::Target { + &mut self.items + } +} + impl FromIterator for Array { fn from_iter>(iter: I) -> Self { let items: Vec<_> = iter.into_iter().collect(); @@ -120,7 +136,7 @@ struct PackagePredicate { impl PackagePredicate { fn check_equals(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { - (PackageFields::Name, Value::String(name)) => pkg.name.as_ref() == name, + (PackageFields::Name, Value::String(name)) => pkg.get_name().as_ref() == name, (PackageFields::DirectDependencyCount, Value::Number(n)) => { let Some(n) = n.as_u64() else { return false; @@ -247,7 +263,7 @@ impl PackagePredicate { fn check_has(pkg: &Package, field: &PackageFields, value: &Any) -> bool { match (field, &value.0) { - (PackageFields::Name, Value::String(name)) => pkg.name.as_ref() == name, + (PackageFields::Name, Value::String(name)) => pkg.get_name().as_str() == name, (PackageFields::TaskName, Value::String(name)) => pkg.get_tasks().contains_key(name), _ => false, } @@ -491,7 +507,7 @@ impl RepositoryQuery { let mut opts = self.run.opts().clone(); opts.scope_opts.affected_range = Some((base, head)); - Ok(RunBuilder::calculate_filtered_packages( + let mut packages = RunBuilder::calculate_filtered_packages( self.run.repo_root(), &opts, self.run.pkg_dep_graph(), @@ -499,24 +515,28 @@ impl RepositoryQuery { self.run.root_turbo_json(), )? .into_iter() - .map(|(package, reason)| ChangedPackage { - package: Package { - run: self.run.clone(), - name: package, - }, - reason: reason.into(), + .map(|(package, reason)| { + Ok(ChangedPackage { + package: Package::new(self.run.clone(), package)?, + reason: reason.into(), + }) }) - .filter(|package| filter.as_ref().map_or(true, |f| f.check(&package.package))) - .sorted_by(|a, b| a.package.name.cmp(&b.package.name)) - .collect()) + .filter(|package: &Result| { + let Ok(package) = package.as_ref() else { + return true; + }; + filter.as_ref().map_or(true, |f| f.check(&package.package)) + }) + .collect::, _>>()?; + + packages.sort_by(|a, b| a.package.get_name().cmp(b.package.get_name())); + Ok(packages) } + /// Gets a single package by name async fn package(&self, name: String) -> Result { let name = PackageName::from(name); - Ok(Package { - run: self.run.clone(), - name, - }) + Package::new(self.run.clone(), name) } async fn version(&self) -> &'static str { @@ -536,29 +556,26 @@ impl RepositoryQuery { /// Gets a list of packages that match the given filter async fn packages(&self, filter: Option) -> Result, Error> { let Some(filter) = filter else { - return Ok(self + let mut packages = self .run .pkg_dep_graph() .packages() - .map(|(name, _)| Package { - run: self.run.clone(), - name: name.clone(), - }) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()); + .map(|(name, _)| Package::new(self.run.clone(), name.clone())) + .collect::, _>>()?; + packages.sort_by(|a, b| a.get_name().cmp(b.get_name())); + return Ok(packages); }; - Ok(self + let mut packages = self .run .pkg_dep_graph() .packages() - .map(|(name, _)| Package { - run: self.run.clone(), - name: name.clone(), - }) - .filter(|pkg| filter.check(pkg)) - .sorted_by(|a, b| a.name.cmp(&b.name)) - .collect()) + .map(|(name, _)| Package::new(self.run.clone(), name.clone())) + .filter(|pkg| pkg.as_ref().map_or(false, |pkg| filter.check(pkg))) + .collect::, _>>()?; + packages.sort_by(|a, b| a.get_name().cmp(b.get_name())); + + Ok(packages) } } diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index 621f6385dfbe2..dc3a3b8d35e89 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -12,11 +12,29 @@ use crate::{ #[derive(Clone)] pub struct Package { - pub run: Arc, - pub name: PackageName, + run: Arc, + name: PackageName, } impl Package { + pub fn new(run: Arc, name: PackageName) -> Result { + run.pkg_dep_graph() + .package_info(&name) + .ok_or_else(|| Error::PackageNotFound(name.clone()))?; + + Ok(Self { run, name }) + } + + pub fn run(&self) -> &Arc { + &self.run + } + + /// This uses a different naming convention because we already have a + /// `name` resolver defined for GraphQL + pub fn get_name(&self) -> &PackageName { + &self.name + } + pub fn get_tasks(&self) -> HashMap> { self.run .pkg_dep_graph() diff --git a/crates/turborepo-lib/src/query/task.rs b/crates/turborepo-lib/src/query/task.rs index 5fbe69c7c5219..72997203071ec 100644 --- a/crates/turborepo-lib/src/query/task.rs +++ b/crates/turborepo-lib/src/query/task.rs @@ -1,12 +1,11 @@ use std::sync::Arc; use async_graphql::Object; -use itertools::Itertools; use turborepo_errors::Spanned; use crate::{ engine::TaskNode, - query::{package::Package, Array}, + query::{package::Package, Array, Error}, run::{task_id::TaskId, Run}, }; @@ -17,18 +16,37 @@ pub struct RepositoryTask { } impl RepositoryTask { - pub fn new(task_id: &TaskId, run: &Arc) -> Self { - let package = Package { - name: task_id.package().into(), - run: run.clone(), - }; + pub fn new(task_id: &TaskId, run: &Arc) -> Result { + let package = Package::new(run.clone(), task_id.package().into())?; let script = package.get_tasks().get(task_id.task()).cloned(); - RepositoryTask { + Ok(RepositoryTask { name: task_id.task().to_string(), package, script, - } + }) + } + + fn collect_and_sort<'a>( + &self, + task_id: &TaskId<'a>, + tasks: impl IntoIterator, + ) -> Result, Error> { + let mut tasks = tasks + .into_iter() + .filter_map(|task| match task { + TaskNode::Root => None, + TaskNode::Task(task) if task == task_id => None, + TaskNode::Task(task) => Some(RepositoryTask::new(task, self.package.run())), + }) + .collect::, _>>()?; + tasks.sort_by(|a, b| { + a.package + .get_name() + .cmp(b.package.get_name()) + .then_with(|| a.name.cmp(&b.name)) + }); + Ok(tasks) } } @@ -43,96 +61,72 @@ impl RepositoryTask { } async fn full_name(&self) -> String { - format!("{}#{}", self.package.name, self.name) + format!("{}#{}", self.package.get_name(), self.name) } async fn script(&self) -> Option { self.script.as_ref().map(|script| script.value.to_string()) } - async fn direct_dependents(&self) -> Array { - let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); - self.package - .run - .engine() - .dependents(&task_id) - .into_iter() - .flatten() - .filter_map(|task| match task { - TaskNode::Root => None, - TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), - }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + async fn direct_dependents(&self) -> Result, Error> { + let task_id = TaskId::from_static(self.package.get_name().to_string(), self.name.clone()); + + self.collect_and_sort( + &task_id, + self.package + .run() + .engine() + .dependents(&task_id) + .into_iter() + .flatten(), + ) } - async fn direct_dependencies(&self) -> Array { - let task_id = TaskId::new(self.package.name.as_ref(), &self.name); - - self.package - .run - .engine() - .dependencies(&task_id) - .into_iter() - .flatten() - .filter_map(|task| match task { - TaskNode::Root => None, - TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), - }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + async fn direct_dependencies(&self) -> Result, Error> { + let task_id = TaskId::new(self.package.get_name().as_ref(), &self.name); + + self.collect_and_sort( + &task_id, + self.package + .run() + .engine() + .dependencies(&task_id) + .into_iter() + .flatten(), + ) } - async fn indirect_dependents(&self) -> Array { - let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + async fn indirect_dependents(&self) -> Result, Error> { + let task_id = TaskId::from_static(self.package.get_name().to_string(), self.name.clone()); let direct_dependents = self .package - .run + .run() .engine() .dependencies(&task_id) .unwrap_or_default(); - self.package - .run - .engine() - .transitive_dependents(&task_id) - .into_iter() - .filter(|node| !direct_dependents.contains(node)) - .filter_map(|node| match node { - TaskNode::Root => None, - TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), - }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + + self.collect_and_sort( + &task_id, + self.package + .run() + .engine() + .transitive_dependents(&task_id) + .into_iter() + .filter(|node| !direct_dependents.contains(node)), + ) } - async fn indirect_dependencies(&self) -> Array { - let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); + async fn indirect_dependencies(&self) -> Result, Error> { + let task_id = TaskId::from_static(self.package.get_name().to_string(), self.name.clone()); let direct_dependencies = self .package - .run + .run() .engine() .dependencies(&task_id) .unwrap_or_default(); - self.package - .run + let mut dependencies = self + .package + .run() .engine() .transitive_dependencies(&task_id) .into_iter() @@ -140,56 +134,36 @@ impl RepositoryTask { .filter_map(|node| match node { TaskNode::Root => None, TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), + TaskNode::Task(task) => Some(RepositoryTask::new(task, self.package.run())), }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + .collect::, _>>()?; + + dependencies.sort_by(|a, b| { + a.package + .get_name() + .cmp(b.package.get_name()) + .then_with(|| a.name.cmp(&b.name)) + }); + + Ok(dependencies) } - async fn all_dependents(&self) -> Array { - let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); - self.package - .run - .engine() - .transitive_dependents(&task_id) - .into_iter() - .filter_map(|node| match node { - TaskNode::Root => None, - TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), - }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + async fn all_dependents(&self) -> Result, Error> { + let task_id = TaskId::from_static(self.package.get_name().to_string(), self.name.clone()); + self.collect_and_sort( + &task_id, + self.package.run().engine().transitive_dependents(&task_id), + ) } - async fn all_dependencies(&self) -> Array { - let task_id = TaskId::from_static(self.package.name.to_string(), self.name.clone()); - self.package - .run - .engine() - .transitive_dependencies(&task_id) - .into_iter() - .filter_map(|node| match node { - TaskNode::Root => None, - TaskNode::Task(task) if task == &task_id => None, - TaskNode::Task(task) => Some(RepositoryTask::new(task, &self.package.run)), - }) - .sorted_by(|a, b| { - a.package - .name - .cmp(&b.package.name) - .then_with(|| a.name.cmp(&b.name)) - }) - .collect() + async fn all_dependencies(&self) -> Result, Error> { + let task_id = TaskId::from_static(self.package.get_name().to_string(), self.name.clone()); + self.collect_and_sort( + &task_id, + self.package + .run() + .engine() + .transitive_dependencies(&task_id), + ) } } diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 08414593677b1..4ea85f7df220e 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -1,5 +1,17 @@ mod common; +#[test] +fn test_query() -> Result<(), anyhow::Error> { + check_json!( + "basic_monorepo", + "npm@10.5.0", + "query", + "get package that doesn't exist" => "query { package(name: \"doesnotexist\") { path } }", + ); + + Ok(()) +} + #[cfg(not(windows))] #[test] fn test_double_symlink() -> Result<(), anyhow::Error> { diff --git a/crates/turborepo/tests/snapshots/query__basic_monorepo_get_package_that_doesn't_exist_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_package_that_doesn't_exist_(npm@10.5.0).snap new file mode 100644 index 0000000000000..b1c34e3924874 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_package_that_doesn't_exist_(npm@10.5.0).snap @@ -0,0 +1,21 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": null, + "errors": [ + { + "message": "package not found: doesnotexist", + "locations": [ + { + "line": 1, + "column": 9 + } + ], + "path": [ + "package" + ] + } + ] +} From baa4eb5afb7164d9311b85d5b4580633e064b6f1 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 5 Nov 2024 12:06:34 -0500 Subject: [PATCH 147/218] feat(trace): pretty print trace errors to logs (#9367) ### Description To help debug trace, pretty print the errors to stderr by default. Includes fancy error messages either via SWC or our own miette infrastructure ### Testing Instructions Try using trace and hit an error --- Cargo.lock | 1 + crates/turbo-trace/Cargo.toml | 4 +- crates/turbo-trace/src/tracer.rs | 72 +++++++++++++++---- crates/turborepo-lib/src/commands/query.rs | 4 +- crates/turborepo-lib/src/query/file.rs | 13 +++- crates/turborepo/tests/query.rs | 2 +- ...id.ts`_with_dependencies_(npm@10.5.0).snap | 2 +- .../integration/tests/turbo-trace.t | 5 +- 8 files changed, 78 insertions(+), 25 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index bba34a03ca13b..6eaad0a580924 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5223,6 +5223,7 @@ dependencies = [ "swc_atoms", "swc_eq_ignore_macros", "swc_visit", + "termcolor", "tracing", "unicode-width", "url", diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml index 99f7fd50c3357..8fb3ed3bd84c7 100644 --- a/crates/turbo-trace/Cargo.toml +++ b/crates/turbo-trace/Cargo.toml @@ -11,12 +11,12 @@ futures = { workspace = true } globwalk = { version = "0.1.0", path = "../turborepo-globwalk" } miette = { workspace = true, features = ["fancy"] } oxc_resolver = { version = "2.0.0" } -swc_common = { workspace = true, features = ["concurrent"] } +swc_common = { workspace = true, features = ["concurrent", "tty-emitter"] } swc_ecma_ast = { workspace = true } swc_ecma_parser = { workspace = true } swc_ecma_visit = { workspace = true } thiserror = { workspace = true } -tokio = { workspace = true } +tokio = { workspace = true, features = ["full"] } tracing = { workspace = true } tracing-subscriber = { workspace = true } turbopath = { workspace = true } diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 351c6ff0b0e76..5057c22befd1e 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -2,23 +2,33 @@ use std::{collections::HashMap, sync::Arc}; use camino::Utf8PathBuf; use globwalk::WalkType; -use miette::{Diagnostic, NamedSource, SourceSpan}; +use miette::{Diagnostic, Report, SourceSpan}; use oxc_resolver::{ EnforceExtension, ResolveError, ResolveOptions, Resolver, TsconfigOptions, TsconfigReferences, }; -use swc_common::{comments::SingleThreadedComments, input::StringInput, FileName, SourceMap}; +use swc_common::{ + comments::SingleThreadedComments, + errors::{ColorConfig, Handler}, + input::StringInput, + FileName, SourceMap, +}; use swc_ecma_ast::EsVersion; use swc_ecma_parser::{lexer::Lexer, Capturing, EsSyntax, Parser, Syntax, TsSyntax}; use swc_ecma_visit::VisitWith; use thiserror::Error; use tokio::task::JoinSet; -use tracing::debug; +use tracing::{debug, error}; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf, PathError}; use crate::import_finder::ImportFinder; #[derive(Debug, Default)] pub struct SeenFile { + // We have to add these because of a Rust bug where dead code analysis + // doesn't work properly in multi-target crates + // (i.e. crates with both a binary and library) + // https://github.com/rust-lang/rust/issues/95513 + #[allow(dead_code)] pub ast: Option, } @@ -31,35 +41,61 @@ pub struct Tracer { import_type: ImportType, } -#[derive(Debug, Error, Diagnostic)] +#[derive(Clone, Debug, Error, Diagnostic)] pub enum TraceError { #[error("failed to parse file {}: {:?}", .0, .1)] ParseError(AbsoluteSystemPathBuf, swc_ecma_parser::error::Error), #[error("failed to read file: {0}")] FileNotFound(AbsoluteSystemPathBuf), #[error(transparent)] - PathEncoding(PathError), + PathEncoding(Arc), #[error("tracing a root file `{0}`, no parent found")] RootFile(AbsoluteSystemPathBuf), - #[error("failed to resolve import to `{path}`")] + #[error("failed to resolve import to `{import}` in `{file_path}`")] Resolve { - path: String, + import: String, + file_path: String, #[label("import here")] span: SourceSpan, #[source_code] - text: NamedSource, + text: String, }, #[error("failed to walk files")] - GlobError(#[from] globwalk::WalkError), + GlobError(Arc), +} + +impl TraceResult { + #[allow(dead_code)] + pub fn emit_errors(&self) { + let handler = Handler::with_tty_emitter( + ColorConfig::Auto, + true, + false, + Some(self.source_map.clone()), + ); + for error in &self.errors { + match error { + TraceError::ParseError(_, e) => { + e.clone().into_diagnostic(&handler).emit(); + } + e => { + eprintln!("{:?}", Report::new(e.clone())); + } + } + } + } } pub struct TraceResult { + #[allow(dead_code)] + source_map: Arc, pub errors: Vec, pub files: HashMap, } /// The type of imports to trace. #[derive(Debug, Clone, Copy, PartialEq, Eq)] +#[allow(dead_code)] pub enum ImportType { /// Trace all imports. All, @@ -90,6 +126,7 @@ impl Tracer { } } + #[allow(dead_code)] pub fn set_import_type(&mut self, import_type: ImportType) { self.import_type = import_type; } @@ -162,7 +199,7 @@ impl Tracer { match resolver.resolve(file_dir, import) { Ok(resolved) => { debug!("resolved {:?}", resolved); - match resolved.into_path_buf().try_into() { + match resolved.into_path_buf().try_into().map_err(Arc::new) { Ok(path) => files.push(path), Err(err) => { errors.push(TraceError::PathEncoding(err)); @@ -176,11 +213,14 @@ impl Tracer { Err(err) => { debug!("failed to resolve: {:?}", err); let (start, end) = source_map.span_to_char_offset(&source_file, *span); + let start = start as usize; + let end = end as usize; errors.push(TraceError::Resolve { - path: import.to_string(), - span: (start as usize, end as usize).into(), - text: NamedSource::new(file_path.to_string(), file_content.clone()), + import: import.to_string(), + file_path: file_path.to_string(), + span: SourceSpan::new(start.into(), (end - start).into()), + text: file_content.clone(), }); continue; } @@ -299,6 +339,7 @@ impl Tracer { } TraceResult { + source_map: self.source_map.clone(), files: seen, errors: self.errors, } @@ -322,8 +363,9 @@ impl Tracer { Ok(files) => files, Err(e) => { return TraceResult { + source_map: self.source_map.clone(), files: HashMap::new(), - errors: vec![e.into()], + errors: vec![TraceError::GlobError(Arc::new(e))], } } }; @@ -331,6 +373,7 @@ impl Tracer { let mut futures = JoinSet::new(); let resolver = Arc::new(self.create_resolver()); + let source_map = self.source_map.clone(); let shared_self = Arc::new(self); for file in files { @@ -380,6 +423,7 @@ impl Tracer { } TraceResult { + source_map, files: usages, errors, } diff --git a/crates/turborepo-lib/src/commands/query.rs b/crates/turborepo-lib/src/commands/query.rs index c3d79df1f9fe0..4a0a01363922c 100644 --- a/crates/turborepo-lib/src/commands/query.rs +++ b/crates/turborepo-lib/src/commands/query.rs @@ -80,7 +80,9 @@ pub async fn run( // If the arg starts with "query" or "mutation", and ends in a bracket, it's // likely a direct query If it doesn't, it's a file path, so we need to // read it - let query = if (trimmed_query.starts_with("query") || trimmed_query.starts_with("mutation")) + let query = if (trimmed_query.starts_with("query") + || trimmed_query.starts_with("mutation") + || trimmed_query.starts_with('{')) && trimmed_query.ends_with('}') { query diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 2b1d06112122c..200a2c9ffc2d7 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -3,6 +3,7 @@ use std::sync::Arc; use async_graphql::{Enum, Object, SimpleObject}; use camino::Utf8PathBuf; use itertools::Itertools; +use miette::SourceCode; use swc_ecma_ast::EsVersion; use swc_ecma_parser::{EsSyntax, Syntax, TsSyntax}; use turbo_trace::Tracer; @@ -108,9 +109,13 @@ impl From for TraceError { message: format!("failed to glob files: {}", err), ..Default::default() }, - turbo_trace::TraceError::Resolve { span, text, .. } => { + turbo_trace::TraceError::Resolve { + span, + text, + file_path, + .. + } => { let import = text - .inner() .read_span(&span, 1, 1) .ok() .map(|s| String::from_utf8_lossy(s.data()).to_string()); @@ -118,7 +123,7 @@ impl From for TraceError { TraceError { message, import, - path: Some(text.name().to_string()), + path: Some(file_path), start: Some(span.offset()), end: Some(span.offset() + span.len()), } @@ -204,6 +209,7 @@ impl File { } let mut result = tracer.trace(depth).await; + result.emit_errors(); // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) @@ -225,6 +231,7 @@ impl File { } let mut result = tracer.reverse_trace().await; + result.emit_errors(); // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 4ea85f7df220e..46818a5775092 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -56,7 +56,7 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `main.ts` with dependencies" => "query { file(path: \"main.ts\") { path, dependencies { files { items { path } } } } }", "get `button.tsx` with dependencies" => "query { file(path: \"button.tsx\") { path, dependencies { files { items { path } } } } }", "get `circular.ts` with dependencies" => "query { file(path: \"circular.ts\") { path dependencies { files { items { path } } } } }", - "get `invalid.ts` with dependencies" => "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", + "get `invalid.ts` with dependencies" => "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { import } } } } }", "get `main.ts` with depth = 0" => "query { file(path: \"main.ts\") { path dependencies(depth: 1) { files { items { path } } } } }", "get `with_prefix.ts` with dependencies" => "query { file(path: \"with_prefix.ts\") { path dependencies { files { items { path } } } } }", "get `import_value_and_type.ts` with all dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: ALL) { files { items { path } } } } }", diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap index c67ae3145901c..963d257ac7d21 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap @@ -23,7 +23,7 @@ expression: query_output "errors": { "items": [ { - "message": "failed to resolve import to `./non-existent-file.js`" + "import": "import foo from \"./non-existent-file.js\";\nimport { Button } from \"./button.tsx\";\n" } ] } diff --git a/turborepo-tests/integration/tests/turbo-trace.t b/turborepo-tests/integration/tests/turbo-trace.t index 56a1f13dea51d..72356cc2e3a79 100644 --- a/turborepo-tests/integration/tests/turbo-trace.t +++ b/turborepo-tests/integration/tests/turbo-trace.t @@ -87,8 +87,7 @@ Setup } Trace file with invalid import - $ ${TURBO} query "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }" - WARNING query command is experimental and may change in the future + $ ${TURBO} query "query { file(path: \"invalid.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }" 2>/dev/null { "data": { "file": { @@ -110,7 +109,7 @@ Trace file with invalid import "errors": { "items": [ { - "message": "failed to resolve import to `./non-existent-file.js`" + "message": "failed to resolve import to `./non-existent-file.js` in `.*`" (re) } ] } From 4cfbc449150abdd676d8503740ec1e6f3bd10352 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Tue, 5 Nov 2024 13:17:28 -0500 Subject: [PATCH 148/218] feat(turbo): add cache flag (#9348) ### Description Adds a cache flag that lets you set cache permissions per cache type and per action (read or write) ### Testing Instructions Adds tests in `turborepo_cache/src/config.rs` for parsing and in `turborepo-lib/src/opts.rs` for loading and resolving --- Cargo.lock | 1 + crates/turborepo-cache/Cargo.toml | 1 + crates/turborepo-cache/src/async_cache.rs | 42 ++- crates/turborepo-cache/src/config.rs | 231 +++++++++++++ crates/turborepo-cache/src/lib.rs | 42 ++- crates/turborepo-cache/src/multiplexer.rs | 94 +++--- crates/turborepo-lib/src/cli/mod.rs | 88 +++-- crates/turborepo-lib/src/commands/mod.rs | 15 +- crates/turborepo-lib/src/config/env.rs | 14 +- crates/turborepo-lib/src/config/mod.rs | 9 + crates/turborepo-lib/src/opts.rs | 168 ++++++++-- crates/turborepo-lib/src/run/builder.rs | 3 +- crates/turborepo-lib/src/run/cache.rs | 14 +- crates/turborepo-lib/src/run/mod.rs | 4 +- .../turborepo_lib__opts__test__force.snap | 16 + ...b__opts__test__force_remote_r,local_r.snap | 7 + .../turborepo_lib__opts__test__no-cache.snap | 16 + ...pts__test__no-cache_remote_w,local_rw.snap | 7 + ...b__opts__test__remote-cache-read-only.snap | 16 + ...ote-cache-read-only_remote_rw,local_r.snap | 7 + ...urborepo_lib__opts__test__remote-only.snap | 16 + ...__test__remote-only_remote_r,local_rw.snap | 7 + .../snapshots/query__common__check_query.snap | 23 -- .../tests/snapshots/query__check_query.snap | 23 -- ...pro_get_dependencies_(npm@10.5.0)_err.snap | 8 - ...c_repro_get_dependencies_(npm@10.5.0).snap | 23 -- ...n.tsx`_with_dependencies_(npm@10.5.0).snap | 16 - ...ar.ts`_with_dependencies_(npm@10.5.0).snap | 20 -- ...id.ts`_with_dependencies_(npm@10.5.0).snap | 27 -- ...urbo_trace_get_`main.ts`_(npm@10.5.0).snap | 11 - ...e_get_`main.ts`_with_ast_(npm@10.5.0).snap | 309 ------------------ ...in.ts`_with_dependencies_(npm@10.5.0).snap | 29 -- ...`main.ts`_with_depth_=_0_(npm@10.5.0).snap | 26 -- ...x`_with_dependencies_(npm@10.5.0)_err.snap | 8 - ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 - ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 - ..._trace_get_`main.ts`_(npm@10.5.0)_err.snap | 8 - ...t_`main.ts`_with_ast_(npm@10.5.0)_err.snap | 8 - ...s`_with_dependencies_(npm@10.5.0)_err.snap | 8 - ...n.ts`_with_depth_=_0_(npm@10.5.0)_err.snap | 8 - ...__index`_with_dependents_(npm@10.5.0).snap | 26 -- .../web/test/__snapshots__/page.spec.tsx.snap | 160 --------- turborepo-tests/integration/tests/no-args.t | 18 +- .../integration/tests/turbo-help.t | 57 ++-- 44 files changed, 724 insertions(+), 926 deletions(-) create mode 100644 crates/turborepo-cache/src/config.rs create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache_remote_w,local_rw.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only_remote_rw,local_r.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only.snap create mode 100644 crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only_remote_r,local_rw.snap delete mode 100644 crates/turborepo/tests/common/snapshots/query__common__check_query.snap delete mode 100644 crates/turborepo/tests/snapshots/query__check_query.snap delete mode 100644 crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap delete mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap delete mode 100644 examples/with-nestjs/apps/web/test/__snapshots__/page.spec.tsx.snap diff --git a/Cargo.lock b/Cargo.lock index 6eaad0a580924..b817469229c5d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6242,6 +6242,7 @@ dependencies = [ "hmac", "insta", "libc", + "miette", "os_str_bytes", "path-clean", "petgraph", diff --git a/crates/turborepo-cache/Cargo.toml b/crates/turborepo-cache/Cargo.toml index 5407fb706a531..acfdf821d4010 100644 --- a/crates/turborepo-cache/Cargo.toml +++ b/crates/turborepo-cache/Cargo.toml @@ -30,6 +30,7 @@ bytes.workspace = true camino = { workspace = true } futures = { workspace = true } hmac = "0.12.1" +miette = { workspace = true } os_str_bytes = "6.5.0" path-clean = { workspace = true } petgraph = "0.6.3" diff --git a/crates/turborepo-cache/src/async_cache.rs b/crates/turborepo-cache/src/async_cache.rs index 3d20ea0bb95e5..23126ce07a5c1 100644 --- a/crates/turborepo-cache/src/async_cache.rs +++ b/crates/turborepo-cache/src/async_cache.rs @@ -227,7 +227,8 @@ mod tests { use crate::{ test_cases::{get_test_cases, TestCase}, - AsyncCache, CacheHitMetadata, CacheOpts, CacheSource, RemoteCacheOpts, + AsyncCache, CacheActions, CacheConfig, CacheHitMetadata, CacheOpts, CacheSource, + RemoteCacheOpts, }; #[tokio::test] @@ -255,9 +256,16 @@ mod tests { let opts = CacheOpts { cache_dir: Utf8PathBuf::from(".turbo/cache"), - remote_cache_read_only: false, - skip_remote: false, - skip_filesystem: true, + cache: CacheConfig { + local: CacheActions { + read: false, + write: false, + }, + remote: CacheActions { + read: true, + write: true, + }, + }, workers: 10, remote_cache_opts: Some(RemoteCacheOpts { unused_team_id: Some("my-team".to_string()), @@ -337,9 +345,16 @@ mod tests { let opts = CacheOpts { cache_dir: Utf8PathBuf::from(".turbo/cache"), - remote_cache_read_only: false, - skip_remote: true, - skip_filesystem: false, + cache: CacheConfig { + local: CacheActions { + read: true, + write: true, + }, + remote: CacheActions { + read: false, + write: false, + }, + }, workers: 10, remote_cache_opts: Some(RemoteCacheOpts { unused_team_id: Some("my-team".to_string()), @@ -429,9 +444,16 @@ mod tests { let opts = CacheOpts { cache_dir: Utf8PathBuf::from(".turbo/cache"), - remote_cache_read_only: false, - skip_remote: false, - skip_filesystem: false, + cache: CacheConfig { + local: CacheActions { + read: true, + write: true, + }, + remote: CacheActions { + read: true, + write: true, + }, + }, workers: 10, remote_cache_opts: Some(RemoteCacheOpts { unused_team_id: Some("my-team".to_string()), diff --git a/crates/turborepo-cache/src/config.rs b/crates/turborepo-cache/src/config.rs new file mode 100644 index 0000000000000..3c1289965bbf6 --- /dev/null +++ b/crates/turborepo-cache/src/config.rs @@ -0,0 +1,231 @@ +use std::str::FromStr; + +use miette::{Diagnostic, SourceSpan}; +use thiserror::Error; + +use crate::{CacheActions, CacheConfig}; + +#[derive(Debug, Error, Diagnostic, PartialEq)] +pub enum Error { + #[error("keys cannot be duplicated, found `{key}` multiple times")] + DuplicateKeys { + #[source_code] + text: String, + key: &'static str, + #[label] + span: Option, + }, + #[error("actions cannot be duplicated, found `{action}` multiple times")] + DuplicateActions { + #[source_code] + text: String, + action: &'static str, + #[label] + span: Option, + }, + #[error("invalid cache type and action pair, found `{pair}`, expected colon separated pair")] + InvalidCacheTypeAndAction { + #[source_code] + text: String, + pair: String, + #[label] + span: Option, + }, + #[error("invalid cache action `{c}`")] + InvalidCacheAction { + #[source_code] + text: String, + c: char, + #[label] + span: Option, + }, + #[error("invalid cache type `{s}`, expected `local` or `remote`")] + InvalidCacheType { + #[source_code] + text: String, + s: String, + #[label] + span: Option, + }, +} + +impl Error { + pub fn add_text(mut self, new_text: impl Into) -> Self { + match &mut self { + Self::DuplicateKeys { text, .. } => *text = new_text.into(), + Self::DuplicateActions { text, .. } => *text = new_text.into(), + Self::InvalidCacheTypeAndAction { text, .. } => *text = new_text.into(), + Self::InvalidCacheAction { text, .. } => *text = new_text.into(), + Self::InvalidCacheType { text, .. } => *text = new_text.into(), + } + + self + } + + pub fn add_span(mut self, new_span: SourceSpan) -> Self { + match &mut self { + Self::DuplicateKeys { span, .. } => *span = Some(new_span), + Self::DuplicateActions { span, .. } => *span = Some(new_span), + Self::InvalidCacheTypeAndAction { span, .. } => *span = Some(new_span), + Self::InvalidCacheAction { span, .. } => *span = Some(new_span), + Self::InvalidCacheType { span, .. } => *span = Some(new_span), + } + + self + } +} + +impl FromStr for CacheConfig { + type Err = Error; + fn from_str(s: &str) -> Result { + let mut cache = CacheConfig { + local: CacheActions { + read: false, + write: false, + }, + remote: CacheActions { + read: false, + write: false, + }, + }; + + if s.is_empty() { + return Ok(cache); + } + + let mut seen_local = false; + let mut seen_remote = false; + let mut idx = 0; + + for action in s.split(',') { + let (key, value) = action + .split_once(':') + .ok_or(Error::InvalidCacheTypeAndAction { + text: s.to_string(), + pair: action.to_string(), + span: Some(SourceSpan::new(idx.into(), action.len().into())), + })?; + + match key { + "local" => { + if seen_local { + return Err(Error::DuplicateKeys { + text: s.to_string(), + key: "local", + span: Some(SourceSpan::new(idx.into(), key.len().into())), + }); + } + + seen_local = true; + cache.local = CacheActions::from_str(value).map_err(|err| { + err.add_text(s).add_span(SourceSpan::new( + (idx + key.len() + 1).into(), + key.len().into(), + )) + })?; + } + "remote" => { + if seen_remote { + return Err(Error::DuplicateKeys { + text: s.to_string(), + key: "remote", + span: Some(SourceSpan::new(idx.into(), key.len().into())), + }); + } + + seen_remote = true; + cache.remote = CacheActions::from_str(value).map_err(|err| { + err.add_text(s).add_span(SourceSpan::new( + (idx + key.len() + 1).into(), + value.len().into(), + )) + })? + } + ty => { + return Err(Error::InvalidCacheType { + text: s.to_string(), + s: ty.to_string(), + span: Some(SourceSpan::new(idx.into(), ty.len().into())), + }) + } + } + + idx += action.len() + 1; + } + Ok(cache) + } +} + +impl FromStr for CacheActions { + type Err = Error; + fn from_str(s: &str) -> Result { + let mut cache = CacheActions { + read: false, + write: false, + }; + + for c in s.chars() { + match c { + 'r' => { + if cache.read { + return Err(Error::DuplicateActions { + text: s.to_string(), + action: "r (read)", + span: None, + }); + } + cache.read = true; + } + + 'w' => { + if cache.write { + return Err(Error::DuplicateActions { + text: s.to_string(), + action: "w (write)", + span: None, + }); + } + cache.write = true; + } + _ => { + return Err(Error::InvalidCacheAction { + c, + text: String::new(), + span: None, + }) + } + } + } + + Ok(cache) + } +} + +#[cfg(test)] +mod test { + use test_case::test_case; + + use super::*; + + #[test_case("local:r,remote:w", Ok(CacheConfig { local: CacheActions { read: true, write: false }, remote: CacheActions { read: false, write: true } }) ; "local:r,remote:w" + )] + #[test_case("local:r", Ok(CacheConfig { local: CacheActions { read: true, write: false }, remote: CacheActions { read: false, write: false } }) ; "local:r" + )] + #[test_case("local:", Ok(CacheConfig { local: CacheActions { read: false, write: false }, remote: CacheActions { read: false, write: false } }) ; "empty action" + )] + #[test_case("local:,remote:", Ok(CacheConfig { local: CacheActions { read: false, write: false }, remote: CacheActions { read: false, write: false } }) ; "multiple empty actions" + )] + #[test_case("local:,remote:r", Ok(CacheConfig { local: CacheActions { read: false, write: false }, remote: CacheActions { read: true, write: false } }) ; "local: empty, remote:r" + )] + #[test_case("", Ok(CacheConfig { local: CacheActions { read: false, write: false }, remote: CacheActions { read: false, write: false } }) ; "empty" + )] + #[test_case("local:r,local:w", Err(Error::DuplicateKeys { text: "local:r,local:w".to_string(), key: "local", span: Some(SourceSpan::new(8.into(), 5.into())) }) ; "duplicate local key" + )] + #[test_case("local:rr", Err(Error::DuplicateActions { text: "local:rr".to_string(), action: "r (read)", span: Some(SourceSpan::new(6.into(), 5.into())) }) ; "duplicate action")] + #[test_case("remote:r,local=rx", Err(Error::InvalidCacheTypeAndAction { text: "remote:r,local=rx".to_string(), pair: "local=rx".to_string(), span: Some(SourceSpan::new(9.into(), 8.into())) }) ; "invalid key action pair")] + #[test_case("local:rx", Err(Error::InvalidCacheAction { c: 'x', text: "local:rx".to_string(), span: Some(SourceSpan::new(6.into(), 5.into())) }) ; "invalid action")] + #[test_case("file:r", Err(Error::InvalidCacheType { s: "file".to_string(), text: "file:r".to_string(), span: Some(SourceSpan::new(0.into(), 4.into())) }) ; "invalid cache type")] + fn test_cache_config(s: &str, expected: Result) { + assert_eq!(CacheConfig::from_str(s), expected); + } +} diff --git a/crates/turborepo-cache/src/lib.rs b/crates/turborepo-cache/src/lib.rs index c05f4dcce5edd..65bcadbc7e5db 100644 --- a/crates/turborepo-cache/src/lib.rs +++ b/crates/turborepo-cache/src/lib.rs @@ -7,6 +7,7 @@ mod async_cache; /// The core cache creation and restoration logic. pub mod cache_archive; +pub mod config; /// File system cache pub mod fs; /// Remote cache @@ -61,6 +62,8 @@ pub enum CacheError { LinkTargetDoesNotExist(String, #[backtrace] Backtrace), #[error("Invalid tar, link target does not exist on header")] LinkTargetNotOnHeader(#[backtrace] Backtrace), + #[error(transparent)] + Config(#[from] config::Error), #[error("attempted to restore unsupported file type: {0:?}")] RestoreUnsupportedFileType(tar::EntryType, #[backtrace] Backtrace), // We don't pass the `FileType` because there's no simple @@ -105,12 +108,43 @@ pub struct CacheHitMetadata { pub time_saved: u64, } -#[derive(Clone, Debug, Default)] +#[derive(Debug, PartialEq, Eq, Clone, Copy)] +pub struct CacheActions { + pub read: bool, + pub write: bool, +} + +impl CacheActions { + pub fn should_use(&self) -> bool { + self.read || self.write + } +} + +#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)] +pub struct CacheConfig { + pub local: CacheActions, + pub remote: CacheActions, +} + +impl CacheConfig { + pub fn skip_writes(&self) -> bool { + !self.local.write && !self.remote.write + } +} + +impl Default for CacheActions { + fn default() -> Self { + Self { + read: true, + write: true, + } + } +} + +#[derive(Clone, Debug, Default, PartialEq, Eq)] pub struct CacheOpts { pub cache_dir: Utf8PathBuf, - pub remote_cache_read_only: bool, - pub skip_remote: bool, - pub skip_filesystem: bool, + pub cache: CacheConfig, pub workers: u32, pub remote_cache_opts: Option, } diff --git a/crates/turborepo-cache/src/multiplexer.rs b/crates/turborepo-cache/src/multiplexer.rs index e5b1ab8db661c..44bc51afaeaf8 100644 --- a/crates/turborepo-cache/src/multiplexer.rs +++ b/crates/turborepo-cache/src/multiplexer.rs @@ -11,7 +11,7 @@ use turborepo_api_client::{APIAuth, APIClient}; use crate::{ fs::FSCache, http::{HTTPCache, UploadMap}, - CacheError, CacheHitMetadata, CacheOpts, + CacheConfig, CacheError, CacheHitMetadata, CacheOpts, }; pub struct CacheMultiplexer { @@ -23,7 +23,7 @@ pub struct CacheMultiplexer { // Just for keeping track of whether we've already printed a warning about the remote cache // being read-only should_print_skipping_remote_put: AtomicBool, - remote_cache_read_only: bool, + cache_config: CacheConfig, fs: Option, http: Option, } @@ -37,8 +37,8 @@ impl CacheMultiplexer { api_auth: Option, analytics_recorder: Option, ) -> Result { - let use_fs_cache = !opts.skip_filesystem; - let use_http_cache = !opts.skip_remote; + let use_fs_cache = opts.cache.local.should_use(); + let use_http_cache = opts.cache.remote.should_use(); // Since the above two flags are not mutually exclusive it is possible to // configure yourself out of having a cache. We should tell you about it @@ -67,7 +67,7 @@ impl CacheMultiplexer { Ok(CacheMultiplexer { should_print_skipping_remote_put: AtomicBool::new(true), should_use_http_cache: AtomicBool::new(http_cache.is_some()), - remote_cache_read_only: opts.remote_cache_read_only, + cache_config: opts.cache, fs: fs_cache, http: http_cache, }) @@ -95,14 +95,20 @@ impl CacheMultiplexer { files: &[AnchoredSystemPathBuf], duration: u64, ) -> Result<(), CacheError> { - self.fs - .as_ref() - .map(|fs| fs.put(anchor, key, files, duration)) - .transpose()?; + if self.cache_config.local.write { + self.fs + .as_ref() + .map(|fs| fs.put(anchor, key, files, duration)) + .transpose()?; + } let http_result = match self.get_http_cache() { Some(http) => { - if self.remote_cache_read_only { + if self.cache_config.remote.write { + let http_result = http.put(anchor, key, files, duration).await; + + Some(http_result) + } else { if self .should_print_skipping_remote_put .load(Ordering::Relaxed) @@ -115,10 +121,6 @@ impl CacheMultiplexer { // Cache is functional but running in read-only mode, so we don't want to try to // write to it None - } else { - let http_result = http.put(anchor, key, files, duration).await; - - Some(http_result) } } _ => None, @@ -144,25 +146,31 @@ impl CacheMultiplexer { anchor: &AbsoluteSystemPath, key: &str, ) -> Result)>, CacheError> { - if let Some(fs) = &self.fs { - if let response @ Ok(Some(_)) = fs.fetch(anchor, key) { - return response; + if self.cache_config.local.read { + if let Some(fs) = &self.fs { + if let response @ Ok(Some(_)) = fs.fetch(anchor, key) { + return response; + } } } - if let Some(http) = self.get_http_cache() { - if let Ok(Some((CacheHitMetadata { source, time_saved }, files))) = - http.fetch(key).await - { - // Store this into fs cache. We can ignore errors here because we know - // we have previously successfully stored in HTTP cache, and so the overall - // result is a success at fetching. Storing in lower-priority caches is an - // optimization. - if let Some(fs) = &self.fs { - let _ = fs.put(anchor, key, &files, time_saved); - } + if self.cache_config.remote.read { + if let Some(http) = self.get_http_cache() { + if let Ok(Some((CacheHitMetadata { source, time_saved }, files))) = + http.fetch(key).await + { + // Store this into fs cache. We can ignore errors here because we know + // we have previously successfully stored in HTTP cache, and so the overall + // result is a success at fetching. Storing in lower-priority caches is an + // optimization. + if self.cache_config.local.write { + if let Some(fs) = &self.fs { + let _ = fs.put(anchor, key, &files, time_saved); + } + } - return Ok(Some((CacheHitMetadata { source, time_saved }, files))); + return Ok(Some((CacheHitMetadata { source, time_saved }, files))); + } } } @@ -171,23 +179,27 @@ impl CacheMultiplexer { #[tracing::instrument(skip_all)] pub async fn exists(&self, key: &str) -> Result, CacheError> { - if let Some(fs) = &self.fs { - match fs.exists(key) { - cache_hit @ Ok(Some(_)) => { - return cache_hit; + if self.cache_config.local.read { + if let Some(fs) = &self.fs { + match fs.exists(key) { + cache_hit @ Ok(Some(_)) => { + return cache_hit; + } + Ok(None) => {} + Err(err) => debug!("failed to check fs cache: {:?}", err), } - Ok(None) => {} - Err(err) => debug!("failed to check fs cache: {:?}", err), } } - if let Some(http) = self.get_http_cache() { - match http.exists(key).await { - cache_hit @ Ok(Some(_)) => { - return cache_hit; + if self.cache_config.remote.read { + if let Some(http) = self.get_http_cache() { + match http.exists(key).await { + cache_hit @ Ok(Some(_)) => { + return cache_hit; + } + Ok(None) => {} + Err(err) => debug!("failed to check http cache: {:?}", err), } - Ok(None) => {} - Err(err) => debug!("failed to check http cache: {:?}", err), } } diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 136cfa7154d0d..a5e7cd9b2a337 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -33,7 +33,6 @@ use crate::{ }; mod error; - // Global turbo sets this environment variable to its cwd so that local // turbo can use it for package inference. pub const INVOCATION_DIR_ENV_VAR: &str = "TURBO_INVOCATION_DIR"; @@ -724,9 +723,6 @@ pub struct ExecutionArgs { /// Run turbo in single-package mode #[clap(long)] pub single_package: bool, - /// Ignore the existing cache (to force execution) - #[clap(long, default_missing_value = "true")] - pub force: Option>, /// Specify whether or not to do framework inference for tasks #[clap(long, value_name = "BOOL", action = ArgAction::Set, default_value = "true", default_missing_value = "true", num_args = 0..=1)] pub framework_inference: bool, @@ -769,10 +765,6 @@ pub struct ExecutionArgs { pub only: bool, #[clap(long, hide = true)] pub pkg_inference_root: Option, - /// Ignore the local filesystem cache for all tasks. Only - /// allow reading and caching artifacts using the remote cache. - #[clap(long, default_missing_value = "true")] - pub remote_only: Option>, /// Use "none" to remove prefixes from task logs. Use "task" to get task id /// prefixing. Use "auto" to let turbo decide how to prefix the logs /// based on the execution environment. In most cases this will be the same @@ -791,11 +783,6 @@ pub struct ExecutionArgs { } impl ExecutionArgs { - pub fn remote_only(&self) -> Option { - let remote_only = self.remote_only?; - Some(remote_only.unwrap_or(true)) - } - fn track(&self, telemetry: &CommandEventBuilder) { // default to false track_usage!(telemetry, self.framework_inference, |val: bool| !val); @@ -803,9 +790,7 @@ impl ExecutionArgs { track_usage!(telemetry, self.continue_execution, |val| val); track_usage!(telemetry, self.single_package, |val| val); track_usage!(telemetry, self.only, |val| val); - track_usage!(telemetry, self.remote_only().unwrap_or_default(), |val| val); track_usage!(telemetry, &self.cache_dir, Option::is_some); - track_usage!(telemetry, &self.force, Option::is_some); track_usage!(telemetry, &self.pkg_inference_root, Option::is_some); if let Some(concurrency) = &self.concurrency { @@ -848,6 +833,29 @@ impl ExecutionArgs { ArgGroup::new("daemon-group").multiple(false).required(false), ])] pub struct RunArgs { + /// Set the cache behavior for this run. Pass a list of comma-separated key, + /// value pairs to enable reading and writing to either the local or + /// remote cache. + #[clap(long, conflicts_with_all = &["force", "remote_only", "remote_cache_read_only", "no_cache"])] + pub cache: Option, + /// Ignore the existing cache (to force execution). Equivalent to + /// `--cache=local:w,remote:w` + #[clap(long, default_missing_value = "true")] + pub force: Option>, + /// Ignore the local filesystem cache for all tasks. Only + /// allow reading and caching artifacts using the remote cache. + /// Equivalent to `--cache=remote:rw` + #[clap(long, default_missing_value = "true", group = "cache-group")] + pub remote_only: Option>, + /// Treat remote cache as read only. Equivalent to + /// `--cache=remote:r;local:rw` + #[clap(long, default_missing_value = "true")] + pub remote_cache_read_only: Option>, + /// Avoid saving task results to the cache. Useful for development/watch + /// tasks. Equivalent to `--cache=local:r,remote:r` + #[clap(long)] + pub no_cache: bool, + /// Set the number of concurrent cache operations (default 10) #[clap(long, default_value_t = DEFAULT_NUM_WORKERS)] pub cache_workers: u32, @@ -859,12 +867,6 @@ pub struct RunArgs { /// is provided #[clap(long, num_args = 0..=1, default_missing_value = "", value_parser = validate_graph_extension)] pub graph: Option, - - /// Avoid saving task results to the cache. Useful for development/watch - /// tasks. - #[clap(long)] - pub no_cache: bool, - // clap does not have negation flags such as --daemon and --no-daemon // so we need to use a group to enforce that only one of them is set. // ----------------------- @@ -887,9 +889,6 @@ pub struct RunArgs { /// All identifying data omitted from the profile. #[clap(long, value_parser=NonEmptyStringValueParser::new(), conflicts_with = "profile")] pub anon_profile: Option, - /// Treat remote cache as read only - #[clap(long, default_missing_value = "true")] - pub remote_cache_read_only: Option>, /// Generate a summary of the turbo run #[clap(long, default_missing_value = "true")] pub summarize: Option>, @@ -906,6 +905,9 @@ pub struct RunArgs { impl Default for RunArgs { fn default() -> Self { Self { + remote_only: None, + cache: None, + force: None, cache_workers: DEFAULT_NUM_WORKERS, dry_run: None, graph: None, @@ -923,6 +925,11 @@ impl Default for RunArgs { } impl RunArgs { + pub fn remote_only(&self) -> Option { + let remote_only = self.remote_only?; + Some(remote_only.unwrap_or(true)) + } + /// Some(true) means force the daemon /// Some(false) means force no daemon /// None means use the default detection @@ -957,6 +964,8 @@ impl RunArgs { pub fn track(&self, telemetry: &CommandEventBuilder) { // default to true track_usage!(telemetry, self.no_cache, |val| val); + track_usage!(telemetry, self.remote_only().unwrap_or_default(), |val| val); + track_usage!(telemetry, &self.force, Option::is_some); track_usage!(telemetry, self.daemon, |val| val); track_usage!(telemetry, self.no_daemon, |val| val); track_usage!(telemetry, self.parallel, |val| val); @@ -1443,7 +1452,6 @@ mod test { fn get_default_execution_args() -> ExecutionArgs { ExecutionArgs { output_logs: None, - remote_only: None, framework_inference: true, ..ExecutionArgs::default() } @@ -1779,10 +1787,12 @@ mod test { command: Some(Command::Run { execution_args: Box::new(ExecutionArgs { tasks: vec!["build".to_string()], - force: Some(Some(true)), ..get_default_execution_args() }), - run_args: Box::new(get_default_run_args()) + run_args: Box::new(RunArgs { + force: Some(Some(true)), + ..get_default_run_args() + }) }), ..Args::default() } ; @@ -2078,10 +2088,12 @@ mod test { command: Some(Command::Run { execution_args: Box::new(ExecutionArgs { tasks: vec!["build".to_string()], - remote_only: None, ..get_default_execution_args() }), - run_args: Box::new(get_default_run_args()) + run_args: Box::new(RunArgs { + remote_only: None, + ..get_default_run_args() + }) }), ..Args::default() } ; @@ -2093,10 +2105,12 @@ mod test { command: Some(Command::Run { execution_args: Box::new(ExecutionArgs { tasks: vec!["build".to_string()], - remote_only: Some(Some(true)), ..get_default_execution_args() }), - run_args: Box::new(get_default_run_args()) + run_args: Box::new(RunArgs { + remote_only: Some(Some(true)), + ..get_default_run_args() + }) }), ..Args::default() } ; @@ -2108,10 +2122,12 @@ mod test { command: Some(Command::Run { execution_args: Box::new(ExecutionArgs { tasks: vec!["build".to_string()], - remote_only: Some(Some(true)), ..get_default_execution_args() }), - run_args: Box::new(get_default_run_args()) + run_args: Box::new(RunArgs { + remote_only: Some(Some(true)), + ..get_default_run_args() + }) }), ..Args::default() } ; @@ -2123,10 +2139,12 @@ mod test { command: Some(Command::Run { execution_args: Box::new(ExecutionArgs { tasks: vec!["build".to_string()], - remote_only: Some(Some(false)), ..get_default_execution_args() }), - run_args: Box::new(get_default_run_args()) + run_args: Box::new(RunArgs { + remote_only: Some(Some(false)), + ..get_default_run_args() + }) }), ..Args::default() } ; diff --git a/crates/turborepo-lib/src/commands/mod.rs b/crates/turborepo-lib/src/commands/mod.rs index 04f1568bc0df8..439be0cd13ae4 100644 --- a/crates/turborepo-lib/src/commands/mod.rs +++ b/crates/turborepo-lib/src/commands/mod.rs @@ -93,20 +93,23 @@ impl CommandBase { ) .with_force( self.args - .execution_args() + .run_args() .and_then(|args| args.force.map(|value| value.unwrap_or(true))), ) .with_log_order(self.args.execution_args().and_then(|args| args.log_order)) - .with_remote_only( - self.args - .execution_args() - .and_then(|args| args.remote_only()), - ) + .with_remote_only(self.args.run_args().and_then(|args| args.remote_only())) .with_remote_cache_read_only( self.args .run_args() .and_then(|args| args.remote_cache_read_only()), ) + .with_cache( + self.args + .run_args() + .and_then(|args| args.cache.as_deref()) + .map(|cache| cache.parse()) + .transpose()?, + ) .with_run_summary(self.args.run_args().and_then(|args| args.summarize())) .with_allow_no_turbo_json(self.args.allow_no_turbo_json.then_some(true)) .build() diff --git a/crates/turborepo-lib/src/config/env.rs b/crates/turborepo-lib/src/config/env.rs index 1f81dba3b0640..5d9aedcf7406f 100644 --- a/crates/turborepo-lib/src/config/env.rs +++ b/crates/turborepo-lib/src/config/env.rs @@ -39,6 +39,7 @@ const TURBO_MAPPING: &[(&str, &str)] = [ ("turbo_remote_cache_read_only", "remote_cache_read_only"), ("turbo_run_summary", "run_summary"), ("turbo_allow_no_turbo_json", "allow_no_turbo_json"), + ("turbo_cache", "cache"), ] .as_slice(); @@ -77,12 +78,6 @@ impl ResolvedConfigurationOptions for EnvVars { .map(|value| value.ok_or_else(|| Error::InvalidPreflight)) .transpose()?; - // Process enabled - let enabled = self - .truthy_value("enabled") - .map(|value| value.ok_or_else(|| Error::InvalidRemoteCacheEnabled)) - .transpose()?; - let force = self.truthy_value("force").flatten(); let remote_only = self.truthy_value("remote_only").flatten(); let remote_cache_read_only = self.truthy_value("remote_cache_read_only").flatten(); @@ -162,10 +157,15 @@ impl ResolvedConfigurationOptions for EnvVars { token: self.output_map.get("token").cloned(), scm_base: self.output_map.get("scm_base").cloned(), scm_head: self.output_map.get("scm_head").cloned(), + cache: self + .output_map + .get("cache") + .map(|c| c.parse()) + .transpose()?, // Processed booleans signature, preflight, - enabled, + enabled: None, ui, allow_no_package_manager, daemon, diff --git a/crates/turborepo-lib/src/config/mod.rs b/crates/turborepo-lib/src/config/mod.rs index a32b592d7eb24..55c772a23dbe4 100644 --- a/crates/turborepo-lib/src/config/mod.rs +++ b/crates/turborepo-lib/src/config/mod.rs @@ -19,6 +19,7 @@ use thiserror::Error; use tracing::debug; use turbo_json::TurboJsonReader; use turbopath::{AbsoluteSystemPath, AbsoluteSystemPathBuf}; +use turborepo_cache::CacheConfig; use turborepo_errors::TURBO_SITE; use turborepo_repository::package_graph::PackageName; @@ -81,6 +82,8 @@ pub enum Error { config_path: AbsoluteSystemPathBuf, error: io::Error, }, + #[error(transparent)] + Cache(#[from] turborepo_cache::config::Error), #[error( "Package tasks (#) are not allowed in single-package repositories: found \ {task_id}" @@ -252,6 +255,8 @@ pub struct ConfigurationOptions { pub(crate) root_turbo_json_path: Option, pub(crate) force: Option, pub(crate) log_order: Option, + #[serde(skip)] + pub(crate) cache: Option, pub(crate) remote_only: Option, pub(crate) remote_cache_read_only: Option, pub(crate) run_summary: Option, @@ -368,6 +373,10 @@ impl ConfigurationOptions { }) } + pub fn cache(&self) -> Option { + self.cache + } + pub fn force(&self) -> bool { self.force.unwrap_or_default() } diff --git a/crates/turborepo-lib/src/opts.rs b/crates/turborepo-lib/src/opts.rs index 9b58a2996cd29..91a659f680b98 100644 --- a/crates/turborepo-lib/src/opts.rs +++ b/crates/turborepo-lib/src/opts.rs @@ -32,6 +32,11 @@ pub enum Error { or equal to 1: {1}" )] ConcurrencyOutOfBounds(#[backtrace] backtrace::Backtrace, String), + #[error( + "Cannot set `cache` config and other cache options (`force`, `remoteOnly`, \ + `remoteCacheReadOnly`) at the same time" + )] + OverlappingCacheOptions, #[error(transparent)] Path(#[from] turbopath::PathError), #[error(transparent)] @@ -100,16 +105,16 @@ impl Opts { return Err(Error::ExpectedRun(Backtrace::capture())); }; - let run_and_execution_args = OptsInputs { + let inputs = OptsInputs { run_args: run_args.as_ref(), execution_args: execution_args.as_ref(), config, api_auth: &api_auth, }; - let run_opts = RunOpts::try_from(run_and_execution_args)?; - let cache_opts = CacheOpts::from(run_and_execution_args); - let scope_opts = ScopeOpts::try_from(run_and_execution_args)?; - let runcache_opts = RunCacheOpts::from(run_and_execution_args); + let run_opts = RunOpts::try_from(inputs)?; + let cache_opts = CacheOpts::try_from(inputs)?; + let scope_opts = ScopeOpts::try_from(inputs)?; + let runcache_opts = RunCacheOpts::from(inputs); Ok(Self { run_opts, @@ -128,18 +133,14 @@ struct OptsInputs<'a> { api_auth: &'a Option, } -#[derive(Clone, Debug, Default)] +#[derive(Clone, Copy, Debug, Default)] pub struct RunCacheOpts { - pub(crate) skip_reads: bool, - pub(crate) skip_writes: bool, pub(crate) task_output_logs_override: Option, } impl<'a> From> for RunCacheOpts { fn from(inputs: OptsInputs<'a>) -> Self { RunCacheOpts { - skip_reads: inputs.config.force(), - skip_writes: inputs.run_args.no_cache, task_output_logs_override: inputs.execution_args.output_logs, } } @@ -359,19 +360,52 @@ impl<'a> TryFrom> for ScopeOpts { } } -impl<'a> From> for CacheOpts { - fn from(inputs: OptsInputs<'a>) -> Self { +impl<'a> TryFrom> for CacheOpts { + type Error = self::Error; + + fn try_from(inputs: OptsInputs<'a>) -> Result { let is_linked = turborepo_api_client::is_linked(inputs.api_auth); - let skip_remote = if !is_linked { - true + let cache = inputs.config.cache(); + let has_old_cache_config = inputs.config.remote_only() + || inputs.config.force() + || inputs.run_args.no_cache + || inputs.config.remote_cache_read_only(); + + if has_old_cache_config && cache.is_some() { + return Err(Error::OverlappingCacheOptions); + } + + let mut cache = cache.unwrap_or_default(); + + if inputs.config.remote_only() { + cache.local.read = false; + cache.local.write = false; + } + + if inputs.config.force() { + cache.local.read = false; + cache.remote.read = false; + } + + if inputs.run_args.no_cache { + cache.local.write = false; + cache.remote.write = false; + } + + if !is_linked { + cache.remote.read = false; + cache.remote.write = false; } else if let Some(enabled) = inputs.config.enabled { // We're linked, but if the user has explicitly enabled or disabled, use that // value - !enabled - } else { - false + cache.remote.read = enabled; + cache.remote.write = enabled; }; + if inputs.config.remote_cache_read_only() { + cache.remote.write = false; + } + // Note that we don't currently use the team_id value here. In the future, we // should probably verify that we only use the signature value when the // configured team_id matches the final resolved team_id. @@ -383,14 +417,12 @@ impl<'a> From> for CacheOpts { signature, )); - CacheOpts { + Ok(CacheOpts { cache_dir: inputs.config.cache_dir().into(), - skip_filesystem: inputs.config.remote_only(), - remote_cache_read_only: inputs.config.remote_cache_read_only(), + cache, workers: inputs.run_args.cache_workers, - skip_remote, remote_cache_opts, - } + }) } } @@ -410,14 +442,20 @@ impl ScopeOpts { #[cfg(test)] mod test { + use test_case::test_case; + use turbopath::AbsoluteSystemPathBuf; + use turborepo_api_client::APIAuth; use turborepo_cache::CacheOpts; + use turborepo_ui::ColorConfig; - use super::RunOpts; + use super::{OptsInputs, RunOpts}; use crate::{ - cli::DryRunMode, + cli::{Command, DryRunMode, RunArgs}, + commands::CommandBase, opts::{Opts, RunCacheOpts, ScopeOpts}, turbo_json::UIMode, + Args, }; #[derive(Default)] @@ -551,4 +589,86 @@ mod test { let synthesized = opts.synthesize_command(); assert_eq!(synthesized, expected); } + + #[test_case( + RunArgs { + no_cache: true, + ..Default::default() + }, "no-cache" + )] + #[test_case( + RunArgs { + force: Some(Some(true)), + ..Default::default() + }, "force" + )] + #[test_case( + RunArgs { + remote_only: Some(Some(true)), + ..Default::default() + }, "remote-only" + )] + #[test_case( + RunArgs { + remote_cache_read_only: Some(Some(true)), + ..Default::default() + }, "remote-cache-read-only" + )] + #[test_case( + RunArgs { + no_cache: true, + cache: Some("remote:w,local:rw".to_string()), + ..Default::default() + }, "no-cache_remote_w,local_rw" + )] + #[test_case( + RunArgs { + remote_only: Some(Some(true)), + cache: Some("remote:r,local:rw".to_string()), + ..Default::default() + }, "remote-only_remote_r,local_rw" + )] + #[test_case( + RunArgs { + force: Some(Some(true)), + cache: Some("remote:r,local:r".to_string()), + ..Default::default() + }, "force_remote_r,local_r" + )] + #[test_case( + RunArgs { + remote_cache_read_only: Some(Some(true)), + cache: Some("remote:rw,local:r".to_string()), + ..Default::default() + }, "remote-cache-read-only_remote_rw,local_r" + )] + fn test_resolve_cache_config(run_args: RunArgs, name: &str) -> Result<(), anyhow::Error> { + let mut args = Args::default(); + args.command = Some(Command::Run { + execution_args: Box::default(), + run_args: Box::new(run_args), + }); + let base = CommandBase::new( + args, + AbsoluteSystemPathBuf::default(), + "1.0.0", + ColorConfig::new(true), + ); + + let cache_opts = CacheOpts::try_from(OptsInputs { + run_args: base.args().run_args().unwrap(), + execution_args: base.args().execution_args().unwrap(), + config: base.config()?, + api_auth: &Some(APIAuth { + team_id: Some("my-team".to_string()), + token: "my-token".to_string(), + team_slug: None, + }), + }) + .map(|cache_opts| cache_opts.cache); + + insta::assert_debug_snapshot!(name, cache_opts); + + Ok(()) + } } diff --git a/crates/turborepo-lib/src/run/builder.rs b/crates/turborepo-lib/src/run/builder.rs index aeb4ac081ae5e..9795b65f347f7 100644 --- a/crates/turborepo-lib/src/run/builder.rs +++ b/crates/turborepo-lib/src/run/builder.rs @@ -457,7 +457,8 @@ impl RunBuilder { let run_cache = Arc::new(RunCache::new( async_cache, &self.repo_root, - &self.opts.runcache_opts, + self.opts.runcache_opts, + &self.opts.cache_opts, color_selector, daemon.clone(), self.color_config, diff --git a/crates/turborepo-lib/src/run/cache.rs b/crates/turborepo-lib/src/run/cache.rs index 02c9eedce5b9b..b70abdd6e48c3 100644 --- a/crates/turborepo-lib/src/run/cache.rs +++ b/crates/turborepo-lib/src/run/cache.rs @@ -10,7 +10,9 @@ use tracing::{debug, error, log::warn}; use turbopath::{ AbsoluteSystemPath, AbsoluteSystemPathBuf, AnchoredSystemPath, AnchoredSystemPathBuf, }; -use turborepo_cache::{http::UploadMap, AsyncCache, CacheError, CacheHitMetadata, CacheSource}; +use turborepo_cache::{ + http::UploadMap, AsyncCache, CacheError, CacheHitMetadata, CacheOpts, CacheSource, +}; use turborepo_repository::package_graph::PackageInfo; use turborepo_scm::SCM; use turborepo_telemetry::events::{task::PackageTaskEventBuilder, TrackedErrors}; @@ -65,10 +67,12 @@ pub trait CacheOutput { } impl RunCache { + #[allow(clippy::too_many_arguments)] pub fn new( cache: AsyncCache, repo_root: &AbsoluteSystemPath, - opts: &RunCacheOpts, + run_cache_opts: RunCacheOpts, + cache_opts: &CacheOpts, color_selector: ColorSelector, daemon_client: Option>, ui: ColorConfig, @@ -77,14 +81,14 @@ impl RunCache { let task_output_logs = if is_dry_run { Some(OutputLogsMode::None) } else { - opts.task_output_logs_override + run_cache_opts.task_output_logs_override }; RunCache { task_output_logs, cache, warnings: Default::default(), - reads_disabled: opts.skip_reads, - writes_disabled: opts.skip_writes, + reads_disabled: !cache_opts.cache.remote.read && !cache_opts.cache.local.read, + writes_disabled: !cache_opts.cache.remote.write && !cache_opts.cache.local.write, repo_root: repo_root.to_owned(), color_selector, daemon_client, diff --git a/crates/turborepo-lib/src/run/mod.rs b/crates/turborepo-lib/src/run/mod.rs index 8120f4dcd569b..448b8c02d4726 100644 --- a/crates/turborepo-lib/src/run/mod.rs +++ b/crates/turborepo-lib/src/run/mod.rs @@ -114,7 +114,7 @@ impl Run { ); } - let use_http_cache = !self.opts.cache_opts.skip_remote; + let use_http_cache = self.opts.cache_opts.cache.remote.should_use(); if use_http_cache { cprintln!(self.color_config, GREY, "• Remote caching enabled"); } else { @@ -277,7 +277,7 @@ impl Run { } pub async fn run(&self, ui_sender: Option, is_watch: bool) -> Result { - let skip_cache_writes = self.opts.runcache_opts.skip_writes; + let skip_cache_writes = self.opts.cache_opts.cache.skip_writes(); if let Some(subscriber) = self.signal_handler.subscribe() { let run_cache = self.run_cache.clone(); tokio::spawn(async move { diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force.snap new file mode 100644 index 0000000000000..8cb25abf8d6bf --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force.snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Ok( + CacheConfig { + local: CacheActions { + read: false, + write: true, + }, + remote: CacheActions { + read: false, + write: true, + }, + }, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap new file mode 100644 index 0000000000000..cbc9a96ee2d30 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap @@ -0,0 +1,7 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Err( + OverlappingCacheOptions, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache.snap new file mode 100644 index 0000000000000..418a3f24a6b8a --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache.snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Ok( + CacheConfig { + local: CacheActions { + read: true, + write: false, + }, + remote: CacheActions { + read: true, + write: false, + }, + }, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache_remote_w,local_rw.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache_remote_w,local_rw.snap new file mode 100644 index 0000000000000..cbc9a96ee2d30 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__no-cache_remote_w,local_rw.snap @@ -0,0 +1,7 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Err( + OverlappingCacheOptions, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only.snap new file mode 100644 index 0000000000000..4cf87e441ba45 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only.snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Ok( + CacheConfig { + local: CacheActions { + read: true, + write: true, + }, + remote: CacheActions { + read: true, + write: false, + }, + }, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only_remote_rw,local_r.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only_remote_rw,local_r.snap new file mode 100644 index 0000000000000..cbc9a96ee2d30 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-cache-read-only_remote_rw,local_r.snap @@ -0,0 +1,7 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Err( + OverlappingCacheOptions, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only.snap new file mode 100644 index 0000000000000..1c74ad6f2c749 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only.snap @@ -0,0 +1,16 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Ok( + CacheConfig { + local: CacheActions { + read: false, + write: false, + }, + remote: CacheActions { + read: true, + write: true, + }, + }, +) diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only_remote_r,local_rw.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only_remote_r,local_rw.snap new file mode 100644 index 0000000000000..cbc9a96ee2d30 --- /dev/null +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__remote-only_remote_r,local_rw.snap @@ -0,0 +1,7 @@ +--- +source: crates/turborepo-lib/src/opts.rs +expression: cache_opts +--- +Err( + OverlappingCacheOptions, +) diff --git a/crates/turborepo/tests/common/snapshots/query__common__check_query.snap b/crates/turborepo/tests/common/snapshots/query__common__check_query.snap deleted file mode 100644 index 890664e035247..0000000000000 --- a/crates/turborepo/tests/common/snapshots/query__common__check_query.snap +++ /dev/null @@ -1,23 +0,0 @@ ---- -source: crates/turborepo-lib/tests/common/mod.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "index.js", - "dependencies": { - "files": { - "items": [ - { - "path": "nm/index.js" - } - ] - }, - "errors": { - "items": [] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__check_query.snap b/crates/turborepo/tests/snapshots/query__check_query.snap deleted file mode 100644 index 4fbff3206ef3c..0000000000000 --- a/crates/turborepo/tests/snapshots/query__check_query.snap +++ /dev/null @@ -1,23 +0,0 @@ ---- -source: crates/turborepo-lib/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "index.js", - "dependencies": { - "files": { - "items": [ - { - "path": "nm/index.js" - } - ] - }, - "errors": { - "items": [] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__oxc_repro_get_dependencies_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap deleted file mode 100644 index 2e879b27d8d8f..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_oxc_repro_get_dependencies_(npm@10.5.0).snap +++ /dev/null @@ -1,23 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "index.js", - "dependencies": { - "files": { - "items": [ - { - "path": "nm/index.js" - } - ] - }, - "errors": { - "items": [] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap deleted file mode 100644 index 183e2c8e75dd7..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0).snap +++ /dev/null @@ -1,16 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "button.tsx", - "dependencies": { - "files": { - "items": [] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap deleted file mode 100644 index e4950e2aa3f9d..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0).snap +++ /dev/null @@ -1,20 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "circular.ts", - "dependencies": { - "files": { - "items": [ - { - "path": "circular2.ts" - } - ] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap deleted file mode 100644 index 8354df28773f7..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0).snap +++ /dev/null @@ -1,27 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "invalid.ts", - "dependencies": { - "files": { - "items": [ - { - "path": "button.tsx" - } - ] - }, - "errors": { - "items": [ - { - "message": "failed to resolve import" - } - ] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap deleted file mode 100644 index 41503d9c76a44..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_(npm@10.5.0).snap +++ /dev/null @@ -1,11 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "main.ts" - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap deleted file mode 100644 index 863d9791335e2..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0).snap +++ /dev/null @@ -1,309 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "main.ts", - "ast": { - "type": "Module", - "span": { - "start": 1, - "end": 169 - }, - "body": [ - { - "type": "ImportDeclaration", - "span": { - "start": 1, - "end": 35 - }, - "specifiers": [ - { - "type": "ImportSpecifier", - "span": { - "start": 10, - "end": 16 - }, - "local": { - "type": "Identifier", - "span": { - "start": 10, - "end": 16 - }, - "ctxt": 0, - "value": "Button", - "optional": false - }, - "imported": null, - "isTypeOnly": false - } - ], - "source": { - "type": "StringLiteral", - "span": { - "start": 24, - "end": 34 - }, - "value": "./button", - "raw": "\"./button\"" - }, - "typeOnly": false, - "with": null, - "phase": "evaluation" - }, - { - "type": "ImportDeclaration", - "span": { - "start": 36, - "end": 60 - }, - "specifiers": [ - { - "type": "ImportDefaultSpecifier", - "span": { - "start": 43, - "end": 46 - }, - "local": { - "type": "Identifier", - "span": { - "start": 43, - "end": 46 - }, - "ctxt": 0, - "value": "foo", - "optional": false - } - } - ], - "source": { - "type": "StringLiteral", - "span": { - "start": 52, - "end": 59 - }, - "value": "./foo", - "raw": "\"./foo\"" - }, - "typeOnly": false, - "with": null, - "phase": "evaluation" - }, - { - "type": "ImportDeclaration", - "span": { - "start": 61, - "end": 96 - }, - "specifiers": [ - { - "type": "ImportDefaultSpecifier", - "span": { - "start": 68, - "end": 74 - }, - "local": { - "type": "Identifier", - "span": { - "start": 68, - "end": 74 - }, - "ctxt": 0, - "value": "repeat", - "optional": false - } - } - ], - "source": { - "type": "StringLiteral", - "span": { - "start": 80, - "end": 95 - }, - "value": "repeat-string", - "raw": "\"repeat-string\"" - }, - "typeOnly": false, - "with": null, - "phase": "evaluation" - }, - { - "type": "VariableDeclaration", - "span": { - "start": 98, - "end": 126 - }, - "ctxt": 0, - "kind": "const", - "declare": false, - "declarations": [ - { - "type": "VariableDeclarator", - "span": { - "start": 104, - "end": 125 - }, - "id": { - "type": "Identifier", - "span": { - "start": 104, - "end": 110 - }, - "ctxt": 0, - "value": "button", - "optional": false, - "typeAnnotation": null - }, - "init": { - "type": "NewExpression", - "span": { - "start": 113, - "end": 125 - }, - "ctxt": 0, - "callee": { - "type": "Identifier", - "span": { - "start": 117, - "end": 123 - }, - "ctxt": 0, - "value": "Button", - "optional": false - }, - "arguments": [], - "typeArguments": null - }, - "definite": false - } - ] - }, - { - "type": "ExpressionStatement", - "span": { - "start": 128, - "end": 144 - }, - "expression": { - "type": "CallExpression", - "span": { - "start": 128, - "end": 143 - }, - "ctxt": 0, - "callee": { - "type": "MemberExpression", - "span": { - "start": 128, - "end": 141 - }, - "object": { - "type": "Identifier", - "span": { - "start": 128, - "end": 134 - }, - "ctxt": 0, - "value": "button", - "optional": false - }, - "property": { - "type": "Identifier", - "span": { - "start": 135, - "end": 141 - }, - "value": "render" - } - }, - "arguments": [], - "typeArguments": null - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 145, - "end": 162 - }, - "expression": { - "type": "CallExpression", - "span": { - "start": 145, - "end": 161 - }, - "ctxt": 0, - "callee": { - "type": "Identifier", - "span": { - "start": 145, - "end": 151 - }, - "ctxt": 0, - "value": "repeat", - "optional": false - }, - "arguments": [ - { - "spread": null, - "expression": { - "type": "StringLiteral", - "span": { - "start": 152, - "end": 157 - }, - "value": "foo", - "raw": "\"foo\"" - } - }, - { - "spread": null, - "expression": { - "type": "NumericLiteral", - "span": { - "start": 159, - "end": 160 - }, - "value": 5.0, - "raw": "5" - } - } - ], - "typeArguments": null - } - }, - { - "type": "ExpressionStatement", - "span": { - "start": 163, - "end": 169 - }, - "expression": { - "type": "CallExpression", - "span": { - "start": 163, - "end": 168 - }, - "ctxt": 0, - "callee": { - "type": "Identifier", - "span": { - "start": 163, - "end": 166 - }, - "ctxt": 0, - "value": "foo", - "optional": false - }, - "arguments": [], - "typeArguments": null - } - } - ], - "interpreter": null - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap deleted file mode 100644 index d4762d093daf4..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0).snap +++ /dev/null @@ -1,29 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "main.ts", - "dependencies": { - "files": { - "items": [ - { - "path": "bar.js" - }, - { - "path": "button.tsx" - }, - { - "path": "foo.js" - }, - { - "path": "node_modules/repeat-string/index.js" - } - ] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap deleted file mode 100644 index d555c7a390292..0000000000000 --- a/crates/turborepo/tests/snapshots/query__query_turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0).snap +++ /dev/null @@ -1,26 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "main.ts", - "dependencies": { - "files": { - "items": [ - { - "path": "button.tsx" - }, - { - "path": "foo.js" - }, - { - "path": "node_modules/repeat-string/index.js" - } - ] - } - } - } - } -} diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`button.tsx`_with_dependencies_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`circular.ts`_with_dependencies_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`invalid.ts`_with_dependencies_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_ast_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_dependencies_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap deleted file mode 100644 index cd71b526b9bce..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`main.ts`_with_depth_=_0_(npm@10.5.0)_err.snap +++ /dev/null @@ -1,8 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: stderr ---- - WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.0. -turbo 2.2.4-canary.0 - - WARNING query command is experimental and may change in the future diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap deleted file mode 100644 index 4e6e7ed0e3329..0000000000000 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index`_with_dependents_(npm@10.5.0).snap +++ /dev/null @@ -1,26 +0,0 @@ ---- -source: crates/turborepo/tests/query.rs -expression: query_output ---- -{ - "data": { - "file": { - "path": "packages/utils/index.ts", - "dependents": { - "files": { - "items": [ - { - "path": "apps/my-app/index.ts" - }, - { - "path": "packages/another/index.js" - } - ] - }, - "errors": { - "items": [] - } - } - } - } -} diff --git a/examples/with-nestjs/apps/web/test/__snapshots__/page.spec.tsx.snap b/examples/with-nestjs/apps/web/test/__snapshots__/page.spec.tsx.snap deleted file mode 100644 index 0a564fcf428b6..0000000000000 --- a/examples/with-nestjs/apps/web/test/__snapshots__/page.spec.tsx.snap +++ /dev/null @@ -1,160 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Root page should match the snapshot 1`] = ` -
-
-
-

- examples/ - - with-nestjs - -

- -
- -
-
-
-
- -
-
- -
- -
- -
- - - Turborepo logo - - - - - - - - - - - -
-
-
- -
-
-`; diff --git a/turborepo-tests/integration/tests/no-args.t b/turborepo-tests/integration/tests/no-args.t index 72848871ce25c..7236297d88e32 100644 --- a/turborepo-tests/integration/tests/no-args.t +++ b/turborepo-tests/integration/tests/no-args.t @@ -65,14 +65,22 @@ Make sure exit code is 2 when no args are passed Print help (see more with '--help') Run Arguments: + --cache + Set the cache behavior for this run. Pass a list of comma-separated key, value pairs to enable reading and writing to either the local or remote cache + --force [] + Ignore the existing cache (to force execution). Equivalent to `--cache=local:w,remote:w` [possible values: true, false] + --remote-only [] + Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache. Equivalent to `--cache=remote:rw` [possible values: true, false] + --remote-cache-read-only [] + Treat remote cache as read only. Equivalent to `--cache=remote:r;local:rw` [possible values: true, false] + --no-cache + Avoid saving task results to the cache. Useful for development/watch tasks. Equivalent to `--cache=local:r,remote:r` --cache-workers Set the number of concurrent cache operations (default 10) [default: 10] --dry-run [] [possible values: text, json] --graph [] Generate a graph of the task execution and output to a file when a filename is specified (.svg, .png, .jpg, .pdf, .json, .html, .mermaid, .dot). Outputs dot graph to stdout when if no filename is provided - --no-cache - Avoid saving task results to the cache. Useful for development/watch tasks --daemon Force turbo to use the local daemon. If unset turbo will use the default detection logic --no-daemon @@ -81,8 +89,6 @@ Make sure exit code is 2 when no args are passed File to write turbo's performance profile output into. You can load the file up in chrome://tracing to see which parts of your build were slow --anon-profile File to write turbo's performance profile output into. All identifying data omitted from the profile - --remote-cache-read-only [] - Treat remote cache as read only [possible values: true, false] --summarize [] Generate a summary of the turbo run [possible values: true, false] --parallel @@ -95,8 +101,6 @@ Make sure exit code is 2 when no args are passed Continue execution even if a task exits with an error or non-zero exit code. The default behavior is to bail --single-package Run turbo in single-package mode - --force [] - Ignore the existing cache (to force execution) [possible values: true, false] --framework-inference [] Specify whether or not to do framework inference for tasks [default: true] [possible values: true, false] --global-deps @@ -113,8 +117,6 @@ Make sure exit code is 2 when no args are passed Set type of task output order. Use "stream" to show output as soon as it is available. Use "grouped" to show output when a command has finished execution. Use "auto" to let turbo decide based on its own heuristics. (default auto) [possible values: auto, stream, grouped] --only Only executes the tasks specified, does not execute parent tasks - --remote-only [] - Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache [possible values: true, false] --log-prefix Use "none" to remove prefixes from task logs. Use "task" to get task id prefixing. Use "auto" to let turbo decide how to prefix the logs based on the execution environment. In most cases this will be the same as "task". Note that tasks running in parallel interleave their logs, so removing prefixes can make it difficult to associate logs with tasks. Use --log-order=grouped to prevent interleaving. (default auto) [default: auto] [possible values: auto, none, task] [1] diff --git a/turborepo-tests/integration/tests/turbo-help.t b/turborepo-tests/integration/tests/turbo-help.t index 0fd66d1c3d7be..78f2ce5208156 100644 --- a/turborepo-tests/integration/tests/turbo-help.t +++ b/turborepo-tests/integration/tests/turbo-help.t @@ -65,14 +65,22 @@ Test help flag Print help (see more with '--help') Run Arguments: + --cache + Set the cache behavior for this run. Pass a list of comma-separated key, value pairs to enable reading and writing to either the local or remote cache + --force [] + Ignore the existing cache (to force execution). Equivalent to `--cache=local:w,remote:w` [possible values: true, false] + --remote-only [] + Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache. Equivalent to `--cache=remote:rw` [possible values: true, false] + --remote-cache-read-only [] + Treat remote cache as read only. Equivalent to `--cache=remote:r;local:rw` [possible values: true, false] + --no-cache + Avoid saving task results to the cache. Useful for development/watch tasks. Equivalent to `--cache=local:r,remote:r` --cache-workers Set the number of concurrent cache operations (default 10) [default: 10] --dry-run [] [possible values: text, json] --graph [] Generate a graph of the task execution and output to a file when a filename is specified (.svg, .png, .jpg, .pdf, .json, .html, .mermaid, .dot). Outputs dot graph to stdout when if no filename is provided - --no-cache - Avoid saving task results to the cache. Useful for development/watch tasks --daemon Force turbo to use the local daemon. If unset turbo will use the default detection logic --no-daemon @@ -81,8 +89,6 @@ Test help flag File to write turbo's performance profile output into. You can load the file up in chrome://tracing to see which parts of your build were slow --anon-profile File to write turbo's performance profile output into. All identifying data omitted from the profile - --remote-cache-read-only [] - Treat remote cache as read only [possible values: true, false] --summarize [] Generate a summary of the turbo run [possible values: true, false] --parallel @@ -95,8 +101,6 @@ Test help flag Continue execution even if a task exits with an error or non-zero exit code. The default behavior is to bail --single-package Run turbo in single-package mode - --force [] - Ignore the existing cache (to force execution) [possible values: true, false] --framework-inference [] Specify whether or not to do framework inference for tasks [default: true] [possible values: true, false] --global-deps @@ -113,8 +117,6 @@ Test help flag Set type of task output order. Use "stream" to show output as soon as it is available. Use "grouped" to show output when a command has finished execution. Use "auto" to let turbo decide based on its own heuristics. (default auto) [possible values: auto, stream, grouped] --only Only executes the tasks specified, does not execute parent tasks - --remote-only [] - Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache [possible values: true, false] --log-prefix Use "none" to remove prefixes from task logs. Use "task" to get task id prefixing. Use "auto" to let turbo decide how to prefix the logs based on the execution environment. In most cases this will be the same as "task". Note that tasks running in parallel interleave their logs, so removing prefixes can make it difficult to associate logs with tasks. Use --log-order=grouped to prevent interleaving. (default auto) [default: auto] [possible values: auto, none, task] @@ -211,6 +213,27 @@ Test help flag Print help (see a summary with '-h') Run Arguments: + --cache + Set the cache behavior for this run. Pass a list of comma-separated key, value pairs to enable reading and writing to either the local or remote cache + + --force [] + Ignore the existing cache (to force execution). Equivalent to `--cache=local:w,remote:w` + + [possible values: true, false] + + --remote-only [] + Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache. Equivalent to `--cache=remote:rw` + + [possible values: true, false] + + --remote-cache-read-only [] + Treat remote cache as read only. Equivalent to `--cache=remote:r;local:rw` + + [possible values: true, false] + + --no-cache + Avoid saving task results to the cache. Useful for development/watch tasks. Equivalent to `--cache=local:r,remote:r` + --cache-workers Set the number of concurrent cache operations (default 10) @@ -222,9 +245,6 @@ Test help flag --graph [] Generate a graph of the task execution and output to a file when a filename is specified (.svg, .png, .jpg, .pdf, .json, .html, .mermaid, .dot). Outputs dot graph to stdout when if no filename is provided - --no-cache - Avoid saving task results to the cache. Useful for development/watch tasks - --daemon Force turbo to use the local daemon. If unset turbo will use the default detection logic @@ -237,11 +257,6 @@ Test help flag --anon-profile File to write turbo's performance profile output into. All identifying data omitted from the profile - --remote-cache-read-only [] - Treat remote cache as read only - - [possible values: true, false] - --summarize [] Generate a summary of the turbo run @@ -262,11 +277,6 @@ Test help flag --single-package Run turbo in single-package mode - --force [] - Ignore the existing cache (to force execution) - - [possible values: true, false] - --framework-inference [] Specify whether or not to do framework inference for tasks @@ -300,11 +310,6 @@ Test help flag --only Only executes the tasks specified, does not execute parent tasks - --remote-only [] - Ignore the local filesystem cache for all tasks. Only allow reading and caching artifacts using the remote cache - - [possible values: true, false] - --log-prefix Use "none" to remove prefixes from task logs. Use "task" to get task id prefixing. Use "auto" to let turbo decide how to prefix the logs based on the execution environment. In most cases this will be the same as "task". Note that tasks running in parallel interleave their logs, so removing prefixes can make it difficult to associate logs with tasks. Use --log-order=grouped to prevent interleaving. (default auto) From 9c0236563211b2c79acf64cd65ff2788def77dec Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 15:17:04 -0700 Subject: [PATCH 149/218] docs: Updates for accuracy in Add to Existing Repository page. (#9379) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description There were a few parts to the copy on this page that needed some touching up, according to user feedback. ### Testing Instructions 👀 --- .../add-to-existing-repository.mdx | 25 +++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/getting-started/add-to-existing-repository.mdx b/docs/repo-docs/getting-started/add-to-existing-repository.mdx index a561e9c5c9879..f240aa936ece0 100644 --- a/docs/repo-docs/getting-started/add-to-existing-repository.mdx +++ b/docs/repo-docs/getting-started/add-to-existing-repository.mdx @@ -179,13 +179,34 @@ Add `.turbo` to your `.gitignore` file. The `turbo` CLI uses these folders for p -### Run the `build` and `check-types` tasks with `turbo` +### Add a `packageManager` field to root `package.json` + +Turborepo optimizes your repository using information from your package manager. To declare which package manager you're using, add a [`packageManager`](https://nodejs.org/api/packages.html#packagemanager) field to your root `package.json` if you don't have one already. + +```diff title="package.json" +{ ++ "packageManager": "npm@8.5.0" +} +``` + + + Depending on your repository, you may need to use the + [dangerouslyDisablePackageManagerCheck](`/repo/docs/reference/configuration#dangerouslydisablepackagemanagercheck`) + while migrating or in situations where you can't use the `packageManager` key + yet. + + + + +### Run tasks with `turbo` + +You can now run the tasks you added to `turbo.json` earlier using Turborepo. Using the example tasks from above: ```bash title="Terminal" turbo build check-types ``` -This runs `build` and `check-types` at the same time. +This runs the `build` and `check-types` tasks at the same time. The dependency graph of your [Workspace](/repo/docs/crafting-your-repository/structuring-a-repository#anatomy-of-a-workspace) will be used to run tasks in the right order. From d372d67f84c50f0a2747cda87b1a0b6a34ac2a9f Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 15:19:10 -0700 Subject: [PATCH 150/218] docs: Link to Root Tasks from Biome page so folks know what `//#` means. (#9377) ### Description A user mentioned that `//#` felt somewhat random on the Biome page, so a link will help with discovery! --- docs/repo-docs/guides/tools/biome.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/tools/biome.mdx b/docs/repo-docs/guides/tools/biome.mdx index df40205cb8474..e4c0d3e482c19 100644 --- a/docs/repo-docs/guides/tools/biome.mdx +++ b/docs/repo-docs/guides/tools/biome.mdx @@ -45,7 +45,7 @@ In practice, Biome is unlikely to be a bottleneck in the iteration speed of your best for your use case.
-To create a Root Task, register the scripts to Turborepo: +To create a [Root Task](/repo/docs/crafting-your-repository/configuring-tasks#registering-root-tasks), register the scripts to Turborepo: ```json title="./turbo.json" { From 1b1e46c7ca64d055d4d0eeb6a8e25c6e6c88bada Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 15:22:34 -0700 Subject: [PATCH 151/218] docs: Update Storybook page to mention absolute importing. (#9376) ### Description A user had trouble while trying to co-locate their stories like our guide describes. This PR gives that a deserving mention. --- docs/repo-docs/guides/tools/storybook.mdx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/repo-docs/guides/tools/storybook.mdx b/docs/repo-docs/guides/tools/storybook.mdx index 4115e6b1473c7..b403880a26d3f 100644 --- a/docs/repo-docs/guides/tools/storybook.mdx +++ b/docs/repo-docs/guides/tools/storybook.mdx @@ -280,6 +280,12 @@ Update components imports so that they reference the now co-located modules. For + import { Button } from "./button"; ``` + + You may also need to update [absolute + imports](/repo/docs/guides/tools/typescript#use-nodejs-subpath-imports-instead-of-typescript-compiler-paths) + according to your changes and usage. + + You'll also need to install any Storybook packages required for writing stories. For example, moving the story from above would require that you install `@storybook/react` into your `@repo/ui` package. From 3d7509284256f2f12233716dede9a964a03c7c28 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 5 Nov 2024 18:07:37 -0700 Subject: [PATCH 152/218] docs: Just re-ordering the sidebar. (#9392) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description This sidebar section is meant to convey the order in which you'd build a Turborepo. Maybe just me, but I feel like Upgrading should always be last. ### Testing Instructions 👀 --- docs/repo-docs/crafting-your-repository/meta.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/meta.json b/docs/repo-docs/crafting-your-repository/meta.json index b6c39902c0b6e..300420f191a6f 100644 --- a/docs/repo-docs/crafting-your-repository/meta.json +++ b/docs/repo-docs/crafting-your-repository/meta.json @@ -10,7 +10,7 @@ "developing-applications", "using-environment-variables", "constructing-ci", - "upgrading", - "understanding-your-repository" + "understanding-your-repository", + "upgrading" ] } From 9775737c1ba9552267d38419ca4600803ae89d05 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Wed, 6 Nov 2024 08:12:18 -0700 Subject: [PATCH 153/218] docs: Move docker command up for clarity. (#9390) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Description Unburying the command for easier finding! ### Testing Instructions 👀 --- docs/repo-docs/guides/tools/docker.mdx | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/repo-docs/guides/tools/docker.mdx b/docs/repo-docs/guides/tools/docker.mdx index 6571a48df9cb1..68c4ea3b3d327 100644 --- a/docs/repo-docs/guides/tools/docker.mdx +++ b/docs/repo-docs/guides/tools/docker.mdx @@ -126,6 +126,12 @@ Splitting up **dependencies** and **source files** in this way lets us **only ru Our detailed [`with-docker` example](https://github.com/vercel/turborepo/tree/main/examples/with-docker) goes into depth on how to use `prune` to its full potential. Here's the Dockerfile, copied over for convenience. +Build the Dockerfile from the root of your monorepo: + +```bash title="Terminal" +docker build -f apps/web/Dockerfile . +``` + This Dockerfile is written for a [Next.js](https://nextjs.org/) app that is using the `standalone` [output From 180f547b671ef1ebb07d937f0618ff240fbca646 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 6 Nov 2024 13:28:48 -0500 Subject: [PATCH 154/218] feat(mfe): add env var indicating mfe proxy (#9395) ### Description MFE development tasks may want to know if there's a corresponding proxy that is being run. Just checking if the proxy is running is error prone since they're both persistent tasks and there's no consistent way to prevent the check from running before the proxy server is listening on the port. We avoid needing to perform this check by setting an environment variable for each development task if there's an associated proxy task in the configuration. It is then up to the underlying task to alter it's behavior depending on the presence of this variable. ### Testing Instructions In a project with a MFE, run a development task and verify that `TURBO_TASK_HAS_MFE_PROXY` is set to `true` --- crates/turborepo-lib/src/micro_frontends.rs | 6 ++++++ .../turborepo-lib/src/task_graph/visitor/command.rs | 12 ++++++++++++ crates/turborepo-lib/src/task_graph/visitor/exec.rs | 1 + 3 files changed, 19 insertions(+) diff --git a/crates/turborepo-lib/src/micro_frontends.rs b/crates/turborepo-lib/src/micro_frontends.rs index 341e0b4e30ceb..8d5891e9725e6 100644 --- a/crates/turborepo-lib/src/micro_frontends.rs +++ b/crates/turborepo-lib/src/micro_frontends.rs @@ -49,4 +49,10 @@ impl MicroFrontendsConfigs { pub fn get(&self, package_name: &str) -> Option<&HashSet>> { self.configs.get(package_name) } + + pub fn task_has_mfe_proxy(&self, task_id: &TaskId) -> bool { + self.configs + .values() + .any(|dev_tasks| dev_tasks.contains(task_id)) + } } diff --git a/crates/turborepo-lib/src/task_graph/visitor/command.rs b/crates/turborepo-lib/src/task_graph/visitor/command.rs index b211d57c60e92..17b2b315dff46 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/command.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/command.rs @@ -61,6 +61,7 @@ pub struct PackageGraphCommandProvider<'a> { package_graph: &'a PackageGraph, package_manager_binary: Result, task_args: TaskArgs<'a>, + mfe_configs: Option<&'a MicroFrontendsConfigs>, } impl<'a> PackageGraphCommandProvider<'a> { @@ -68,6 +69,7 @@ impl<'a> PackageGraphCommandProvider<'a> { repo_root: &'a AbsoluteSystemPath, package_graph: &'a PackageGraph, task_args: TaskArgs<'a>, + mfe_configs: Option<&'a MicroFrontendsConfigs>, ) -> Self { let package_manager_binary = which::which(package_graph.package_manager().command()); Self { @@ -75,6 +77,7 @@ impl<'a> PackageGraphCommandProvider<'a> { package_graph, package_manager_binary, task_args, + mfe_configs, } } @@ -126,6 +129,15 @@ impl<'a> CommandProvider for PackageGraphCommandProvider<'a> { cmd.env_clear(); cmd.envs(environment.iter()); + // If the task has an associated proxy, then we indicate this to the underlying + // task via an env var + if self + .mfe_configs + .map_or(false, |mfe_configs| mfe_configs.task_has_mfe_proxy(task_id)) + { + cmd.env("TURBO_TASK_HAS_MFE_PROXY", "true"); + } + // We always open stdin and the visitor will close it depending on task // configuration cmd.open_stdin(); diff --git a/crates/turborepo-lib/src/task_graph/visitor/exec.rs b/crates/turborepo-lib/src/task_graph/visitor/exec.rs index d41a34043dadf..0ba1c2a38d2d0 100644 --- a/crates/turborepo-lib/src/task_graph/visitor/exec.rs +++ b/crates/turborepo-lib/src/task_graph/visitor/exec.rs @@ -50,6 +50,7 @@ impl<'a> ExecContextFactory<'a> { visitor.repo_root, &visitor.package_graph, visitor.run_opts.task_args(), + visitor.micro_frontends_configs, ); let mut command_factory = CommandFactory::new(); if let Some(micro_frontends_configs) = visitor.micro_frontends_configs { From 54efd400722e8f3c41c9cdc34d63867f5469268c Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Wed, 6 Nov 2024 13:39:32 -0500 Subject: [PATCH 155/218] chore(daemon): lazy load package changes watcher (#9396) ### Description Before we'd initialize the package changes watcher when the daemon starts up. Now we do it only when watch mode needs it. ### Testing Instructions Tested manually: ``` cargo run -p turbo -- --cwd ../my-turborepo --skip-infer daemon restart ``` In different terminal: ``` cargo run -p turbo -- --cwd ../my-turborepo --skip-infer daemon logs ``` Change a file in the repository, note that no logs are emitted for this change. Then run ``` turbo watch dev ``` Note that package changes start showing up. --- crates/turborepo-lib/src/daemon/server.rs | 29 +++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/crates/turborepo-lib/src/daemon/server.rs b/crates/turborepo-lib/src/daemon/server.rs index 675865d877ad3..5d8465d49eed0 100644 --- a/crates/turborepo-lib/src/daemon/server.rs +++ b/crates/turborepo-lib/src/daemon/server.rs @@ -7,7 +7,7 @@ use std::{ collections::{HashMap, HashSet}, sync::{ atomic::{AtomicBool, Ordering}, - Arc, Mutex, + Arc, Mutex, OnceLock, }, time::{Duration, Instant}, }; @@ -61,10 +61,11 @@ pub enum CloseReason { /// a general API and close this up. #[derive(Clone)] pub struct FileWatching { + repo_root: AbsoluteSystemPathBuf, watcher: Arc, pub glob_watcher: Arc, pub package_watcher: Arc, - pub package_changes_watcher: Arc, + pub package_changes_watcher: OnceLock>, pub hash_watcher: Arc, } @@ -136,20 +137,28 @@ impl FileWatching { scm, )); - let package_changes_watcher = Arc::new(PackageChangesWatcher::new( - repo_root, - recv.clone(), - hash_watcher.clone(), - )); - Ok(FileWatching { + repo_root, watcher, glob_watcher, package_watcher, - package_changes_watcher, + package_changes_watcher: OnceLock::new(), hash_watcher, }) } + + pub fn get_or_init_package_changes_watcher(&self) -> Arc { + self.package_changes_watcher + .get_or_init(|| { + let recv = self.watcher.watch(); + Arc::new(PackageChangesWatcher::new( + self.repo_root.clone(), + recv, + self.hash_watcher.clone(), + )) + }) + .clone() + } } /// Timeout for every RPC the server handles @@ -591,7 +600,7 @@ impl proto::turbod_server::Turbod for TurboGrpcServiceInner { ) -> Result, tonic::Status> { let mut package_changes_rx = self .file_watching - .package_changes_watcher + .get_or_init_package_changes_watcher() .package_changes() .await; From 98ce38f02427161cca22b25d06969b2ac24c2a22 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 14:34:23 -0500 Subject: [PATCH 156/218] release(turborepo): 2.2.4-canary.8 (#9397) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 6284cec637595..e095e39e332a4 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 0ed4c379cea78..aaee7971e48bd 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index fb18d2101ccd6..a5929f4590ab7 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 0613a89d65ab7..a482aebae1c43 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 87a7b3a60a830..3ccefedad450f 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 166b21cf80929..456adf5aec1b0 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index e5d81ecb7dc57..5131df3d64238 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 5bc1b17bc5624..0e7effdd81d48 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index cca2ee5626d3d..2a2bef6e79499 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.7", + "version": "2.2.4-canary.8", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.7", - "turbo-darwin-arm64": "2.2.4-canary.7", - "turbo-linux-64": "2.2.4-canary.7", - "turbo-linux-arm64": "2.2.4-canary.7", - "turbo-windows-64": "2.2.4-canary.7", - "turbo-windows-arm64": "2.2.4-canary.7" + "turbo-darwin-64": "2.2.4-canary.8", + "turbo-darwin-arm64": "2.2.4-canary.8", + "turbo-linux-64": "2.2.4-canary.8", + "turbo-linux-arm64": "2.2.4-canary.8", + "turbo-windows-64": "2.2.4-canary.8", + "turbo-windows-arm64": "2.2.4-canary.8" } } diff --git a/version.txt b/version.txt index c1cc433c75e58..2aaacddff7d26 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.7 +2.2.4-canary.8 canary From c6e651ac154440b9077b35f933d5270318e5518c Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Wed, 6 Nov 2024 13:09:22 -0700 Subject: [PATCH 157/218] docs: Add eslint-config-turbo bump to uprade guide. (#9391) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description We were missing the guidance to make sure that ESLint got upgraded. This fixes it! ### Testing Instructions 👀 --- docs/repo-docs/crafting-your-repository/upgrading.mdx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/repo-docs/crafting-your-repository/upgrading.mdx b/docs/repo-docs/crafting-your-repository/upgrading.mdx index 98beed02b06aa..a4c43f9fc280f 100644 --- a/docs/repo-docs/crafting-your-repository/upgrading.mdx +++ b/docs/repo-docs/crafting-your-repository/upgrading.mdx @@ -95,6 +95,13 @@ Turborepo 2.0 requires that your Workspace define this field as a way to improve + + + +### Update `eslint-config-turbo` + +[`eslint-config-turbo`](/repo/docs/reference/eslint-config-turbo) helps identify environment variables that need to be added to the [`env`](/repo/docs/reference/configuration#env) key for caching. If you're using it, make sure you update it to match your major version. + From 5bbdc0e01c5b5da0d03b0231ef44581206afde1a Mon Sep 17 00:00:00 2001 From: Jonathan Svenheden Date: Thu, 7 Nov 2024 04:18:47 +0000 Subject: [PATCH 158/218] Update single-package-workspaces.mdx (#9187) ### Description Replace an `is` with an `isn't` Co-authored-by: Anthony Shew --- docs/repo-docs/guides/single-package-workspaces.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/single-package-workspaces.mdx b/docs/repo-docs/guides/single-package-workspaces.mdx index 333677df21ba9..0a0fa243dfbd5 100644 --- a/docs/repo-docs/guides/single-package-workspaces.mdx +++ b/docs/repo-docs/guides/single-package-workspaces.mdx @@ -46,7 +46,7 @@ For even faster developer workflows, you can [install `turbo` globally](/repo/do Once installed, you can run `turbo build` and Turborepo will run your `build` script from `package.json`. Running `turbo build` again will hit the cache. -At this point, `turbo` is providing much value since you're likely to only be rebuilding your application when code changes and, when your code changes, `turbo` will miss the cache. In two short steps, you can get more out of `turbo`. +At this point, `turbo` isn't providing much value since you're likely to only be rebuilding your application when code changes and, when your code changes, `turbo` will miss the cache. In two short steps, you can get more out of `turbo`. ## Running many scripts with one command From c03735dddc34fafb688f15264ee6f3e4691ff139 Mon Sep 17 00:00:00 2001 From: ATeals <125727432+ATeals@users.noreply.github.com> Date: Thu, 7 Nov 2024 13:25:05 +0900 Subject: [PATCH 159/218] Fix typo (#9341) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description I made a small modification to the document. I think the structure of the curly braces should be like this for better readability. 😁 Co-authored-by: Anthony Shew --- .../creating-an-internal-package.mdx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx index 07a46a3115d82..160f1e54aca72 100644 --- a/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx +++ b/docs/repo-docs/crafting-your-repository/creating-an-internal-package.mdx @@ -260,13 +260,13 @@ Add the artifacts for the new `@repo/math` library to the `outputs` for the `bui ```json title="./turbo.json" // [!code word:"dist/**"] { -"tasks": { - "build": { - "dependsOn": ["^build"], - "outputs": [".next/**", "!.next/cache/**", "dist/**"] + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": [".next/**", "!.next/cache/**", "dist/**"] + } } } -} ``` From 52f6f4623b796b82eb5c44fb327bf1775eaa09f7 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 7 Nov 2024 08:54:14 -0700 Subject: [PATCH 160/218] feat: `turbo info` command for debugging (#9368) ### Description A command to provide debugging information for reproductions or otherwise understand a machine better. Output will look something close to this. ``` CLI: Version: 2.2.4-canary.4 Location: /Users/anthonyshew/projects/open/turbo/target/debug/turbo Daemon status: Running Package manager: pnpm Platform: Architecture: aarch64 Operating system: macos Available memory (MB): 13598 Available CPU cores: 10 Environment: CI: None Terminal (TERM): xterm-256color Terminal program (TERM_PROGRAM): tmux Terminal program version (TERM_PROGRAM_VERSION): 3.4 Shell (SHELL): /bin/zsh stdin: false Turborepo System Environment Variables: TURBO_INVOCATION_DIR: /Users/anthonyshew/projects/open/turbo ``` ### Testing Instructions Try it out! --- crates/turborepo-lib/src/cli/mod.rs | 19 +++-- crates/turborepo-lib/src/commands/info.rs | 75 +++++++++++++++++++ crates/turborepo-lib/src/commands/mod.rs | 1 + turborepo-tests/integration/tests/no-args.t | 1 + .../integration/tests/turbo-help.t | 2 + 5 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 crates/turborepo-lib/src/commands/info.rs diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index a5e7cd9b2a337..0185d73f2adfa 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -22,8 +22,8 @@ use turborepo_ui::{ColorConfig, GREY}; use crate::{ cli::error::print_potential_tasks, commands::{ - bin, config, daemon, generate, link, login, logout, ls, prune, query, run, scan, telemetry, - unlink, CommandBase, + bin, config, daemon, generate, info, link, login, logout, ls, prune, query, run, scan, + telemetry, unlink, CommandBase, }, get_version, run::watch::WatchClient, @@ -474,9 +474,7 @@ impl Args { } } -/// Defines the subcommands for CLI. NOTE: If we change the commands in Go, -/// we must change these as well to avoid accidentally passing the -/// --single-package flag into non-build commands. +/// Defines the subcommands for CLI #[derive(Subcommand, Clone, Debug, PartialEq)] pub enum Command { /// Get the path to the Turbo binary @@ -569,6 +567,8 @@ pub enum Command { #[clap(long)] invalidate: bool, }, + /// Print debugging information + Info, /// Prepare a subset of your monorepo. Prune { #[clap(hide = true, long)] @@ -1223,6 +1223,15 @@ pub async fn run( generate::run(tag, command, &args, child_event)?; Ok(0) } + Command::Info => { + CommandEventBuilder::new("info") + .with_parent(&root_telemetry) + .track_call(); + let base = CommandBase::new(cli_args.clone(), repo_root, version, color_config); + + info::run(base).await; + Ok(0) + } Command::Telemetry { command } => { let event = CommandEventBuilder::new("telemetry").with_parent(&root_telemetry); event.track_call(); diff --git a/crates/turborepo-lib/src/commands/info.rs b/crates/turborepo-lib/src/commands/info.rs new file mode 100644 index 0000000000000..d0e7ccfd9c448 --- /dev/null +++ b/crates/turborepo-lib/src/commands/info.rs @@ -0,0 +1,75 @@ +use std::{env, io}; + +use sysinfo::{System, SystemExt}; +use thiserror::Error; +use turborepo_repository::{package_json::PackageJson, package_manager::PackageManager}; + +use super::CommandBase; +use crate::{DaemonConnector, DaemonConnectorError}; + +#[derive(Debug, Error)] +pub enum Error { + #[error("could not get path to turbo binary: {0}")] + NoCurrentExe(#[from] io::Error), +} + +pub async fn run(base: CommandBase) { + let system = System::new_all(); + let connector = DaemonConnector::new(false, false, &base.repo_root); + let daemon_status = match connector.connect().await { + Ok(_status) => "Running", + Err(DaemonConnectorError::NotRunning) => "Not running", + Err(_e) => "Error getting status", + }; + let package_manager = PackageJson::load(&base.repo_root.join_component("package.json")) + .ok() + .and_then(|package_json| { + PackageManager::read_or_detect_package_manager(&package_json, &base.repo_root).ok() + }) + .map_or_else(|| "Not found".to_owned(), |pm| pm.to_string()); + + println!("CLI:"); + println!(" Version: {}", base.version); + + let exe_path = std::env::current_exe().map_or_else( + |e| format!("Cannot determine current binary: {e}").to_owned(), + |path| path.to_string_lossy().into_owned(), + ); + + println!(" Path to executable: {}", exe_path); + println!(" Daemon status: {}", daemon_status); + println!(" Package manager: {}", package_manager); + println!(); + + println!("Platform:"); + println!(" Architecture: {}", std::env::consts::ARCH); + println!(" Operating system: {}", std::env::consts::OS); + println!( + " Available memory (MB): {}", + system.available_memory() / 1024 / 1024 + ); + println!(" Available CPU cores: {}", num_cpus::get()); + println!(); + + println!("Environment:"); + println!(" CI: {:#?}", turborepo_ci::Vendor::get_name()); + println!( + " Terminal (TERM): {}", + env::var("TERM").unwrap_or_else(|_| "unknown".to_owned()) + ); + + println!( + " Terminal program (TERM_PROGRAM): {}", + env::var("TERM_PROGRAM").unwrap_or_else(|_| "unknown".to_owned()) + ); + println!( + " Terminal program version (TERM_PROGRAM_VERSION): {}", + env::var("TERM_PROGRAM_VERSION").unwrap_or_else(|_| "unknown".to_owned()) + ); + println!( + " Shell (SHELL): {}", + env::var("SHELL").unwrap_or_else(|_| "unknown".to_owned()) + ); + println!(" stdin: {}", turborepo_ci::is_ci()); + println!(); +} diff --git a/crates/turborepo-lib/src/commands/mod.rs b/crates/turborepo-lib/src/commands/mod.rs index 439be0cd13ae4..d23574cb2f32d 100644 --- a/crates/turborepo-lib/src/commands/mod.rs +++ b/crates/turborepo-lib/src/commands/mod.rs @@ -15,6 +15,7 @@ pub(crate) mod bin; pub(crate) mod config; pub(crate) mod daemon; pub(crate) mod generate; +pub(crate) mod info; pub(crate) mod link; pub(crate) mod login; pub(crate) mod logout; diff --git a/turborepo-tests/integration/tests/no-args.t b/turborepo-tests/integration/tests/no-args.t index 7236297d88e32..e64f56b790bae 100644 --- a/turborepo-tests/integration/tests/no-args.t +++ b/turborepo-tests/integration/tests/no-args.t @@ -18,6 +18,7 @@ Make sure exit code is 2 when no args are passed link Link your local directory to a Vercel organization and enable remote caching login Login to your Vercel account logout Logout to your Vercel account + info Print debugging information prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL diff --git a/turborepo-tests/integration/tests/turbo-help.t b/turborepo-tests/integration/tests/turbo-help.t index 78f2ce5208156..b9c7d73bc70af 100644 --- a/turborepo-tests/integration/tests/turbo-help.t +++ b/turborepo-tests/integration/tests/turbo-help.t @@ -18,6 +18,7 @@ Test help flag link Link your local directory to a Vercel organization and enable remote caching login Login to your Vercel account logout Logout to your Vercel account + info Print debugging information prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL @@ -141,6 +142,7 @@ Test help flag link Link your local directory to a Vercel organization and enable remote caching login Login to your Vercel account logout Logout to your Vercel account + info Print debugging information prune Prepare a subset of your monorepo run Run tasks across projects in your monorepo query Query your monorepo using GraphQL. If no query is provided, spins up a GraphQL server with GraphiQL From 865cf6073863b1ce03a5bef2be5d393cac399b07 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 7 Nov 2024 14:39:00 -0500 Subject: [PATCH 161/218] chore(trace): fixes and improvements (#9398) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description - Added more conditions - Made emitting errors configurable - Add inference for multiple node_modules ### Testing Instructions --- crates/turbo-trace/src/tracer.rs | 49 +++++++++++++++----------- crates/turborepo-lib/src/query/file.rs | 5 ++- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 5057c22befd1e..86efde5dbb211 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -274,36 +274,40 @@ impl Tracer { root: &AbsoluteSystemPath, existing_resolver: &Resolver, ) -> Option { - let resolver = root + let tsconfig_dir = root .ancestors() .skip(1) - .find(|p| p.join_component("tsconfig.json").exists()) - .map(|ts_config_dir| { - let mut options = existing_resolver.options().clone(); + .find(|p| p.join_component("tsconfig.json").exists()); + + // Resolves the closest `node_modules` directory. This is to work with monorepos + // where both the package and the monorepo have a `node_modules` + // directory. + let node_modules_dir = root + .ancestors() + .skip(1) + .find(|p| p.join_component("node_modules").exists()); + + if tsconfig_dir.is_some() || node_modules_dir.is_some() { + let mut options = existing_resolver.options().clone(); + if let Some(tsconfig_dir) = tsconfig_dir { options.tsconfig = Some(TsconfigOptions { - config_file: ts_config_dir + config_file: tsconfig_dir .join_component("tsconfig.json") .as_std_path() .into(), references: TsconfigReferences::Auto, }); + } - existing_resolver.clone_with_options(options) - }); + if let Some(node_modules_dir) = node_modules_dir { + options = options + .with_module(node_modules_dir.join_component("node_modules").to_string()); + } - root.ancestors() - .skip(1) - .find(|p| p.join_component("node_modules").exists()) - .map(|node_modules_dir| { - let node_modules = node_modules_dir.join_component("node_modules"); - let resolver = resolver.as_ref().unwrap_or(existing_resolver); - let options = resolver - .options() - .clone() - .with_module(node_modules.to_string()); - - resolver.clone_with_options(options) - }) + Some(existing_resolver.clone_with_options(options)) + } else { + None + } } pub fn create_resolver(&mut self) -> Resolver { @@ -312,7 +316,10 @@ impl Tracer { .with_force_extension(EnforceExtension::Disabled) .with_extension(".ts") .with_extension(".tsx") - .with_condition_names(&["import", "require"]); + .with_module(self.cwd.join_component("node_modules").to_string()) + // Condition names are used to determine which export to use when importing a module. + // We add a bunch so oxc_resolver can resolve all kinds of imports. + .with_condition_names(&["import", "require", "node", "default"]); if let Some(ts_config) = self.ts_config.take() { options.tsconfig = Some(TsconfigOptions { diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index 200a2c9ffc2d7..d5f2f9f2c5884 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -197,6 +197,7 @@ impl File { depth: Option, ts_config: Option, import_type: Option, + emit_errors: Option, ) -> Result { let mut tracer = Tracer::new( self.run.repo_root().to_owned(), @@ -209,7 +210,9 @@ impl File { } let mut result = tracer.trace(depth).await; - result.emit_errors(); + if emit_errors.unwrap_or(true) { + result.emit_errors(); + } // Remove the file itself from the result result.files.remove(&self.path); TraceResult::new(result, self.run.clone()) From b65ff15e12f9179793346131d1e9ae2b8006a91f Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Thu, 7 Nov 2024 15:27:22 -0500 Subject: [PATCH 162/218] fix(watch): shut down persistent tasks when we exit watch mode (#9405) ### Description This was causing a nasty non-deterministic bug where sending a SIGINT would cause the turbo process to hang and not exit cleanly...sometimes. ### Testing Instructions Try running `turbo watch dev --skip-infer` on create-turbo and cancelling it with Ctrl-C --- crates/turborepo-lib/src/run/watch.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index 43b3675bdb8da..1059acca44eef 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -217,7 +217,13 @@ impl WatchClient { biased; _ = signal_subscriber.listen() => { tracing::info!("shutting down"); - + if let Some(RunHandle { stopper, run_task }) = self.persistent_tasks_handle.take() { + // Shut down the tasks for the run + stopper.stop().await; + // Run should exit shortly after we stop all child tasks, wait for it to finish + // to ensure all messages are flushed. + let _ = run_task.await; + } Err(Error::SignalInterrupt) } result = event_fut => { From e09449c2c36b4eab52fa45762b4451e2b4ab6a03 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 7 Nov 2024 16:42:52 -0500 Subject: [PATCH 163/218] fix(turbopath): avoid incorrect lifetime in RelativeUnixPath::new (#9400) ### Description I ended up hitting a panic using this function incorrectly, we can make it safer. **Explanation of Issue** Take the following code snippet: ``` let absolute = AbsoluteSystemPath::new("/").unwrap(); let foo = String::from("foo/bar/baz"); let bar = RelativeUnixPath::new(foo).unwrap(); let baz = absolute.join_unix_path(bar); // panics ``` It panics with the following error: ``` unsafe precondition(s) violated: ptr::copy_nonoverlapping requires that both pointer arguments are aligned and non-null and the specified memory ranges do not overlap ``` The issue is with the line `let bar = RelativeUnixPath::new(foo);` so lets take a look at the definition of `RelativeUnixPath::new`: ``` pub fn new<'a, P: AsRef + 'a>(value: P) -> Result<&'a Self, PathError> { let path = value.as_ref(); /* body omitted as it isn't relevant */ Ok(unsafe { &*(path as *const str as *const Self) }) } ``` Lets break down the signature, `new` is generic over a lifetime `'a` and a type `P` where `P` must implement `AsRef` *and* be valid for at least the lifetime of `'a`. `new` then returns a `Result<&'a Self>` aka a reference to a `RelativeUnixPath` valid for at least `'a`. It's important to clarify that `P: AsRef + 'a` means `P` is valid for `'a`, not the `&str` created by `as_ref()`. So if we pass a `String` object to `RelativeUnixPath::new` we end up with `new<'a>(value: String) -> Result<&'a Self>`, but what's the `'a`? There's not any lifetime that's part of `String`! If we look at the [Static section](https://doc.rust-lang.org/rust-by-example/scope/lifetime/static_lifetime.html#trait-bound) of Rust By Example it contains the following remark: > It's important to understand this means that any owned data always passes a 'static lifetime bound `String` is owned so it passes a bound such as `T: 'static` or in our case `P: AsRef + 'static`. This means that we can currently write a function like this: ``` fn foo(s: String) -> &'static RelativeUnixPath { RelativeUnixPath::new(s).unwrap() } ``` This is clearly incorrect, `foo` takes ownership of `s`, but somehow returns a `'static` reference even though `s` is consumed in the function and will be dropped at the end **Solution** The solution is that we make sure we make sure we take a type that's a reference! e.g. `fn new<'a, P: AsRef + ?Sized>(value: &'a P) -> Result<&'a Self>` this prevents us from passing an owned type into the constructor and smuggling in bad lifetimes to the codebase. (`?Sized` is just needed because `Sized` is an implicit trait bound in Rust and we're opting out of it. Since we're taking a reference, we don't need to know the size of the type see the [Excotically Sized Types](https://doc.rust-lang.org/nomicon/exotic-sizes.html#dynamically-sized-types-dsts) section of the Rustonomicon for more information) ### Testing Instructions The following will no longer compiles: ``` #[test] fn test_pass_in_string() { let absolute = AbsoluteSystemPath::new("/").unwrap(); let foo = String::from("foo/bar/baz"); let bar = RelativeUnixPath::new(foo).unwrap(); let baz = absolute.join_unix_path(bar); // panics } ``` --- crates/turborepo-paths/src/anchored_system_path.rs | 4 ++-- crates/turborepo-paths/src/relative_unix_path.rs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-paths/src/anchored_system_path.rs b/crates/turborepo-paths/src/anchored_system_path.rs index f0d6863963e44..4f9e379ce23bd 100644 --- a/crates/turborepo-paths/src/anchored_system_path.rs +++ b/crates/turborepo-paths/src/anchored_system_path.rs @@ -45,12 +45,12 @@ impl AsRef for AnchoredSystemPath { const EMPTY: &str = ""; impl AnchoredSystemPath { - pub(crate) unsafe fn new_unchecked<'a>(path: impl AsRef + 'a) -> &'a Self { + pub(crate) unsafe fn new_unchecked(path: &(impl AsRef + ?Sized)) -> &Self { let path = path.as_ref(); unsafe { &*(path as *const Path as *const Self) } } - pub fn new<'a>(path: impl AsRef + 'a) -> Result<&'a Self, PathError> { + pub fn new(path: &(impl AsRef + ?Sized)) -> Result<&Self, PathError> { let path_str = path.as_ref(); let path = Path::new(path_str); if path.is_absolute() { diff --git a/crates/turborepo-paths/src/relative_unix_path.rs b/crates/turborepo-paths/src/relative_unix_path.rs index 9cfd6027dffc7..abf2a29b35bee 100644 --- a/crates/turborepo-paths/src/relative_unix_path.rs +++ b/crates/turborepo-paths/src/relative_unix_path.rs @@ -18,7 +18,7 @@ impl Display for RelativeUnixPath { } impl RelativeUnixPath { - pub fn new<'a, P: AsRef + 'a>(value: P) -> Result<&'a Self, PathError> { + pub fn new + ?Sized>(value: &P) -> Result<&Self, PathError> { let path = value.as_ref(); if path.starts_with('/') { return Err(PathError::NotRelative(path.to_string())); From f04e2a8ecadf0d3aed4842ae1215fb87d9439053 Mon Sep 17 00:00:00 2001 From: Thomas Knickman Date: Thu, 7 Nov 2024 22:10:59 -0500 Subject: [PATCH 164/218] fix(examples): add private to with-shell-cmds (#9411) ### Description Fixes https://github.com/vercel/turborepo/issues/9150 yarn classic errors when using workspaces without setting private to true ### Testing Instructions --- examples/with-shell-commands/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/with-shell-commands/package.json b/examples/with-shell-commands/package.json index e6a7829937d06..41f1535919bd3 100644 --- a/examples/with-shell-commands/package.json +++ b/examples/with-shell-commands/package.json @@ -1,6 +1,7 @@ { "name": "my-turborepo", "description": "A barebones Turborepo example for working with Task Graphs.", + "private": true, "packageManager": "pnpm@8.15.6", "devDependencies": { "turbo": "^2.0.3" From 1a9214e2f04781f16abe15c1edaf918d276003f9 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Fri, 8 Nov 2024 08:42:18 -0500 Subject: [PATCH 165/218] fix(watch): ensure TUI is shutdown regardless of exit path (#9408) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description I noticed in https://github.com/vercel/turborepo/issues/9389 that the TUI wasn't exiting if `watch` exited from anything other than a `Ctrl-C` (including a direct SIGINT to the process). This PR ensures that we shut down the TUI and the persistent task handle regardless of how `watch.start()` exits. ### Testing Instructions - Start up a watch task `turbo_dev watch dev` - Find the pid file via `turbo_dev daemon status` - Kill the daemon `kill $(cat /path/to/pid/file)` Before Screenshot 2024-11-07 at 5 42 22 PM After Screenshot 2024-11-07 at 5 39 08 PM --- crates/turborepo-lib/src/cli/mod.rs | 5 ++++- crates/turborepo-lib/src/process/child.rs | 2 +- crates/turborepo-lib/src/run/watch.rs | 21 ++++++++++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 0185d73f2adfa..77ae10e6b458d 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -1391,7 +1391,10 @@ pub async fn run( let base = CommandBase::new(cli_args, repo_root, version, color_config); let mut client = WatchClient::new(base, event).await?; - client.start().await?; + if let Err(e) = client.start().await { + client.shutdown().await; + return Err(e.into()); + } // We only exit if we get a signal, so we return a non-zero exit code return Ok(1); } diff --git a/crates/turborepo-lib/src/process/child.rs b/crates/turborepo-lib/src/process/child.rs index a5a4d3c6281e3..d610852205934 100644 --- a/crates/turborepo-lib/src/process/child.rs +++ b/crates/turborepo-lib/src/process/child.rs @@ -464,7 +464,7 @@ impl Child { // On Windows it is important that this gets dropped once the child process // exits let controller = controller; - debug!("waiting for task"); + debug!("waiting for task: {pid:?}"); let manager = ChildStateManager { shutdown_style, task_state, diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index 1059acca44eef..dab2c561c82bd 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -217,13 +217,6 @@ impl WatchClient { biased; _ = signal_subscriber.listen() => { tracing::info!("shutting down"); - if let Some(RunHandle { stopper, run_task }) = self.persistent_tasks_handle.take() { - // Shut down the tasks for the run - stopper.stop().await; - // Run should exit shortly after we stop all child tasks, wait for it to finish - // to ensure all messages are flushed. - let _ = run_task.await; - } Err(Error::SignalInterrupt) } result = event_fut => { @@ -267,6 +260,20 @@ impl WatchClient { Ok(()) } + /// Shut down any resources that run as part of watch. + pub async fn shutdown(&mut self) { + if let Some(sender) = &self.ui_sender { + sender.stop().await; + } + if let Some(RunHandle { stopper, run_task }) = self.persistent_tasks_handle.take() { + // Shut down the tasks for the run + stopper.stop().await; + // Run should exit shortly after we stop all child tasks, wait for it to finish + // to ensure all messages are flushed. + let _ = run_task.await; + } + } + /// Executes a run with the given changed packages. Splits the run into two /// parts: /// 1. The persistent tasks that are not allowed to be interrupted From cdc7ec981a12492f4072eb3dc9012cd5941bd32c Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Fri, 8 Nov 2024 09:11:28 -0500 Subject: [PATCH 166/218] chore(engine): error about missing package in package task (#9414) ### Description With package tasks being accepted by `run` users can now bypass our package existence check in `--filter`. We add an additional check in the task graph builder where we verify that the `bad-package` in a `turbo run bad-package#task` command will error with a message explaining that `bad-package` doesn't exist. ### Testing Instructions Added unit test that hits this error path along with snapshotting the error message --- crates/turborepo-lib/src/engine/builder.rs | 75 ++++++++++++++++--- ...est__run_package_task_invalid_package.snap | 9 +++ 2 files changed, 74 insertions(+), 10 deletions(-) create mode 100644 crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_invalid_package.snap diff --git a/crates/turborepo-lib/src/engine/builder.rs b/crates/turborepo-lib/src/engine/builder.rs index 7dfe7b987c16c..fc0e5198f8d55 100644 --- a/crates/turborepo-lib/src/engine/builder.rs +++ b/crates/turborepo-lib/src/engine/builder.rs @@ -19,13 +19,17 @@ use crate::{ }; #[derive(Debug, thiserror::Error, Diagnostic)] -#[error("could not find task `{name}` in project")] -pub struct MissingTaskError { - name: String, - #[label] - span: Option, - #[source_code] - text: NamedSource, +pub enum MissingTaskError { + #[error("could not find task `{name}` in project")] + MissingTaskDefinition { + name: String, + #[label] + span: Option, + #[source_code] + text: NamedSource, + }, + #[error("could not find package `{name}` in project")] + MissingPackage { name: String }, } #[derive(Debug, thiserror::Error, Diagnostic)] @@ -253,6 +257,17 @@ impl<'a> EngineBuilder<'a> { } if !missing_tasks.is_empty() { + let missing_pkgs: HashMap<_, _> = missing_tasks + .iter() + .filter_map(|(task, _)| { + let pkg = task.package()?; + let missing_pkg = self + .package_graph + .package_info(&PackageName::from(pkg)) + .is_none(); + missing_pkg.then(|| (task.to_string(), pkg.to_string())) + }) + .collect(); let mut missing_tasks = missing_tasks .into_iter() .map(|(task_name, span)| (task_name.to_string(), span)) @@ -262,8 +277,12 @@ impl<'a> EngineBuilder<'a> { let errors = missing_tasks .into_iter() .map(|(name, span)| { - let (span, text) = span.span_and_text("turbo.json"); - MissingTaskError { name, span, text } + if let Some(pkg) = missing_pkgs.get(&name) { + MissingTaskError::MissingPackage { name: pkg.clone() } + } else { + let (span, text) = span.span_and_text("turbo.json"); + MissingTaskError::MissingTaskDefinition { name, span, text } + } }) .collect(); @@ -561,7 +580,7 @@ fn validate_task_name(task: Spanned<&str>) -> Result<(), Error> { mod test { use std::assert_matches::assert_matches; - use insta::assert_json_snapshot; + use insta::{assert_json_snapshot, assert_snapshot}; use pretty_assertions::assert_eq; use serde_json::json; use tempfile::TempDir; @@ -1372,4 +1391,40 @@ mod test { .unwrap(); assert_json_snapshot!(msg); } + + #[test] + fn test_run_package_task_invalid_package() { + let repo_root_dir = TempDir::with_prefix("repo").unwrap(); + let repo_root = AbsoluteSystemPathBuf::new(repo_root_dir.path().to_str().unwrap()).unwrap(); + let package_graph = mock_package_graph( + &repo_root, + package_jsons! { + repo_root, + "app1" => ["libA"], + "libA" => [] + }, + ); + let turbo_jsons = vec![( + PackageName::Root, + turbo_json(json!({ + "tasks": { + "build": { "dependsOn": ["^build"] }, + } + })), + )] + .into_iter() + .collect(); + let loader = TurboJsonLoader::noop(turbo_jsons); + let engine = EngineBuilder::new(&repo_root, &package_graph, loader.clone(), false) + .with_tasks(vec![Spanned::new(TaskName::from("app2#bad-task"))]) + .with_workspaces(vec![PackageName::from("app1"), PackageName::from("libA")]) + .build(); + assert!(engine.is_err()); + let report = miette::Report::new(engine.unwrap_err()); + let mut msg = String::new(); + miette::NarratableReportHandler::new() + .render_report(&mut msg, report.as_ref()) + .unwrap(); + assert_snapshot!(msg); + } } diff --git a/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_invalid_package.snap b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_invalid_package.snap new file mode 100644 index 0000000000000..4bf5bf8fde487 --- /dev/null +++ b/crates/turborepo-lib/src/engine/snapshots/turborepo_lib__engine__builder__test__run_package_task_invalid_package.snap @@ -0,0 +1,9 @@ +--- +source: crates/turborepo-lib/src/engine/builder.rs +expression: msg +--- +missing tasks in project + Diagnostic severity: error + +Error: could not find package `app2` in project + Diagnostic severity: error From bb9871d8a7605f1ca97fd09770136b5e5175ee23 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Fri, 8 Nov 2024 07:25:37 -0700 Subject: [PATCH 167/218] feat: Wrap-around selection for TUI. (#9409) --- crates/turborepo-ui/src/tui/app.rs | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/crates/turborepo-ui/src/tui/app.rs b/crates/turborepo-ui/src/tui/app.rs index 282867ea93af7..4fe0faaf06cc8 100644 --- a/crates/turborepo-ui/src/tui/app.rs +++ b/crates/turborepo-ui/src/tui/app.rs @@ -142,21 +142,24 @@ impl App { #[tracing::instrument(skip(self))] pub fn next(&mut self) { let num_rows = self.tasks_by_status.count_all(); - let next_index = (self.selected_task_index + 1).clamp(0, num_rows - 1); - self.selected_task_index = next_index; - self.scroll.select(Some(next_index)); - self.has_user_scrolled = true; + if num_rows > 0 { + self.selected_task_index = (self.selected_task_index + 1) % num_rows; + self.scroll.select(Some(self.selected_task_index)); + self.has_user_scrolled = true; + } } #[tracing::instrument(skip(self))] pub fn previous(&mut self) { - let i = match self.selected_task_index { - 0 => 0, - i => i - 1, - }; - self.selected_task_index = i; - self.scroll.select(Some(i)); - self.has_user_scrolled = true; + let num_rows = self.tasks_by_status.count_all(); + if num_rows > 0 { + self.selected_task_index = self + .selected_task_index + .checked_sub(1) + .unwrap_or(num_rows - 1); + self.scroll.select(Some(self.selected_task_index)); + self.has_user_scrolled = true; + } } #[tracing::instrument(skip_all)] @@ -886,6 +889,8 @@ mod test { app.next(); assert_eq!(app.scroll.selected(), Some(2), "scroll moves forwards"); app.next(); + assert_eq!(app.scroll.selected(), Some(0), "scroll wraps"); + app.previous(); assert_eq!(app.scroll.selected(), Some(2), "scroll stays in bounds"); } From 20f841768e330e8605c8cdb1f1f006ae756edf5c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 09:43:26 -0500 Subject: [PATCH 168/218] release(turborepo): 2.2.4-canary.9 (#9415) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index e095e39e332a4..1d55afa840128 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index aaee7971e48bd..6ed6926069ea0 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index a5929f4590ab7..19f484fc9a0c3 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index a482aebae1c43..ba01f9a2c3759 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 3ccefedad450f..86a67e0371ddc 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 456adf5aec1b0..00f0d15d660d1 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 5131df3d64238..e2773e4c94d44 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 0e7effdd81d48..584662e277728 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 2a2bef6e79499..68130928cc4ba 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.8", + "version": "2.2.4-canary.9", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.8", - "turbo-darwin-arm64": "2.2.4-canary.8", - "turbo-linux-64": "2.2.4-canary.8", - "turbo-linux-arm64": "2.2.4-canary.8", - "turbo-windows-64": "2.2.4-canary.8", - "turbo-windows-arm64": "2.2.4-canary.8" + "turbo-darwin-64": "2.2.4-canary.9", + "turbo-darwin-arm64": "2.2.4-canary.9", + "turbo-linux-64": "2.2.4-canary.9", + "turbo-linux-arm64": "2.2.4-canary.9", + "turbo-windows-64": "2.2.4-canary.9", + "turbo-windows-arm64": "2.2.4-canary.9" } } diff --git a/version.txt b/version.txt index 2aaacddff7d26..28c8394a5c73f 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.8 +2.2.4-canary.9 canary From deb9ae15b7ea104f05f1d6347e4117811cd74b51 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Fri, 8 Nov 2024 11:00:16 -0700 Subject: [PATCH 169/218] feat: Detect WSL in `turbo info`. (#9416) ### Description We have had cases in the past where it would be nice to know if the user is using WSL. This adds best effort detection for printing out if you're using WSL. Note that this isn't a 100% solution, according to [this superuser answer](https://superuser.com/questions/1749781/how-can-i-check-if-the-environment-is-wsl-from-a-shell-script/1749811#1749811). But, if you're doing something like is listed in the caveats...That's an extreme edge case. --- crates/turborepo-lib/src/commands/info.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/crates/turborepo-lib/src/commands/info.rs b/crates/turborepo-lib/src/commands/info.rs index d0e7ccfd9c448..074738dd7ced8 100644 --- a/crates/turborepo-lib/src/commands/info.rs +++ b/crates/turborepo-lib/src/commands/info.rs @@ -1,4 +1,4 @@ -use std::{env, io}; +use std::{env, io, path::Path}; use sysinfo::{System, SystemExt}; use thiserror::Error; @@ -13,6 +13,11 @@ pub enum Error { NoCurrentExe(#[from] io::Error), } +// https://superuser.com/questions/1749781/how-can-i-check-if-the-environment-is-wsl-from-a-shell-script/1749811#1749811 +fn is_wsl() -> bool { + Path::new("/proc/sys/fs/binfmt_misc/WSLInterop").exists() +} + pub async fn run(base: CommandBase) { let system = System::new_all(); let connector = DaemonConnector::new(false, false, &base.repo_root); @@ -44,6 +49,7 @@ pub async fn run(base: CommandBase) { println!("Platform:"); println!(" Architecture: {}", std::env::consts::ARCH); println!(" Operating system: {}", std::env::consts::OS); + println!(" WSL: {}", is_wsl()); println!( " Available memory (MB): {}", system.available_memory() / 1024 / 1024 From 05eb68447ebe14ffb4a4d82d36349d0b4104c812 Mon Sep 17 00:00:00 2001 From: Ivan Torres <40922354+torresgol10@users.noreply.github.com> Date: Sun, 10 Nov 2024 07:05:06 +0100 Subject: [PATCH 170/218] Bump semver & types to latest version (#8716) I have updated the `semver` and `@types/semver` library to the latest version available in `packages/turbo-workspaces`. I have also removed `semver` from devDependency as it was duplicated. --------- Co-authored-by: torresgol10.itd Co-authored-by: Anthony Shew Co-authored-by: Anthony Shew --- packages/turbo-workspaces/package.json | 5 ++- pnpm-lock.yaml | 42 +++++++++++++++----------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 584662e277728..4080aa83bf249 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -35,7 +35,7 @@ "ora": "4.1.1", "picocolors": "1.0.1", "rimraf": "^3.0.2", - "semver": "^7.3.5", + "semver": "7.6.2", "update-check": "^1.5.4" }, "devDependencies": { @@ -50,9 +50,8 @@ "@types/js-yaml": "^4.0.5", "@types/node": "^18.17.2", "@types/rimraf": "^3.0.2", - "@types/semver": "^7.3.9", + "@types/semver": "7.5.8", "jest": "^29.7.0", - "semver": "^7.3.5", "strip-ansi": "^6.0.1", "ts-jest": "^29.2.5", "tsup": "^5.10.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd97bcae8c967..c25a384b0061b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -812,8 +812,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 semver: - specifier: ^7.3.5 - version: 7.5.0 + specifier: 7.6.2 + version: 7.6.2 update-check: specifier: ^1.5.4 version: 1.5.4 @@ -852,8 +852,8 @@ importers: specifier: ^3.0.2 version: 3.0.2 '@types/semver': - specifier: ^7.3.9 - version: 7.3.12 + specifier: 7.5.8 + version: 7.5.8 jest: specifier: ^29.7.0 version: 29.7.0(@types/node@18.17.4) @@ -3130,8 +3130,8 @@ packages: resolution: {integrity: sha512-WwA1MW0++RfXmCr12xeYOOC5baSC9mSb0ZqCquFzKhcoF4TvHu5MKOuXsncgZcpVFhB1pXd5hZmM0ryAoCp12A==} dev: true - /@types/semver@7.5.1: - resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true /@types/stack-utils@2.0.1: @@ -3205,7 +3205,7 @@ packages: graphemer: 1.4.0 ignore: 5.3.0 natural-compare: 1.4.0 - semver: 7.5.4 + semver: 7.6.2 ts-api-utils: 1.0.2(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: @@ -3293,7 +3293,7 @@ packages: debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 + semver: 7.6.2 tsutils: 3.21.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: @@ -3315,7 +3315,7 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.5.4 + semver: 7.6.2 ts-api-utils: 1.0.2(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: @@ -3330,13 +3330,13 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) eslint: 8.55.0 eslint-scope: 5.1.1 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -3350,12 +3350,12 @@ packages: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 + '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.5.4) eslint: 8.55.0 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color - typescript @@ -3977,7 +3977,7 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.4 + semver: 7.6.2 dev: false /bundle-name@3.0.0: @@ -5864,7 +5864,7 @@ packages: read-pkg-up: 7.0.1 regexp-tree: 0.1.27 regjsparser: 0.10.0 - semver: 7.5.4 + semver: 7.6.2 strip-indent: 3.0.0 dev: true @@ -7523,7 +7523,7 @@ packages: '@babel/parser': 7.25.6 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.0 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: true @@ -8059,7 +8059,7 @@ packages: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.5.4 + semver: 7.6.2 transitivePeerDependencies: - supports-color dev: true @@ -10190,6 +10190,12 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: false + + /semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true /semver@7.6.3: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} @@ -11825,7 +11831,7 @@ packages: engines: {vscode: ^1.82.0} dependencies: minimatch: 5.1.0 - semver: 7.5.4 + semver: 7.6.2 vscode-languageserver-protocol: 3.17.5 dev: false From 1ae620cdf454d0258a162a96976e3064433391a2 Mon Sep 17 00:00:00 2001 From: Julius Marminge Date: Sun, 10 Nov 2024 16:23:50 +0100 Subject: [PATCH 171/218] docs: add missing comma (#9418) fixes invalid json --- docs/repo-docs/guides/single-package-workspaces.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/single-package-workspaces.mdx b/docs/repo-docs/guides/single-package-workspaces.mdx index 0a0fa243dfbd5..999b42180610d 100644 --- a/docs/repo-docs/guides/single-package-workspaces.mdx +++ b/docs/repo-docs/guides/single-package-workspaces.mdx @@ -84,7 +84,7 @@ Then, create tasks in `turbo.json` to run these scripts in order: { "tasks": { "dev": { - "dependsOn": ["db:seed"] + "dependsOn": ["db:seed"], "cache": false, "persistent": true }, From ad8bd663bf18b3918a35960a9d538781aeaccaab Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 12 Nov 2024 10:00:38 -0700 Subject: [PATCH 172/218] docs: Clarify how to use values for self-hosted Remote Cache. (#9417) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Clarify that use can use environment variables. You don't have to use the flags all the time. 😄 ### Testing Instructions 👀 --- docs/repo-docs/core-concepts/remote-caching.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/repo-docs/core-concepts/remote-caching.mdx b/docs/repo-docs/core-concepts/remote-caching.mdx index 7171ea6c4d63b..ac2605e994503 100644 --- a/docs/repo-docs/core-concepts/remote-caching.mdx +++ b/docs/repo-docs/core-concepts/remote-caching.mdx @@ -190,4 +190,6 @@ turbo link --api="https://my-server-example.com" turbo run build --api="https://my-server.example.com" --token="xxxxxxxxxxxxxxxxx" ``` +Alternatively, [the `TURBO_API` and `TURBO_TOKEN` System Environment Variables](/repo/docs/reference/system-environment-variables) can be used to set the respective values for the Remote Cache once you've logged in. + You can [find the OpenAPI specification for the API here](/api/remote-cache-spec). At this time, all versions of `turbo` are compatible with the `v8` endpoints. From 904338b8a797c8c369816506504f106c7f279783 Mon Sep 17 00:00:00 2001 From: Naveen MC <8493007+mcnaveen@users.noreply.github.com> Date: Tue, 12 Nov 2024 23:56:18 +0530 Subject: [PATCH 173/218] fix (react-native-web-example): add tui to turbo config (#9334) ### Description - Adding `ui` to the `turbo.json` allows to have interactive tasks https://github.com/vercel/turborepo/issues/1235#issuecomment-2436930436 ### Testing Instructions 1. Create a new project `npx create-turbo@latest -e with-react-native-web` 2. Run `pnpm run dev` 3. It opens a new terminal UI --- examples/with-react-native-web/turbo.json | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/with-react-native-web/turbo.json b/examples/with-react-native-web/turbo.json index 9be170ca30f2c..c1030a4116811 100644 --- a/examples/with-react-native-web/turbo.json +++ b/examples/with-react-native-web/turbo.json @@ -1,5 +1,6 @@ { "$schema": "https://turbo.build/schema.json", + "ui": "tui", "tasks": { "build": { "inputs": ["$TURBO_DEFAULT$", ".env*"], From 81e1a2bb612a6f21169144fc1cf33d6a2430031d Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Tue, 12 Nov 2024 13:16:07 -0700 Subject: [PATCH 174/218] docs: `turbo info` (#9413) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2.3 release ### Description Adds https://github.com/vercel/turborepo/pull/9368 to the docs. ### Testing Instructions 👀 --- docs/repo-docs/reference/info.mdx | 34 ++++++++++++++++++++++++++++++ docs/repo-docs/reference/meta.json | 1 + 2 files changed, 35 insertions(+) create mode 100644 docs/repo-docs/reference/info.mdx diff --git a/docs/repo-docs/reference/info.mdx b/docs/repo-docs/reference/info.mdx new file mode 100644 index 0000000000000..ccf7dcc42f278 --- /dev/null +++ b/docs/repo-docs/reference/info.mdx @@ -0,0 +1,34 @@ +--- +title: info +description: API reference for the `turbo info` command +--- + +Print debugging information about your Turborepo. + +```bash title="Terminal" +turbo info +``` + +Example output: + +```txt title="Terminal" +CLI: + Version: 2.3.0 + Path to executable: /path/to/turbo + Daemon status: Running + Package manager: pnpm + +Platform: + Architecture: aarch64 + Operating system: macos + Available memory (MB): 12810 + Available CPU cores: 10 + +Environment: + CI: None + Terminal (TERM): xterm-256color + Terminal program (TERM_PROGRAM): tmux + Terminal program version (TERM_PROGRAM_VERSION): 3.4 + Shell (SHELL): /bin/zsh + stdin: false +``` diff --git a/docs/repo-docs/reference/meta.json b/docs/repo-docs/reference/meta.json index 05d3e5dd8c3b1..c004c0782d233 100644 --- a/docs/repo-docs/reference/meta.json +++ b/docs/repo-docs/reference/meta.json @@ -19,6 +19,7 @@ "link", "unlink", "bin", + "info", "telemetry", "---Packages---", "create-turbo", From 3a34e34cefdf8e6b1c7bd8a65145a98c05df6f95 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Tue, 12 Nov 2024 18:06:13 -0500 Subject: [PATCH 175/218] chore(cache): add deprecation warnings to old cache flags (#9428) ### Description With introduction of `--cache` and `TURBO_CACHE` add deprecation flags to the "old" cache config options. ### Testing Instructions ``` [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ TURBO_REMOTE_ONLY=1 turbo_dev @turbo/types#lint > /dev/null WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.9. turbo 2.2.4-canary.9 WARNING TURBO_REMOTE_ONLY is deprecated and will be removed in a future major version. Use TURBO_CACHE=remote:rw [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ TURBO_REMOTE_CACHE_READ_ONLY=1 turbo_dev @turbo/types#lint > /dev/null WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.9. turbo 2.2.4-canary.9 WARNING TURBO_REMOTE_CACHE_READ_ONLY is deprecated and will be removed in a future major version. Use TURBO_CACHE=remote:r [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ turbo_dev @turbo/types#lint --no-cache > /dev/null WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.9. WARNING --no-cache is deprecated and will be removed in a future major version. Use --cache=local:r,remote:r turbo 2.2.4-canary.9 [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ turbo_dev @turbo/types#lint --remote-only > /dev/null WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.9. WARNING --remote-only is deprecated and will be removed in a future major version. Use --cache=remote:rw turbo 2.2.4-canary.9 [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ turbo_dev @turbo/types#lint --remote-cache-read-only > /dev/null WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.9. WARNING --remote-cache-read-only is deprecated and will be removed in a future major version. Use --cache=remote:r turbo 2.2.4-canary.9 ``` --- crates/turborepo-cache/src/lib.rs | 31 ++++++++++++++ crates/turborepo-lib/src/cli/mod.rs | 21 +++++++++ crates/turborepo-lib/src/config/env.rs | 59 +++++++++++++++++++++++--- 3 files changed, 104 insertions(+), 7 deletions(-) diff --git a/crates/turborepo-cache/src/lib.rs b/crates/turborepo-cache/src/lib.rs index 65bcadbc7e5db..23ba603ed6836 100644 --- a/crates/turborepo-cache/src/lib.rs +++ b/crates/turborepo-cache/src/lib.rs @@ -118,6 +118,20 @@ impl CacheActions { pub fn should_use(&self) -> bool { self.read || self.write } + + pub fn disabled() -> Self { + Self { + read: false, + write: false, + } + } + + pub fn enabled() -> Self { + Self { + read: true, + write: true, + } + } } #[derive(Debug, PartialEq, Eq, Clone, Copy, Default)] @@ -130,6 +144,23 @@ impl CacheConfig { pub fn skip_writes(&self) -> bool { !self.local.write && !self.remote.write } + + pub fn remote_only() -> Self { + Self { + local: CacheActions::disabled(), + remote: CacheActions::enabled(), + } + } + + pub fn remote_read_only() -> Self { + Self { + local: CacheActions::disabled(), + remote: CacheActions { + read: true, + write: false, + }, + } + } } impl Default for CacheActions { diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 77ae10e6b458d..34c05dd811427 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -413,6 +413,27 @@ impl Args { clap_args.test_run = true; } + if let Some(run_args) = clap_args.run_args() { + if run_args.no_cache { + warn!( + "--no-cache is deprecated and will be removed in a future major version. Use \ + --cache=local:r,remote:r" + ); + } + if run_args.remote_only.is_some() { + warn!( + "--remote-only is deprecated and will be removed in a future major version. \ + Use --cache=remote:rw" + ); + } + if run_args.remote_cache_read_only.is_some() { + warn!( + "--remote-cache-read-only is deprecated and will be removed in a future major \ + version. Use --cache=remote:r" + ); + } + } + clap_args } diff --git a/crates/turborepo-lib/src/config/env.rs b/crates/turborepo-lib/src/config/env.rs index 5d9aedcf7406f..9d50639ca71cb 100644 --- a/crates/turborepo-lib/src/config/env.rs +++ b/crates/turborepo-lib/src/config/env.rs @@ -5,7 +5,9 @@ use std::{ use clap::ValueEnum; use itertools::Itertools; +use tracing::warn; use turbopath::AbsoluteSystemPathBuf; +use turborepo_cache::CacheConfig; use super::{ConfigurationOptions, Error, ResolvedConfigurationOptions}; use crate::{ @@ -79,10 +81,57 @@ impl ResolvedConfigurationOptions for EnvVars { .transpose()?; let force = self.truthy_value("force").flatten(); - let remote_only = self.truthy_value("remote_only").flatten(); - let remote_cache_read_only = self.truthy_value("remote_cache_read_only").flatten(); + let mut remote_only = self.truthy_value("remote_only").flatten(); + + let mut remote_cache_read_only = self.truthy_value("remote_cache_read_only").flatten(); + let run_summary = self.truthy_value("run_summary").flatten(); let allow_no_turbo_json = self.truthy_value("allow_no_turbo_json").flatten(); + let mut cache: Option = self + .output_map + .get("cache") + .map(|c| c.parse()) + .transpose()?; + + // If TURBO_FORCE is set it wins out over TURBO_CACHE + if force.is_some_and(|t| t) { + cache = None; + } + + if remote_only.is_some_and(|t| t) { + if let Some(cache) = cache { + // If TURBO_REMOTE_ONLY and TURBO_CACHE result in the same behavior, remove + // REMOTE_ONLY to avoid deprecation warning or mixing of old/new + // cache flag error. + if cache == CacheConfig::remote_only() { + remote_only = None; + } + } + } + if remote_cache_read_only.is_some_and(|t| t) { + if let Some(cache) = cache { + // If TURBO_REMOTE_CACHE_READ_ONLY and TURBO_CACHE result in the same behavior, + // remove REMOTE_CACHE_READ_ONLY to avoid deprecation warning or + // mixing of old/new cache flag error. + if cache == CacheConfig::remote_read_only() { + remote_cache_read_only = None; + } + } + } + + if remote_only.is_some() { + warn!( + "TURBO_REMOTE_ONLY is deprecated and will be removed in a future major version. \ + Use TURBO_CACHE=remote:rw" + ); + } + + if remote_cache_read_only.is_some() { + warn!( + "TURBO_REMOTE_CACHE_READ_ONLY is deprecated and will be removed in a future major \ + version. Use TURBO_CACHE=remote:r" + ); + } // Process timeout let timeout = self @@ -157,11 +206,7 @@ impl ResolvedConfigurationOptions for EnvVars { token: self.output_map.get("token").cloned(), scm_base: self.output_map.get("scm_base").cloned(), scm_head: self.output_map.get("scm_head").cloned(), - cache: self - .output_map - .get("cache") - .map(|c| c.parse()) - .transpose()?, + cache, // Processed booleans signature, preflight, From ad56af9e68e23ef0950b1bb01d555ccf2b4b3f92 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 13 Nov 2024 08:47:19 -0500 Subject: [PATCH 176/218] release(turborepo): 2.2.4-canary.10 (#9431) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 1d55afa840128..8b20bce20dd06 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 6ed6926069ea0..80c1094f813b2 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 19f484fc9a0c3..f37dc918dae59 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index ba01f9a2c3759..b8424f724324c 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 86a67e0371ddc..726b599b0e1e5 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 00f0d15d660d1..567cdbd7d9b71 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index e2773e4c94d44..93e1a8e6ea57f 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 4080aa83bf249..898f6e445bda0 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 68130928cc4ba..7e97b4b2d89e3 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.9", + "version": "2.2.4-canary.10", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.9", - "turbo-darwin-arm64": "2.2.4-canary.9", - "turbo-linux-64": "2.2.4-canary.9", - "turbo-linux-arm64": "2.2.4-canary.9", - "turbo-windows-64": "2.2.4-canary.9", - "turbo-windows-arm64": "2.2.4-canary.9" + "turbo-darwin-64": "2.2.4-canary.10", + "turbo-darwin-arm64": "2.2.4-canary.10", + "turbo-linux-64": "2.2.4-canary.10", + "turbo-linux-arm64": "2.2.4-canary.10", + "turbo-windows-64": "2.2.4-canary.10", + "turbo-windows-arm64": "2.2.4-canary.10" } } diff --git a/version.txt b/version.txt index 28c8394a5c73f..aed551b65b9f2 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.9 +2.2.4-canary.10 canary From 931e6369fd742153444fa28463d60fb14f0b30f6 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 13 Nov 2024 09:11:45 -0500 Subject: [PATCH 177/218] chore(watch): warn if daemon is disabled (#9407) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Closes https://github.com/vercel/turborepo/issues/9401 `turbo watch` cannot function without the daemon, we should warn users of this if they have tried to disable the daemon. We could error if the daemon is disabled, but that would lead to awkward behavior if it is disabled in `turbo.json`. It's possible to want the daemon disabled for `turbo run`, but still want to use `turbo watch`. ### Testing Instructions Attempt running watch with an explicit request to disable the daemon: ``` [1 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ turbo_dev --no-daemon watch @turbo/types#build WARNING No locally installed `turbo` found. Using version: 2.2.4-canary.8. turbo 2.2.4-canary.8 WARNING daemon is required for watch, ignoring request to disable daemon • Packages in scope: @turbo-internal/top-issues-gh-action, @turbo/benchmark, @turbo/codemod, @turbo/eslint-config, @turbo/exe-stub, @turbo/gen, @turbo/telemetry, @turbo/test-utils, @turbo/tsconfig, @turbo/types, @turbo/utils, @turbo/workspaces, @turborepo-examples-tests/basic, @turborepo-examples-tests/design-system, @turborepo-examples-tests/kitchen-sink, @turborepo-examples-tests/non-monorepo, @turborepo-examples-tests/with-berry, @turborepo-examples-tests/with-changesets, @turborepo-examples-tests/with-npm, @turborepo-examples-tests/with-react-native-web, @turborepo-examples-tests/with-rollup, @turborepo-examples-tests/with-svelte, @turborepo-examples-tests/with-tailwind, @turborepo-examples-tests/with-vite, @turborepo-examples-tests/with-yarn, cargo-sweep-action, cli, create-turbo, eslint-config-turbo, eslint-plugin-turbo, prysk, turbo-ignore, turbo-vsc, turborepo-examples, turborepo-repository, turborepo-tests-helpers, turborepo-tests-integration • Running @turbo/types#build in 37 packages • Remote caching enabled ┌ @turbo/types#build > cache miss, executing 305999608c9295f1 │ │ │ > @turbo/types@2.2.4-canary.8 build /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsc && pnpm generate-schema │ │ │ > @turbo/types@2.2.4-canary.8 generate-schema /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsx scripts/generate-schema.ts └────> × watch interrupted due to signal ``` --- crates/turborepo-lib/src/run/watch.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/turborepo-lib/src/run/watch.rs b/crates/turborepo-lib/src/run/watch.rs index dab2c561c82bd..23b10fb01fb9f 100644 --- a/crates/turborepo-lib/src/run/watch.rs +++ b/crates/turborepo-lib/src/run/watch.rs @@ -8,7 +8,7 @@ use futures::StreamExt; use miette::{Diagnostic, SourceSpan}; use thiserror::Error; use tokio::{select, sync::Notify, task::JoinHandle}; -use tracing::{instrument, trace}; +use tracing::{instrument, trace, warn}; use turborepo_repository::package_graph::PackageName; use turborepo_telemetry::events::command::CommandEventBuilder; use turborepo_ui::sender::UISender; @@ -113,12 +113,16 @@ impl WatchClient { pub async fn new(base: CommandBase, telemetry: CommandEventBuilder) -> Result { let signal = commands::run::get_signal()?; let handler = SignalHandler::new(signal); - let root_turbo_json_path = base.config()?.root_turbo_json_path(&base.repo_root); + let config = base.config()?; + let root_turbo_json_path = config.root_turbo_json_path(&base.repo_root); if root_turbo_json_path != base.repo_root.join_component(CONFIG_FILE) { return Err(Error::NonStandardTurboJsonPath( root_turbo_json_path.to_string(), )); } + if matches!(config.daemon(), Some(false)) { + warn!("daemon is required for watch, ignoring request to disable daemon"); + } let Some(Command::Watch(execution_args)) = &base.args().command else { unreachable!() From 9a9fc93f4cb387f99bc7f41659fcac90a2ed0f82 Mon Sep 17 00:00:00 2001 From: Nicholas Yang Date: Wed, 13 Nov 2024 11:21:04 -0500 Subject: [PATCH 178/218] feat(watch): package inference in watch mode (#9404) ### Description Handle the package inference env var in watch mode with the same logic we use for run ### Testing Instructions Try it out by running the binary in a nested directory. Note, you'll have to remove your local turbo for this to work properly --- crates/turborepo-lib/src/cli/mod.rs | 65 +++++++++++++++-------------- 1 file changed, 34 insertions(+), 31 deletions(-) diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index 34c05dd811427..b857bd34b8f6c 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -1127,41 +1127,44 @@ pub async fn run( }; // Set some run flags if we have the data and are executing a Run - if let Command::Run { - run_args: _, - execution_args, - } = &mut command - { - // Don't overwrite the flag if it's already been set for whatever reason - execution_args.single_package = execution_args.single_package - || repo_state - .as_ref() - .map(|repo_state| matches!(repo_state.mode, RepoMode::SinglePackage)) - .unwrap_or(false); - // If this is a run command, and we know the actual invocation path, set the - // inference root, as long as the user hasn't overridden the cwd - if cli_args.cwd.is_none() { - if let Ok(invocation_dir) = env::var(INVOCATION_DIR_ENV_VAR) { - // TODO: this calculation can probably be wrapped into the path library - // and made a little more robust or clear - let invocation_path = Utf8Path::new(&invocation_dir); - - // If repo state doesn't exist, we're either local turbo running at the root - // (cwd), or inference failed. - // If repo state does exist, we're global turbo, and want to calculate - // package inference based on the repo root - let this_dir = AbsoluteSystemPathBuf::cwd()?; - let repo_root = repo_state.as_ref().map_or(&this_dir, |r| &r.root); - if let Ok(relative_path) = invocation_path.strip_prefix(repo_root) { - if !relative_path.as_str().is_empty() { - debug!("pkg_inference_root set to \"{}\"", relative_path); - execution_args.pkg_inference_root = Some(relative_path.to_string()); + match &mut command { + Command::Run { + run_args: _, + execution_args, + } + | Command::Watch(execution_args) => { + // Don't overwrite the flag if it's already been set for whatever reason + execution_args.single_package = execution_args.single_package + || repo_state + .as_ref() + .map(|repo_state| matches!(repo_state.mode, RepoMode::SinglePackage)) + .unwrap_or(false); + // If this is a run command, and we know the actual invocation path, set the + // inference root, as long as the user hasn't overridden the cwd + if cli_args.cwd.is_none() { + if let Ok(invocation_dir) = env::var(INVOCATION_DIR_ENV_VAR) { + // TODO: this calculation can probably be wrapped into the path library + // and made a little more robust or clear + let invocation_path = Utf8Path::new(&invocation_dir); + + // If repo state doesn't exist, we're either local turbo running at the root + // (cwd), or inference failed. + // If repo state does exist, we're global turbo, and want to calculate + // package inference based on the repo root + let this_dir = AbsoluteSystemPathBuf::cwd()?; + let repo_root = repo_state.as_ref().map_or(&this_dir, |r| &r.root); + if let Ok(relative_path) = invocation_path.strip_prefix(repo_root) { + if !relative_path.as_str().is_empty() { + debug!("pkg_inference_root set to \"{}\"", relative_path); + execution_args.pkg_inference_root = Some(relative_path.to_string()); + } } + } else { + debug!("{} not set", INVOCATION_DIR_ENV_VAR); } - } else { - debug!("{} not set", INVOCATION_DIR_ENV_VAR); } } + _ => {} } // TODO: make better use of RepoState, here and below. We've already inferred From 43ab1c7eae5f28071c006444c60e609c05c21ce4 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Wed, 13 Nov 2024 12:39:19 -0500 Subject: [PATCH 179/218] fix(mfe): avoid crashing if unsupported mfe version found (#9432) ### Description We should avoid crashing if we encounter a version of MFE config that we don't currently support. ### Testing Instructions Added unit test. Quick spot check by changing version in an example to an unsupported version: ``` [1 olszewski@chriss-mbp] /Users/olszewski/code/ $ turbo_dev --skip-infer micro-frontends-example-web#dev --dry=json > /dev/null turbo 2.2.4-canary.10 WARNING Ignoring /Users/olszewski/code/packages/micro-frontends-example-site-config/micro-frontends.jsonc: Unsupported micro-frontends configuration version: 2. Supported versions: ["1"] ``` --- Cargo.lock | 1 + crates/turborepo-lib/src/micro_frontends.rs | 11 ++++++- crates/turborepo-micro-frontend/Cargo.toml | 1 + crates/turborepo-micro-frontend/src/error.rs | 7 +++++ crates/turborepo-micro-frontend/src/lib.rs | 33 ++++++++++++++++++-- 5 files changed, 49 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b817469229c5d..eb3a70c080949 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6541,6 +6541,7 @@ dependencies = [ "biome_diagnostics", "biome_json_parser", "biome_json_syntax", + "insta", "pretty_assertions", "serde", "serde_json", diff --git a/crates/turborepo-lib/src/micro_frontends.rs b/crates/turborepo-lib/src/micro_frontends.rs index 8d5891e9725e6..16553d2cede6e 100644 --- a/crates/turborepo-lib/src/micro_frontends.rs +++ b/crates/turborepo-lib/src/micro_frontends.rs @@ -1,5 +1,6 @@ use std::collections::{HashMap, HashSet}; +use tracing::warn; use turbopath::AbsoluteSystemPath; use turborepo_micro_frontend::{Config as MFEConfig, Error, DEFAULT_MICRO_FRONTENDS_CONFIG}; use turborepo_repository::package_graph::PackageGraph; @@ -21,7 +22,15 @@ impl MicroFrontendsConfigs { let config_path = repo_root .resolve(package_info.package_path()) .join_component(DEFAULT_MICRO_FRONTENDS_CONFIG); - let Some(config) = MFEConfig::load(&config_path)? else { + let Some(config) = MFEConfig::load(&config_path).or_else(|err| { + if matches!(err, turborepo_micro_frontend::Error::UnsupportedVersion(_)) { + warn!("Ignoring {config_path}: {err}"); + Ok(None) + } else { + Err(err) + } + })? + else { continue; }; let tasks = config diff --git a/crates/turborepo-micro-frontend/Cargo.toml b/crates/turborepo-micro-frontend/Cargo.toml index 3c20340f1da70..d08ccd33d425f 100644 --- a/crates/turborepo-micro-frontend/Cargo.toml +++ b/crates/turborepo-micro-frontend/Cargo.toml @@ -17,6 +17,7 @@ turbopath = { workspace = true } turborepo-errors = { workspace = true } [dev-dependencies] +insta = { workspace = true } pretty_assertions = { workspace = true } [lints] diff --git a/crates/turborepo-micro-frontend/src/error.rs b/crates/turborepo-micro-frontend/src/error.rs index f13eba267362b..36354aeec2fb4 100644 --- a/crates/turborepo-micro-frontend/src/error.rs +++ b/crates/turborepo-micro-frontend/src/error.rs @@ -1,11 +1,18 @@ use turborepo_errors::ParseDiagnostic; +use crate::SUPPORTED_VERSIONS; + #[derive(Debug, thiserror::Error)] pub enum Error { #[error("Unable to read configuration file: {0}")] Io(#[from] std::io::Error), #[error("Unable to parse JSON: {0}")] JsonParse(String), + #[error( + "Unsupported micro-frontends configuration version: {0}. Supported versions: \ + {SUPPORTED_VERSIONS:?}" + )] + UnsupportedVersion(String), } impl Error { diff --git a/crates/turborepo-micro-frontend/src/lib.rs b/crates/turborepo-micro-frontend/src/lib.rs index e250d7779088a..4714e05922b6e 100644 --- a/crates/turborepo-micro-frontend/src/lib.rs +++ b/crates/turborepo-micro-frontend/src/lib.rs @@ -15,6 +15,7 @@ use turbopath::AbsoluteSystemPath; pub const DEFAULT_MICRO_FRONTENDS_CONFIG: &str = "micro-frontends.jsonc"; pub const MICRO_FRONTENDS_PACKAGES: &[&str] = [MICRO_FRONTENDS_PACKAGE_INTERNAL].as_slice(); pub const MICRO_FRONTENDS_PACKAGE_INTERNAL: &str = "@vercel/micro-frontends-internal"; +pub const SUPPORTED_VERSIONS: &[&str] = ["1"].as_slice(); /// The minimal amount of information Turborepo needs to correctly start a local /// proxy server for microfrontends @@ -31,11 +32,28 @@ impl Config { let Some(contents) = config_path.read_existing_to_string()? else { return Ok(None); }; - let config = Self::from_str(&contents, config_path.as_str()).map_err(Error::biome_error)?; + let config = Self::from_str(&contents, config_path.as_str())?; Ok(Some(config)) } - pub fn from_str(input: &str, source: &str) -> Result> { + pub fn from_str(input: &str, source: &str) -> Result { + #[derive(Deserializable, Default)] + struct VersionOnly { + version: String, + } + let (version_only, _errs) = biome_deserialize::json::deserialize_from_json_str( + input, + JsonParserOptions::default().with_allow_comments(), + source, + ) + .consume(); + // If parsing just the version fails, fallback to full schema to provide better + // error message + if let Some(VersionOnly { version }) = version_only { + if !SUPPORTED_VERSIONS.contains(&version.as_str()) { + return Err(Error::UnsupportedVersion(version)); + } + } let (config, errs) = biome_deserialize::json::deserialize_from_json_str( input, JsonParserOptions::default().with_allow_comments(), @@ -45,7 +63,7 @@ impl Config { if let Some(config) = config { Ok(config) } else { - Err(errs) + Err(Error::biome_error(errs)) } } } @@ -63,6 +81,8 @@ pub struct Development { #[cfg(test)] mod test { + use insta::assert_snapshot; + use super::*; #[test] @@ -71,4 +91,11 @@ mod test { let example_config = Config::from_str(input, "something.json"); assert!(example_config.is_ok()); } + + #[test] + fn test_unsupported_version() { + let input = r#"{"version": "yolo"}"#; + let err = Config::from_str(input, "something.json").unwrap_err(); + assert_snapshot!(err, @r###"Unsupported micro-frontends configuration version: yolo. Supported versions: ["1"]"###); + } } From 649a09642cf4464485c02cbed75056f27cd8ffef Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 14 Nov 2024 10:24:27 -0700 Subject: [PATCH 180/218] Document `--cache` flag. (#9427) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # DO NOT MERGE CONDITION 2.3 release. ### Description Documenting #9348 ### Testing Instructions 👀 --------- Co-authored-by: Nicholas Yang --- docs/repo-docs/reference/run.mdx | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/docs/repo-docs/reference/run.mdx b/docs/repo-docs/reference/run.mdx index 7b71f34025351..f093e1ffd4a09 100644 --- a/docs/repo-docs/reference/run.mdx +++ b/docs/repo-docs/reference/run.mdx @@ -58,6 +58,34 @@ TURBO_SCM_HEAD=your-branch turbo run build --affected changed.
+### `--cache ` + +Default: `local:rw,remote:rw` + +Specify caching sources for the run. Accepts a comma-separated list of options: + +- `local`: Use the local filesystem cache +- `remote`: Use the Remote Cache + +When an option is omitted, reading and writing are both disabled + +Each option must be followed by one of: + +- `rw`: Read and write +- `r`: Read only +- `w`: Write only + +```bash title="Terminal" +# Read and write to local cache, read only to Remote Cache +turbo run build --cache=local:rw,remote:r + +# Read-only to local cache, read write to Remote Cache +turbo run build --cache=local:r,remote:rw + +# Read and write to local cache, no Remote Cache activity +turbo run build --cache=local:rw +``` + ### `--cache-dir ` Default: `.turbo/cache` From dbaf5fb7dbed520ef4abceaa173ab5e26515a2a3 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 14 Nov 2024 10:24:43 -0700 Subject: [PATCH 181/218] docs: Add doc for running by task ID. (#9412) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # DO MOT MERGE CONDITION 2.3 release ### Description Documenting https://github.com/vercel/turborepo/pull/9344. ### Testing Instructions 👀 --- .../running-tasks.mdx | 19 +++++++++++++++++-- docs/repo-docs/reference/run.mdx | 13 +++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/running-tasks.mdx b/docs/repo-docs/crafting-your-repository/running-tasks.mdx index d3649497ba791..72a35c56810be 100644 --- a/docs/repo-docs/crafting-your-repository/running-tasks.mdx +++ b/docs/repo-docs/crafting-your-repository/running-tasks.mdx @@ -6,6 +6,7 @@ description: Learn how to run tasks in your repository through the `turbo` CLI. import { Callout } from '#/components/callout'; import { PackageManagerTabs, Tab } from '#/components/tabs'; import { LinkToDocumentation } from '#/components/link-to-documentation'; +import { InVersion } from '#/components/in-version'; Turborepo optimizes the developer workflows in your repository by automatically parallelizing and caching tasks. Once a task is [registered in `turbo.json`](/repo/docs/crafting-your-repository/configuring-tasks), you have a powerful new toolset for running the scripts in your repository: @@ -114,11 +115,11 @@ If you want to ensure that one task blocks the execution of another, express tha ## Using filters -While [caching](/repo/docs/crafting-your-repository/running-tasks) ensures you stay fast by never doing the same work twice, you can also filter tasks to run only a subset of [the Task Graph](/repo/docs/core-concepts/package-and-task-graph#task-graph), according to your needs. +While [caching](/repo/docs/crafting-your-repository/running-tasks) ensures you stay fast by never doing the same work twice, you can also filter tasks to run only a subset of [the Task Graph](/repo/docs/core-concepts/package-and-task-graph#task-graph). There are many advanced use cases for filtering in [the `--filter` API reference](/repo/docs/reference/run#--filter-string) but the most common use cases are discussed below. -### Filtering by package name +### Filtering by package Filtering by package is a simple way to only run tasks for the packages you're currently working on. @@ -126,6 +127,20 @@ Filtering by package is a simple way to only run tasks for the packages you're c turbo build --filter=@acme/web ``` + + +You can also filter to a specific task for the package directly in your CLI command without needing to use `--filter`: + +```bash title="Terminal" +# Run the `build` task for the `web` package +turbo run web#build + +# Run the `build` task for the `web` package, and the `lint` task for the `docs` package +turbo run web#build docs#lint +``` + + + ### Filtering by directory Your repository might have a directory structure where related packages are grouped together. In this case, you can capture the glob for that directory to focus `turbo` on those packages. diff --git a/docs/repo-docs/reference/run.mdx b/docs/repo-docs/reference/run.mdx index f093e1ffd4a09..746d6136097af 100644 --- a/docs/repo-docs/reference/run.mdx +++ b/docs/repo-docs/reference/run.mdx @@ -248,6 +248,19 @@ Filters can be combined to create combinations of packages, directories, and git For in-depth discussion and practical use cases of filtering, visit [the Running Tasks page](/repo/docs/crafting-your-repository/running-tasks). +#### Using a task identifier + +You can also run a specific task for a specific package in the format of `package-name#task-name`. + +```bash title="Terminal" +turbo run web#lint +``` + + + This will also run the task's dependencies. To run a task without its + dependencies, use [the `--only` flag](#--only). + + #### Advanced filtering examples You can combine multiple filters to further refine your targets. Multiple filters are combined as a union, with negated filters removing packages from the result of the union. From 48d676270c6e3169e32fd87e5e8ffefe55f57968 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 14 Nov 2024 12:55:55 -0500 Subject: [PATCH 182/218] release(turborepo): 2.3.0 (#9437) Co-authored-by: Turbobot --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 8b20bce20dd06..55eeea3f03846 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 80c1094f813b2..a04f585664138 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index f37dc918dae59..5e725f61776c4 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b8424f724324c..b373a11b84d5a 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 726b599b0e1e5..92f9d3480ca31 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 567cdbd7d9b71..f5cad3904796e 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 93e1a8e6ea57f..162bc7fdd2139 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 898f6e445bda0..bb84016b934a8 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 7e97b4b2d89e3..f8902ef579fbd 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.2.4-canary.10", + "version": "2.3.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.2.4-canary.10", - "turbo-darwin-arm64": "2.2.4-canary.10", - "turbo-linux-64": "2.2.4-canary.10", - "turbo-linux-arm64": "2.2.4-canary.10", - "turbo-windows-64": "2.2.4-canary.10", - "turbo-windows-arm64": "2.2.4-canary.10" + "turbo-darwin-64": "2.3.0", + "turbo-darwin-arm64": "2.3.0", + "turbo-linux-64": "2.3.0", + "turbo-linux-arm64": "2.3.0", + "turbo-windows-64": "2.3.0", + "turbo-windows-arm64": "2.3.0" } } diff --git a/version.txt b/version.txt index aed551b65b9f2..89d1e6680d2a1 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.2.4-canary.10 -canary +2.3.0 +latest From e680dabb774b3f3b8024683ebb565ed52c1edbb4 Mon Sep 17 00:00:00 2001 From: Chris Olszewski Date: Thu, 14 Nov 2024 13:59:41 -0500 Subject: [PATCH 183/218] fix(windows): fix env var glob casing (#9429) ### Description In https://github.com/vercel/turborepo/issues/9424 a user had `path` as their Windows env var instead of `Path` or `PATH`. On Windows environment variables are case insensitive e.g. `process.env.PATH` and `process.env.Path` would both return the same. While fetching them might be the same [`std::env::vars`](https://doc.rust-lang.org/std/env/fn.vars.html) returns the environment variable names cased as they were declared even though [`std::env::var`](https://doc.rust-lang.org/std/env/fn.var.html) is case insensitive on Windows. Take for example the following code: ``` for (key, value) in std::env::vars() { println!("{key}: {value}"); let lowercase = key.to_ascii_lowercase(); println!("{lowercase}: {:?}", std::env::var(&lowercase)); } ``` On Windows it outputs: ``` ... PUBLIC: C:\Users\Public public: Ok("C:\\Users\\Public") SESSIONNAME: Console sessionname: Ok("Console") SystemDrive: C: systemdrive: Ok("C:") SystemRoot: C:\WINDOWS systemroot: Ok("C:\\WINDOWS") TEMP: C:\Users\Chris\AppData\Local\Temp temp: Ok("C:\\Users\\Chris\\AppData\\Local\\Temp") TMP: C:\Users\Chris\AppData\Local\Temp tmp: Ok("C:\\Users\\Chris\\AppData\\Local\\Temp") ``` On macOs it outputs: ``` ... TMPDIR: /var/folders/3m/rxkycvgs5jgfvs0k9xcgp6km0000gn/T/ tmpdir: Err(NotPresent) TMUX: /private/tmp/tmux-501/default,3104,0 tmux: Err(NotPresent) TMUX_PANE: %4 tmux_pane: Err(NotPresent) USER: olszewski user: Err(NotPresent) USER_ZDOTDIR: /Users/olszewski user_zdotdir: Err(NotPresent) ``` Previously we had special casing for well known Windows env vars that were set differently between Command Prompt and Powershell, but would break if a user overwrote `Path` or `PATH` to `path`. This was brittle and a correct solution would require that we include all casing variations of all environment variables and users would also need to know how env vars were declared on their Windows system. This fix is to make our env var wildcard handling case in ### Testing Instructions Added unit test to make sure we --- crates/turborepo-env/src/lib.rs | 28 ++++++++++++++++++++++++--- crates/turborepo-lib/src/task_hash.rs | 6 ------ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/crates/turborepo-env/src/lib.rs b/crates/turborepo-env/src/lib.rs index 938aff039f252..177955a6fe809 100644 --- a/crates/turborepo-env/src/lib.rs +++ b/crates/turborepo-env/src/lib.rs @@ -6,7 +6,7 @@ use std::{ ops::{Deref, DerefMut}, }; -use regex::Regex; +use regex::RegexBuilder; use serde::Serialize; use sha2::{Digest, Sha256}; use thiserror::Error; @@ -180,8 +180,13 @@ impl EnvironmentVariableMap { let include_regex_string = format!("^({})$", include_patterns.join("|")); let exclude_regex_string = format!("^({})$", exclude_patterns.join("|")); - let include_regex = Regex::new(&include_regex_string)?; - let exclude_regex = Regex::new(&exclude_regex_string)?; + let case_insensitive = cfg!(windows); + let include_regex = RegexBuilder::new(&include_regex_string) + .case_insensitive(case_insensitive) + .build()?; + let exclude_regex = RegexBuilder::new(&exclude_regex_string) + .case_insensitive(case_insensitive) + .build()?; for (env_var, env_value) in &self.0 { if !include_patterns.is_empty() && include_regex.is_match(env_var) { output.inclusions.insert(env_var.clone(), env_value.clone()); @@ -304,6 +309,8 @@ pub fn get_global_hashable_env_vars( mod tests { use test_case::test_case; + use super::*; + #[test_case("LITERAL_\\*", "LITERAL_\\*" ; "literal star")] #[test_case("\\*LEADING", "\\*LEADING" ; "leading literal star")] #[test_case("\\!LEADING", "\\\\!LEADING" ; "leading literal bang")] @@ -313,4 +320,19 @@ mod tests { let actual = super::wildcard_to_regex_pattern(pattern); assert_eq!(actual, expected); } + + #[test] + fn test_case_sensitivity() { + let start = EnvironmentVariableMap( + vec![("Turbo".to_string(), "true".to_string())] + .into_iter() + .collect(), + ); + let actual = start.from_wildcards(&["TURBO"]).unwrap(); + if cfg!(windows) { + assert_eq!(actual.get("Turbo").map(|s| s.as_str()), Some("true")); + } else { + assert_eq!(actual.get("Turbo"), None); + } + } } diff --git a/crates/turborepo-lib/src/task_hash.rs b/crates/turborepo-lib/src/task_hash.rs index 9bedc108e5129..1e5b717b87e70 100644 --- a/crates/turborepo-lib/src/task_hash.rs +++ b/crates/turborepo-lib/src/task_hash.rs @@ -506,12 +506,6 @@ impl<'a> TaskHasher<'a> { "PROGRAMDATA", "SYSTEMROOT", "SYSTEMDRIVE", - // Powershell casing of env variables - "Path", - "ProgramData", - "SystemRoot", - "AppData", - "SystemDrive", ])?; let tracker_env = self .task_hash_tracker From f4be2daca5b588131fac30b7f5be4c0ad0f13756 Mon Sep 17 00:00:00 2001 From: Jeremy Nguyen Date: Thu, 14 Nov 2024 11:58:31 -0800 Subject: [PATCH 184/218] chore(linting): implement ESLint flat config compatibility for `eslint-plugin-turbo` (#9426) ### Description - Add "flat/recommended" config to `eslint-plugin-turbo` - Add `meta` property to plugin - Update README.md accordingly with information on using flat config - Add tests for flat config in `__tests__/cwdFlat.test.ts` ### Testing Instructions Run the following command: ```shell pnpm run test --filter=eslint-plugin-turbo ``` See vercel/turborepo#8606 Co-authored-by: Anthony Shew --- packages/eslint-plugin-turbo/README.md | 55 ++++- .../__fixtures__/workspace/eslint.config.js | 3 + .../eslint-plugin-turbo/__tests__/cwd.test.ts | 9 + .../__tests__/cwdFlat.test.ts | 188 ++++++++++++++++++ .../lib/configs/flat/recommended.ts | 19 ++ .../lib/configs/recommended.ts | 3 +- packages/eslint-plugin-turbo/lib/index.ts | 29 ++- packages/eslint-plugin-turbo/package.json | 2 +- pnpm-lock.yaml | 19 +- 9 files changed, 300 insertions(+), 27 deletions(-) create mode 100644 packages/eslint-plugin-turbo/__fixtures__/workspace/eslint.config.js create mode 100644 packages/eslint-plugin-turbo/__tests__/cwdFlat.test.ts create mode 100644 packages/eslint-plugin-turbo/lib/configs/flat/recommended.ts diff --git a/packages/eslint-plugin-turbo/README.md b/packages/eslint-plugin-turbo/README.md index 83627a1e77d57..21299b643f0f8 100644 --- a/packages/eslint-plugin-turbo/README.md +++ b/packages/eslint-plugin-turbo/README.md @@ -1,6 +1,6 @@ # `eslint-plugin-turbo` -Ease configuration for Turborepo +Easy ESLint configuration for Turborepo ## Installation @@ -16,7 +16,7 @@ npm install eslint --save-dev npm install eslint-plugin-turbo --save-dev ``` -## Usage +## Usage (Legacy `eslintrc*`) Add `turbo` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: @@ -36,7 +36,7 @@ Then configure the rules you want to use under the rules section. } ``` -### Example +## Example (Legacy `eslintrc*`) ```json { @@ -51,3 +51,52 @@ Then configure the rules you want to use under the rules section. } } ``` + +## Usage (Flat Config `eslint.config.js`) + +In ESLint v8, both the legacy system and the new flat config system are supported. In ESLint v9, only the new system will be supported. See the [official ESLint docs](https://eslint.org/docs/latest/use/configure/configuration-files). + +```js +import turbo from "eslint-plugin-turbo"; + +export default [turbo.configs["flat/recommended"]]; +``` + +Otherwise, you may configure the rules you want to use under the rules section. + +```js +import turbo from "eslint-plugin-turbo"; + +export default [ + { + plugins: { + turbo, + }, + rules: { + "turbo/no-undeclared-env-vars": "error", + }, + }, +]; +``` + +## Example (Flat Config `eslint.config.js`) + +```js +import turbo from "eslint-plugin-turbo"; + +export default [ + { + plugins: { + turbo, + }, + rules: { + "turbo/no-undeclared-env-vars": [ + "error", + { + allowList: ["^ENV_[A-Z]+$"], + }, + ], + }, + }, +]; +``` diff --git a/packages/eslint-plugin-turbo/__fixtures__/workspace/eslint.config.js b/packages/eslint-plugin-turbo/__fixtures__/workspace/eslint.config.js new file mode 100644 index 0000000000000..c4460d5e152f6 --- /dev/null +++ b/packages/eslint-plugin-turbo/__fixtures__/workspace/eslint.config.js @@ -0,0 +1,3 @@ +const turbo = require("eslint-plugin-turbo"); + +module.exports = [turbo.configs["flat/recommended"]]; diff --git a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts index e7f32a3a15873..f559711127149 100644 --- a/packages/eslint-plugin-turbo/__tests__/cwd.test.ts +++ b/packages/eslint-plugin-turbo/__tests__/cwd.test.ts @@ -5,6 +5,11 @@ import { parse, stringify } from "json5"; import { setupTestFixtures } from "@turbo/test-utils"; import { describe, it, expect } from "@jest/globals"; +const env: NodeJS.ProcessEnv = { + ...process.env, + ESLINT_USE_FLAT_CONFIG: "false", +}; + describe("eslint settings check", () => { const { useFixture } = setupTestFixtures({ directory: path.join(__dirname, "../"), @@ -17,6 +22,7 @@ describe("eslint settings check", () => { const configString = execSync(`npm exec eslint -- --print-config peer.js`, { cwd, encoding: "utf8", + env, }); const configJson: Record = parse(configString); @@ -76,6 +82,7 @@ describe("eslint settings check", () => { { cwd, encoding: "utf8", + env, } ); const configJson: Record = parse(configString); @@ -144,6 +151,7 @@ describe("eslint cache is busted", () => { execSync(`npm exec eslint -- --format=json child.js`, { cwd, encoding: "utf8", + env, }); } catch (error: unknown) { const outputJson: Record = parse( @@ -172,6 +180,7 @@ describe("eslint cache is busted", () => { const output = execSync(`npm exec eslint -- --format=json child.js`, { cwd, encoding: "utf8", + env, }); const outputJson: Record = parse(output); expect(outputJson).toMatchObject([{ errorCount: 0 }]); diff --git a/packages/eslint-plugin-turbo/__tests__/cwdFlat.test.ts b/packages/eslint-plugin-turbo/__tests__/cwdFlat.test.ts new file mode 100644 index 0000000000000..09e7fbe5f84cc --- /dev/null +++ b/packages/eslint-plugin-turbo/__tests__/cwdFlat.test.ts @@ -0,0 +1,188 @@ +import path from "node:path"; +import { execSync } from "node:child_process"; +import { type Schema } from "@turbo/types"; +import { parse, stringify } from "json5"; +import { setupTestFixtures } from "@turbo/test-utils"; +import { describe, it, expect } from "@jest/globals"; + +const env: NodeJS.ProcessEnv = { + ...process.env, + ESLINT_USE_FLAT_CONFIG: "true", +}; + +describe("flat eslint settings check", () => { + const { useFixture } = setupTestFixtures({ + directory: path.join(__dirname, "../"), + }); + + it("does the right thing for peers", () => { + const { root: cwd } = useFixture({ fixture: "workspace" }); + execSync(`npm install`, { cwd }); + + const configString = execSync(`npm exec eslint -- --print-config peer.js`, { + cwd, + encoding: "utf8", + env, + }); + const configJson: Record = parse(configString); + + expect(configJson.settings).toEqual({ + turbo: { + cacheKey: { + global: { + legacyConfig: [], + env: ["CI", "UNORDERED"], + passThroughEnv: null, + dotEnv: { + filePaths: [".env", "missing.env"], + hashes: { + ".env": "9ad6c5fd4d5bbe7c00e1f2b358ac7ef2aa3521d0", + }, + }, + }, + globalTasks: { + build: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + test: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + lint: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + deploy: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + }, + workspaceTasks: {}, + }, + }, + }); + }); + + it("does the right thing for child dirs", () => { + const { root } = useFixture({ fixture: "workspace" }); + execSync(`npm install`, { cwd: root }); + + const cwd = path.join(root, "child"); + const configString = execSync( + `npm exec eslint -- --print-config child.js`, + { + cwd, + encoding: "utf8", + env, + } + ); + const configJson: Record = parse(configString); + + expect(configJson.settings).toEqual({ + turbo: { + cacheKey: { + global: { + legacyConfig: [], + env: ["CI", "UNORDERED"], + passThroughEnv: null, + dotEnv: { + filePaths: [".env", "missing.env"], + hashes: { + ".env": "9ad6c5fd4d5bbe7c00e1f2b358ac7ef2aa3521d0", + }, + }, + }, + globalTasks: { + build: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + test: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + lint: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + deploy: { + legacyConfig: [], + env: [], + passThroughEnv: null, + dotEnv: null, + }, + }, + workspaceTasks: {}, + }, + }, + }); + }); +}); + +describe("flat eslint cache is busted", () => { + const { useFixture } = setupTestFixtures({ + directory: path.join(__dirname, "../"), + }); + + it("catches a lint error after changing config", () => { + expect.assertions(2); + + // ensure that we populate the cache with a failure. + const { root, readJson, write } = useFixture({ fixture: "workspace" }); + execSync(`npm install`, { cwd: root }); + + const cwd = path.join(root, "child"); + try { + execSync(`npm exec eslint -- --format=json child.js`, { + cwd, + encoding: "utf8", + env, + }); + } catch (error: unknown) { + const outputJson: Record = parse( + (error as { stdout: string }).stdout + ); + expect(outputJson).toMatchObject([ + { + messages: [ + { + message: + "NONEXISTENT is not listed as a dependency in turbo.json", + }, + ], + }, + ]); + } + + // change the configuration + const turboJson = readJson("turbo.json"); + if (turboJson && "globalEnv" in turboJson) { + turboJson.globalEnv = ["CI", "NONEXISTENT"]; + write("turbo.json", stringify(turboJson, null, 2)); + } + + // test that we invalidated the eslint cache + const output = execSync(`npm exec eslint -- --format=json child.js`, { + cwd, + encoding: "utf8", + env, + }); + const outputJson: Record = parse(output); + expect(outputJson).toMatchObject([{ errorCount: 0 }]); + }); +}); diff --git a/packages/eslint-plugin-turbo/lib/configs/flat/recommended.ts b/packages/eslint-plugin-turbo/lib/configs/flat/recommended.ts new file mode 100644 index 0000000000000..c93de95988016 --- /dev/null +++ b/packages/eslint-plugin-turbo/lib/configs/flat/recommended.ts @@ -0,0 +1,19 @@ +import type { Linter } from "eslint"; +import { RULES } from "../../constants"; +import { Project } from "../../utils/calculate-inputs"; + +const project = new Project(process.cwd()); +const cacheKey = project.valid() ? project.key() : Math.random(); + +const config = { + rules: { + [`turbo/${RULES.noUndeclaredEnvVars}`]: "error", + }, + settings: { + turbo: { + cacheKey, + }, + }, +} satisfies Linter.FlatConfig; + +export default config; diff --git a/packages/eslint-plugin-turbo/lib/configs/recommended.ts b/packages/eslint-plugin-turbo/lib/configs/recommended.ts index 9b34d367f286f..fe495e382b6e9 100644 --- a/packages/eslint-plugin-turbo/lib/configs/recommended.ts +++ b/packages/eslint-plugin-turbo/lib/configs/recommended.ts @@ -1,3 +1,4 @@ +import type { Linter } from "eslint"; import { RULES } from "../constants"; import { Project } from "../utils/calculate-inputs"; @@ -16,6 +17,6 @@ const config = { rules: { [`turbo/${RULES.noUndeclaredEnvVars}`]: "error", }, -}; +} satisfies Linter.Config; export default config; diff --git a/packages/eslint-plugin-turbo/lib/index.ts b/packages/eslint-plugin-turbo/lib/index.ts index 44bd9013f327b..2c9418f3405b5 100644 --- a/packages/eslint-plugin-turbo/lib/index.ts +++ b/packages/eslint-plugin-turbo/lib/index.ts @@ -1,13 +1,28 @@ +import type { ESLint } from "eslint"; +import { name, version } from "../package.json"; import { RULES } from "./constants"; import noUndeclaredEnvVars from "./rules/no-undeclared-env-vars"; import recommended from "./configs/recommended"; +import flatRecommended from "./configs/flat/recommended"; -const rules = { - [RULES.noUndeclaredEnvVars]: noUndeclaredEnvVars, -}; +const plugin = { + meta: { name, version }, + rules: { + [RULES.noUndeclaredEnvVars]: noUndeclaredEnvVars, + }, + configs: { + recommended, + "flat/recommended": { + ...flatRecommended, + plugins: { + get turbo(): ESLint.Plugin { + return plugin; + }, + }, + }, + }, +} satisfies ESLint.Plugin; -const configs = { - recommended, -}; +export const { rules, configs } = plugin; -export { rules, configs }; +export default plugin; diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 5e725f61776c4..ee2cbba3b3906 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -41,7 +41,7 @@ "@turbo/tsconfig": "workspace:*", "@turbo/types": "workspace:*", "@turbo/utils": "workspace:*", - "@types/eslint": "^8.4.5", + "@types/eslint": "^8.44.2", "@types/estree": "^1.0.0", "@types/node": "^18.17.2", "jest": "^29.7.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c25a384b0061b..392d77737c3c2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -211,8 +211,8 @@ importers: specifier: workspace:* version: link:../turbo-utils '@types/eslint': - specifier: ^8.4.5 - version: 8.4.6 + specifier: ^8.44.2 + version: 8.44.2 '@types/estree': specifier: ^1.0.0 version: 1.0.0 @@ -2903,13 +2903,6 @@ packages: resolution: {integrity: sha512-uw8eYMIReOwstQ0QKF0sICefSy8cNO/v7gOTiIy9SbwuHyEecJUm7qlgueOO5S1udZ5I/irVydHVwMchgzbKTg==} dev: true - /@types/eslint@8.4.6: - resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==} - dependencies: - '@types/estree': 1.0.0 - '@types/json-schema': 7.0.11 - dev: true - /@types/eslint@8.44.2: resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==} dependencies: @@ -3011,10 +3004,6 @@ packages: resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} dev: true - /@types/json-schema@7.0.12: - resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - dev: true - /@types/json-schema@7.0.15: resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true @@ -3329,7 +3318,7 @@ packages: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 @@ -3349,7 +3338,7 @@ packages: eslint: ^7.0.0 || ^8.0.0 dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) - '@types/json-schema': 7.0.12 + '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.18.1 '@typescript-eslint/types': 6.18.1 From 5d1ecc371da9c6a72e75ff24436d600f1e83b523 Mon Sep 17 00:00:00 2001 From: Anthony Shew Date: Thu, 14 Nov 2024 14:14:53 -0700 Subject: [PATCH 185/218] chore: Update bug issue template. (#9438) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Updating our bug issue template to include `turbo info`, among other assorted changes. ### Testing Instructions 👀 --- .../ISSUE_TEMPLATE/0-turborepo-bug-report.yml | 57 ++++++------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml b/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml index e1af654abf418..b4dbdc827ea13 100644 --- a/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml @@ -1,11 +1,12 @@ name: Turborepo Bug Report -description: Create a bug report for the Turborepo core team +description: Create a bug report labels: ["kind: bug", "needs: triage"] +title: "🐛 " body: - type: markdown attributes: value: | - This template is to report Turborepo bugs. Before opening a new issue, please do a [search](https://github.com/vercel/turborepo/issues) of existing issues and :+1: upvote the existing issue instead. This will result in a quicker resolution. + This template is to report bugs. Before opening a new issue, please do a [search](https://github.com/vercel/turborepo/issues) of existing issues and :+1: upvote the existing issue instead. This will result in a quicker resolution. If you need help with your own project, you can: - Start a discussion in the ["Help" section](https://github.com/vercel/turborepo/discussions/categories/help). @@ -23,34 +24,7 @@ body: attributes: label: Link to code that reproduces this issue description: | - A link to a **public** GitHub repository with a minimal reproduction. Ideally, minimal reproductions should be created using [`npx create-turbo@canary -e with-shell-commands`](https://github.com/vercel/turborepo/tree/main/examples/with-shell-commands) and should include only changes that contribute to the issue. You may also use [`npx create-turbo@canary -e <example-name>`](https://github.com/vercel/turborepo/tree/main/examples) to create a reproduction that includes frameworks if you believe your bug requires a framework to reproduce. - validations: - required: true - - - type: dropdown - id: packageManager - attributes: - multiple: true - label: What package manager are you using / does the bug impact? - description: | - You can quickly check different package managers in your reproduction using `npx turbo/workspaces convert`. - options: - - npm - - pnpm - - Yarn v1 - - Yarn v2/v3/v4 (node_modules linker only) - validations: - required: true - - - type: dropdown - id: os - attributes: - label: What operating system are you using? - options: - - Mac - - Windows - - Linux - - Other + A link to a **public** GitHub repository with a minimal reproduction. Ideally, minimal reproductions should be created using [`npx create-turbo@canary -e with-shell-commands`](https://github.com/vercel/turborepo/tree/main/examples/with-shell-commands) and should include only changes that contribute to the issue. You may also use [`npx create-turbo@canary -e <example-name>`](https://github.com/vercel/turborepo/tree/main/examples) to create a reproduction that includes frameworks if you believe your bug requires a specific framework to reproduce. validations: required: true @@ -64,17 +38,24 @@ body: - type: textarea attributes: - label: Describe the Bug + label: Enviroment information + render: block description: | - A clear and concise description of the bug. + Run the command `turbo info` and paste its output here. Please review it in case there is sensitive information you don't want to share. + + - type: textarea + attributes: + label: Expected behavior + description: | + A clear and concise description of what you expected to happen. validations: required: true - type: textarea attributes: - label: Expected Behavior + label: Actual behavior description: | - A clear and concise description of what you expected to happen. + A clear and concise description of the bug. validations: required: true @@ -82,22 +63,20 @@ body: attributes: label: To Reproduce description: | - Steps to reproduce the unexpected behavior. Please provide a clear code snippets that always reproduces the issue or a GitHub repository. Screenshots can be provided in the issue body below. + Steps to reproduce the unexpected behavior. Please provide clear code snippets that always reproduces the issue or a GitHub repository. Screenshots can be provided in "Additional context" below. validations: required: true - type: markdown attributes: value: | - Another way you can help the maintainers is to pinpoint the `canary` version of `turbo` that introduced the issue. Check out our [releases](https://github.com/vercel/turborepo/releases), and try to find the first `canary` release that introduced the issue. This will help us narrow down the scope of the issue, and possibly point to the PR/code change that introduced it. You can install a specific version of `turbo` by running `npm install turbo@<version>`. + Another way you can help the maintainers is to pinpoint the `canary` version of `turbo` that introduced the issue. Check out our [releases](https://github.com/vercel/turborepo/releases), and try to find the first `canary` release that introduced the issue. While not required, this will help us narrow down the scope of the issue, and possibly point to the PR/code change that introduced it. You can install a specific version of `turbo` by running `npm install turbo@<version>`. - type: textarea attributes: label: Additional context description: | Any extra information that might help us investigate. For example, where are you deploying your application (Vercel, Docker, other platform)? Is it only reproducible on that platform, or locally too? Is the issue only happening in a specific browser? etc. placeholder: | - I tested my reproduction against different canary releases, and the first one that introduced the bug was "1.10.4-canary.2", since reverting to "1.10.4-canary.1" works. - + I tested my reproduction against different canary releases, and the first one that introduced the bug was "2.2.4-canary.2", since reverting to "2.3.4-canary.1" works. or - I am using GitHub Actions but running my tasks locally does not have the same issue. From 5108eab4a3309a0e0912876359fed5671dc712c8 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Thu, 14 Nov 2024 14:23:35 -0700 Subject: [PATCH 186/218] chore: Further updates for issue templates. (#9439) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Noticed a couple more pedantic things after #9438. ### Testing Instructions 👀 --- .github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml | 5 +++-- .github/ISSUE_TEMPLATE/1-docs.yml | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml b/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml index b4dbdc827ea13..d8688602fa0ef 100644 --- a/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml +++ b/.github/ISSUE_TEMPLATE/0-turborepo-bug-report.yml @@ -1,7 +1,8 @@ -name: Turborepo Bug Report +name: Turborepo bug report description: Create a bug report labels: ["kind: bug", "needs: triage"] -title: "🐛 <TITLE>" +title: "🐛 Bug: " + body: - type: markdown attributes: diff --git a/.github/ISSUE_TEMPLATE/1-docs.yml b/.github/ISSUE_TEMPLATE/1-docs.yml index 45731a7e1a05f..3d748ff801f70 100644 --- a/.github/ISSUE_TEMPLATE/1-docs.yml +++ b/.github/ISSUE_TEMPLATE/1-docs.yml @@ -1,6 +1,6 @@ name: "Documentation update or improvement" description: A request to update or improve documentation -title: "Docs: " +title: "📚 Docs: " labels: - "template: documentation" body: From ab1596cf3f6d8550fbd570198cf667eb6acac91f Mon Sep 17 00:00:00 2001 From: Kiril Videlov <krlvi@users.noreply.github.com> Date: Thu, 14 Nov 2024 22:46:07 +0100 Subject: [PATCH 187/218] Fix(filewatcher): handle removed directories #8800 (#9406) --- crates/turborepo-filewatch/src/lib.rs | 14 ++++++++++++-- crates/turborepo-lib/src/daemon/server.rs | 2 +- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-filewatch/src/lib.rs b/crates/turborepo-filewatch/src/lib.rs index 29311d7ab79fb..24da7a61a25e4 100644 --- a/crates/turborepo-filewatch/src/lib.rs +++ b/crates/turborepo-filewatch/src/lib.rs @@ -271,8 +271,18 @@ async fn watch_events( if event.kind == EventKind::Create(CreateKind::Folder) { for new_path in &event.paths { if let Err(err) = manually_add_recursive_watches(new_path, &mut watcher, Some(&broadcast_sender)) { - warn!("encountered error watching filesystem {}", err); - break 'outer; + match err { + WatchError::WalkDir(err) => { + // Likely the path no longer exists + debug!("encountered error watching filesystem {}", err); + continue; + }, + _ => { + warn!("encountered error watching filesystem {}", err); + break 'outer; + } + + } } } } diff --git a/crates/turborepo-lib/src/daemon/server.rs b/crates/turborepo-lib/src/daemon/server.rs index 5d8465d49eed0..923d31a797592 100644 --- a/crates/turborepo-lib/src/daemon/server.rs +++ b/crates/turborepo-lib/src/daemon/server.rs @@ -604,7 +604,7 @@ impl proto::turbod_server::Turbod for TurboGrpcServiceInner { .package_changes() .await; - let (tx, rx) = mpsc::channel(1024); + let (tx, rx) = mpsc::channel(4096); tx.send(Ok(proto::PackageChangeEvent { event: Some(proto::package_change_event::Event::RediscoverPackages( From a84fb1c7eefde34bef383a2cf13acda4997919c8 Mon Sep 17 00:00:00 2001 From: Henry Bley-Vroman <bley.vroman@gmail.com> Date: Thu, 14 Nov 2024 16:54:20 -1000 Subject: [PATCH 188/218] publishing-libraries docs: Changesets configuration [#9324] (#9325) ### Description - Fixes #9324 The minimum changed need to make the recommended publishing script work is to set Changesets' `commit` option[^1] to true. - Also adds a note about how to publish public packages. Changesets' default configuration is for private packages. ### Testing Instructions 1. Follow https://turbo.build/repo/docs/guides/publishing-libraries. 2. Confirm that the `publish-packages` script does not work to publish packages. 3. Make this PR's changes. 4. Confirm that the script now works. [^1]: https://github.com/changesets/changesets/blob/7323704dff6e76f488370db384579b86c95c866f/docs/config-file-options.md?plain=1#L19 --------- Co-authored-by: Anthony Shew <anthony.shew@vercel.com> --- .../repo-docs/guides/publishing-libraries.mdx | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/repo-docs/guides/publishing-libraries.mdx b/docs/repo-docs/guides/publishing-libraries.mdx index 7e4f631dad0e0..518c013795ec1 100644 --- a/docs/repo-docs/guides/publishing-libraries.mdx +++ b/docs/repo-docs/guides/publishing-libraries.mdx @@ -156,7 +156,17 @@ changeset publish Linking your publishing flow into Turborepo can make organizing your deploy a lot simpler and faster. -Our recommendation is to add a `publish-packages` script into your root `package.json`: +Our recommendation is to configure Changesets to automatically commit `changeset version`'s changes + +```json title="./changeset/config.json" +{ + // … + "commit": true, + // … +} +``` + +and add a `publish-packages` script into your root `package.json`: ```json title="./package.json" { @@ -168,6 +178,16 @@ Our recommendation is to add a `publish-packages` script into your root `package } ``` +If your packages are public, set Changeset's `access` to `public`: + +```json title="./changeset/config.json" +{ + // … + "access": "public", + // … +} +``` + <Callout> We recommend `publish-packages` so that it doesn't conflict with npm's built-in `publish` script. From 825b6f1deb6aa80d7cdad7dc7d14d514249d8385 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Fri, 15 Nov 2024 07:28:32 -0700 Subject: [PATCH 189/218] chore: Remove obsolete GitHub labels. (#9442) ### Description We used to need these labels when Turbopack was in this repository as well but its not anymore. No need for the cruft! --- .github/turbo-orchestrator.yml | 11 +---------- .github/turborepo-release.yml | 1 - 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/.github/turbo-orchestrator.yml b/.github/turbo-orchestrator.yml index 05e5bf2d93240..a3c5ef16f45c5 100644 --- a/.github/turbo-orchestrator.yml +++ b/.github/turbo-orchestrator.yml @@ -30,16 +30,7 @@ labeler: labels: - # owned-by - - label: "owned-by: turborepo" - when: - isAnyFileOwnedByMatch: '@vercel\/turbo-oss' - - - label: "created-by: turborepo" - when: - isPRAuthorMatch: "^(anthonyshew|dimitropoulos|tknickman|chris-olszewski|NicholasLYang)$" - - # needs: triage when not any of the turbopack or turborepo team + # needs: triage when not any of the turborepo team - label: "needs: triage" when: isNotPRAuthorMatch: "^(padmaia|anthonyshew|dimitropoulos|tknickman|chris-olszewski|NicholasLYang)$" diff --git a/.github/turborepo-release.yml b/.github/turborepo-release.yml index c796e5107b333..1b4a25a6987e4 100644 --- a/.github/turborepo-release.yml +++ b/.github/turborepo-release.yml @@ -3,7 +3,6 @@ changelog: exclude: labels: - - "owned-by: turbopack" - "area: ci" - "release: turborepo" categories: From 39f94e9af2e51504fa268c92011a96fa04f14190 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Fri, 15 Nov 2024 08:15:28 -0700 Subject: [PATCH 190/218] examples: Update `basic` example to Next.js 15. (#9440) ### Description As the title says, updating to Next.js 15 in `basic` so `create-turbo` gives people the latest and greatest. I've also taken the time to: - Make the content of the applications Turborepo - Added a `check-types` task for folks who are interested in running TypeScript checks. ### Testing Instructions Our examples CI should make sure things are still building correctly. Would appreciate if someone could open it up in their editor and see if they get any squiggly lines, as well! --- examples/basic/apps/docs/app/globals.css | 11 + examples/basic/apps/docs/app/page.tsx | 51 +- examples/basic/apps/docs/next-env.d.ts | 2 +- examples/basic/apps/docs/package.json | 17 +- .../basic/apps/docs/public/turborepo-dark.svg | 19 + .../apps/docs/public/turborepo-light.svg | 19 + examples/basic/apps/web/app/globals.css | 11 + examples/basic/apps/web/app/page.tsx | 51 +- examples/basic/apps/web/next-env.d.ts | 2 +- examples/basic/apps/web/package.json | 17 +- .../basic/apps/web/public/turborepo-dark.svg | 19 + .../basic/apps/web/public/turborepo-light.svg | 19 + examples/basic/package.json | 2 +- .../packages/eslint-config/react-internal.js | 1 - examples/basic/packages/ui/package.json | 10 +- examples/basic/packages/ui/src/card.tsx | 2 + examples/basic/packages/ui/src/code.tsx | 2 + examples/basic/pnpm-lock.yaml | 6314 ++++++++++------- examples/basic/turbo.json | 3 + 19 files changed, 3774 insertions(+), 2798 deletions(-) create mode 100644 examples/basic/apps/docs/public/turborepo-dark.svg create mode 100644 examples/basic/apps/docs/public/turborepo-light.svg create mode 100644 examples/basic/apps/web/public/turborepo-dark.svg create mode 100644 examples/basic/apps/web/public/turborepo-light.svg diff --git a/examples/basic/apps/docs/app/globals.css b/examples/basic/apps/docs/app/globals.css index 9147fcd3e6987..6af7ecbbb8656 100644 --- a/examples/basic/apps/docs/app/globals.css +++ b/examples/basic/apps/docs/app/globals.css @@ -32,8 +32,19 @@ a { text-decoration: none; } +.imgDark { + display: none; +} + @media (prefers-color-scheme: dark) { html { color-scheme: dark; } + + .imgLight { + display: none; + } + .imgDark { + display: unset; + } } diff --git a/examples/basic/apps/docs/app/page.tsx b/examples/basic/apps/docs/app/page.tsx index 0284bae645816..828709ac17187 100644 --- a/examples/basic/apps/docs/app/page.tsx +++ b/examples/basic/apps/docs/app/page.tsx @@ -1,22 +1,39 @@ -import Image from "next/image"; +import Image, { type ImageProps } from "next/image"; import { Button } from "@repo/ui/button"; import styles from "./page.module.css"; +type Props = Omit<ImageProps, "src"> & { + srcLight: string; + srcDark: string; +}; + +const ThemeImage = (props: Props) => { + const { srcLight, srcDark, ...rest } = props; + + return ( + <> + <Image {...rest} src={srcLight} className="imgLight" /> + <Image {...rest} src={srcDark} className="imgDark" /> + </> + ); +}; + export default function Home() { return ( <div className={styles.page}> <main className={styles.main}> - <Image + <ThemeImage className={styles.logo} - src="/next.svg" - alt="Next.js logo" + srcLight="turborepo-dark.svg" + srcDark="turborepo-light.svg" + alt="Turborepo logo" width={180} height={38} priority /> <ol> <li> - Get started by editing <code>app/page.tsx</code> + Get started by editing <code>apps/docs/app/page.tsx</code> </li> <li>Save and see your changes instantly.</li> </ol> @@ -24,7 +41,7 @@ export default function Home() { <div className={styles.ctas}> <a className={styles.primary} - href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://vercel.com/new/clone?demo-description=Learn+to+implement+a+monorepo+with+a+two+Next.js+sites+that+has+installed+three+local+packages.&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F4K8ZISWAzJ8X1504ca0zmC%2F0b21a1c6246add355e55816278ef54bc%2FBasic.png&demo-title=Monorepo+with+Turborepo&demo-url=https%3A%2F%2Fexamples-basic-web.vercel.sh%2F&from=templates&project-name=Monorepo+with+Turborepo&repository-name=monorepo-turborepo&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fturborepo%2Ftree%2Fmain%2Fexamples%2Fbasic&root-directory=apps%2Fdocs&skippable-integrations=1&teamSlug=vercel&utm_source=create-turbo" target="_blank" rel="noopener noreferrer" > @@ -38,7 +55,7 @@ export default function Home() { Deploy now </a> <a - href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://turbo.build/repo/docs?utm_source" target="_blank" rel="noopener noreferrer" className={styles.secondary} @@ -52,21 +69,7 @@ export default function Home() { </main> <footer className={styles.footer}> <a - href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" - target="_blank" - rel="noopener noreferrer" - > - <Image - aria-hidden - src="/file-text.svg" - alt="File icon" - width={16} - height={16} - /> - Learn - </a> - <a - href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://vercel.com/templates?search=turborepo&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" target="_blank" rel="noopener noreferrer" > @@ -80,7 +83,7 @@ export default function Home() { Examples </a> <a - href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://turbo.build?utm_source=create-turbo" target="_blank" rel="noopener noreferrer" > @@ -91,7 +94,7 @@ export default function Home() { width={16} height={16} /> - Go to nextjs.org → + Go to turbo.build → </a> </footer> </div> diff --git a/examples/basic/apps/docs/next-env.d.ts b/examples/basic/apps/docs/next-env.d.ts index 4f11a03dc6cc3..40c3d68096c27 100644 --- a/examples/basic/apps/docs/next-env.d.ts +++ b/examples/basic/apps/docs/next-env.d.ts @@ -2,4 +2,4 @@ /// <reference types="next/image-types/global" /> // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/basic/apps/docs/package.json b/examples/basic/apps/docs/package.json index cdef16b546eac..cb60bd22bbf62 100644 --- a/examples/basic/apps/docs/package.json +++ b/examples/basic/apps/docs/package.json @@ -3,25 +3,26 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbo --port 3001", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "check-types": "tsc --noEmit" }, "dependencies": { "@repo/ui": "workspace:*", - "next": "14.2.6", - "react": "18.3.1", - "react-dom": "18.3.1" + "next": "15.0.3", + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "eslint": "^8", - "eslint-config-next": "14.2.6", + "eslint-config-next": "15.0.3", "typescript": "5.5.4" } } diff --git a/examples/basic/apps/docs/public/turborepo-dark.svg b/examples/basic/apps/docs/public/turborepo-dark.svg new file mode 100644 index 0000000000000..dae38fed54974 --- /dev/null +++ b/examples/basic/apps/docs/public/turborepo-dark.svg @@ -0,0 +1,19 @@ +<svg width="473" height="76" viewBox="0 0 473 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M130.998 30.6565V22.3773H91.0977V30.6565H106.16V58.1875H115.935V30.6565H130.998Z" fill="black"/> +<path d="M153.542 58.7362C165.811 58.7362 172.544 52.5018 172.544 42.2275V22.3773H162.768V41.2799C162.768 47.0155 159.776 50.2574 153.542 50.2574C147.307 50.2574 144.315 47.0155 144.315 41.2799V22.3773H134.539V42.2275C134.539 52.5018 141.272 58.7362 153.542 58.7362Z" fill="black"/> +<path d="M187.508 46.3173H197.234L204.914 58.1875H216.136L207.458 45.2699C212.346 43.5243 215.338 39.634 215.338 34.3473C215.338 26.6665 209.603 22.3773 200.874 22.3773H177.732V58.1875H187.508V46.3173ZM187.508 38.5867V30.5568H200.376C203.817 30.5568 205.712 32.053 205.712 34.5967C205.712 36.9907 203.817 38.5867 200.376 38.5867H187.508Z" fill="black"/> +<path d="M219.887 58.1875H245.472C253.452 58.1875 258.041 54.397 258.041 48.0629C258.041 43.8235 255.348 40.9308 252.156 39.634C254.35 38.5867 257.043 36.0929 257.043 32.1528C257.043 25.8187 252.555 22.3773 244.625 22.3773H219.887V58.1875ZM229.263 36.3922V30.3074H243.627C246.32 30.3074 247.817 31.3548 247.817 33.3498C247.817 35.3448 246.32 36.3922 243.627 36.3922H229.263ZM229.263 43.7238H244.525C247.168 43.7238 248.615 45.0205 248.615 46.9657C248.615 48.9108 247.168 50.2075 244.525 50.2075H229.263V43.7238Z" fill="black"/> +<path d="M281.942 21.7788C269.423 21.7788 260.396 29.6092 260.396 40.2824C260.396 50.9557 269.423 58.786 281.942 58.786C294.461 58.786 303.438 50.9557 303.438 40.2824C303.438 29.6092 294.461 21.7788 281.942 21.7788ZM281.942 30.2575C288.525 30.2575 293.463 34.1478 293.463 40.2824C293.463 46.417 288.525 50.3073 281.942 50.3073C275.359 50.3073 270.421 46.417 270.421 40.2824C270.421 34.1478 275.359 30.2575 281.942 30.2575Z" fill="black"/> +<path d="M317.526 46.3173H327.251L334.932 58.1875H346.154L337.476 45.2699C342.364 43.5243 345.356 39.634 345.356 34.3473C345.356 26.6665 339.62 22.3773 330.892 22.3773H307.75V58.1875H317.526V46.3173ZM317.526 38.5867V30.5568H330.394C333.835 30.5568 335.73 32.053 335.73 34.5967C335.73 36.9907 333.835 38.5867 330.394 38.5867H317.526Z" fill="black"/> +<path d="M349.904 22.3773V58.1875H384.717V49.9083H359.48V44.0729H381.874V35.9932H359.48V30.6565H384.717V22.3773H349.904Z" fill="black"/> +<path d="M399.204 46.7662H412.221C420.95 46.7662 426.685 42.5767 426.685 34.5967C426.685 26.5668 420.95 22.3773 412.221 22.3773H389.428V58.1875H399.204V46.7662ZM399.204 38.6365V30.5568H411.673C415.164 30.5568 417.059 32.053 417.059 34.5967C417.059 37.0904 415.164 38.6365 411.673 38.6365H399.204Z" fill="black"/> +<path d="M450.948 21.7788C438.43 21.7788 429.402 29.6092 429.402 40.2824C429.402 50.9557 438.43 58.786 450.948 58.786C463.467 58.786 472.444 50.9557 472.444 40.2824C472.444 29.6092 463.467 21.7788 450.948 21.7788ZM450.948 30.2575C457.532 30.2575 462.469 34.1478 462.469 40.2824C462.469 46.417 457.532 50.3073 450.948 50.3073C444.365 50.3073 439.427 46.417 439.427 40.2824C439.427 34.1478 444.365 30.2575 450.948 30.2575Z" fill="black"/> +<path d="M38.5017 18.0956C27.2499 18.0956 18.0957 27.2498 18.0957 38.5016C18.0957 49.7534 27.2499 58.9076 38.5017 58.9076C49.7535 58.9076 58.9077 49.7534 58.9077 38.5016C58.9077 27.2498 49.7535 18.0956 38.5017 18.0956ZM38.5017 49.0618C32.6687 49.0618 27.9415 44.3346 27.9415 38.5016C27.9415 32.6686 32.6687 27.9414 38.5017 27.9414C44.3347 27.9414 49.0619 32.6686 49.0619 38.5016C49.0619 44.3346 44.3347 49.0618 38.5017 49.0618Z" fill="black"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M40.2115 14.744V7.125C56.7719 8.0104 69.9275 21.7208 69.9275 38.5016C69.9275 55.2824 56.7719 68.989 40.2115 69.8782V62.2592C52.5539 61.3776 62.3275 51.0644 62.3275 38.5016C62.3275 25.9388 52.5539 15.6256 40.2115 14.744ZM20.5048 54.0815C17.233 50.3043 15.124 45.4935 14.7478 40.2115H7.125C7.5202 47.6025 10.4766 54.3095 15.1088 59.4737L20.501 54.0815H20.5048ZM36.7916 69.8782V62.2592C31.5058 61.883 26.695 59.7778 22.9178 56.5022L17.5256 61.8944C22.6936 66.5304 29.4006 69.483 36.7878 69.8782H36.7916Z" fill="url(#paint0_linear_2028_278)"/> +<defs> +<linearGradient id="paint0_linear_2028_278" x1="41.443" y1="11.5372" x2="10.5567" y2="42.4236" gradientUnits="userSpaceOnUse"> +<stop stop-color="#0096FF"/> +<stop offset="1" stop-color="#FF1E56"/> +</linearGradient> +</defs> +</svg> diff --git a/examples/basic/apps/docs/public/turborepo-light.svg b/examples/basic/apps/docs/public/turborepo-light.svg new file mode 100644 index 0000000000000..ddea915815874 --- /dev/null +++ b/examples/basic/apps/docs/public/turborepo-light.svg @@ -0,0 +1,19 @@ +<svg width="473" height="76" viewBox="0 0 473 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M130.998 30.6566V22.3773H91.0977V30.6566H106.16V58.1876H115.935V30.6566H130.998Z" fill="white"/> +<path d="M153.542 58.7362C165.811 58.7362 172.544 52.5018 172.544 42.2276V22.3773H162.768V41.2799C162.768 47.0156 159.776 50.2574 153.542 50.2574C147.307 50.2574 144.315 47.0156 144.315 41.2799V22.3773H134.539V42.2276C134.539 52.5018 141.272 58.7362 153.542 58.7362Z" fill="white"/> +<path d="M187.508 46.3173H197.234L204.914 58.1876H216.136L207.458 45.2699C212.346 43.5243 215.338 39.6341 215.338 34.3473C215.338 26.6666 209.603 22.3773 200.874 22.3773H177.732V58.1876H187.508V46.3173ZM187.508 38.5867V30.5568H200.376C203.817 30.5568 205.712 32.0531 205.712 34.5967C205.712 36.9907 203.817 38.5867 200.376 38.5867H187.508Z" fill="white"/> +<path d="M219.887 58.1876H245.472C253.452 58.1876 258.041 54.3971 258.041 48.0629C258.041 43.8236 255.348 40.9308 252.156 39.6341C254.35 38.5867 257.043 36.0929 257.043 32.1528C257.043 25.8187 252.555 22.3773 244.625 22.3773H219.887V58.1876ZM229.263 36.3922V30.3074H243.627C246.32 30.3074 247.817 31.3548 247.817 33.3498C247.817 35.3448 246.32 36.3922 243.627 36.3922H229.263ZM229.263 43.7238H244.525C247.168 43.7238 248.615 45.0206 248.615 46.9657C248.615 48.9108 247.168 50.2076 244.525 50.2076H229.263V43.7238Z" fill="white"/> +<path d="M281.942 21.7788C269.423 21.7788 260.396 29.6092 260.396 40.2824C260.396 50.9557 269.423 58.7861 281.942 58.7861C294.461 58.7861 303.438 50.9557 303.438 40.2824C303.438 29.6092 294.461 21.7788 281.942 21.7788ZM281.942 30.2576C288.525 30.2576 293.463 34.1478 293.463 40.2824C293.463 46.4171 288.525 50.3073 281.942 50.3073C275.359 50.3073 270.421 46.4171 270.421 40.2824C270.421 34.1478 275.359 30.2576 281.942 30.2576Z" fill="white"/> +<path d="M317.526 46.3173H327.251L334.932 58.1876H346.154L337.476 45.2699C342.364 43.5243 345.356 39.6341 345.356 34.3473C345.356 26.6666 339.62 22.3773 330.892 22.3773H307.75V58.1876H317.526V46.3173ZM317.526 38.5867V30.5568H330.394C333.835 30.5568 335.73 32.0531 335.73 34.5967C335.73 36.9907 333.835 38.5867 330.394 38.5867H317.526Z" fill="white"/> +<path d="M349.904 22.3773V58.1876H384.717V49.9083H359.48V44.0729H381.874V35.9932H359.48V30.6566H384.717V22.3773H349.904Z" fill="white"/> +<path d="M399.204 46.7662H412.221C420.95 46.7662 426.685 42.5767 426.685 34.5967C426.685 26.5668 420.95 22.3773 412.221 22.3773H389.428V58.1876H399.204V46.7662ZM399.204 38.6366V30.5568H411.673C415.164 30.5568 417.059 32.0531 417.059 34.5967C417.059 37.0904 415.164 38.6366 411.673 38.6366H399.204Z" fill="white"/> +<path d="M450.948 21.7788C438.43 21.7788 429.402 29.6092 429.402 40.2824C429.402 50.9557 438.43 58.7861 450.948 58.7861C463.467 58.7861 472.444 50.9557 472.444 40.2824C472.444 29.6092 463.467 21.7788 450.948 21.7788ZM450.948 30.2576C457.532 30.2576 462.469 34.1478 462.469 40.2824C462.469 46.4171 457.532 50.3073 450.948 50.3073C444.365 50.3073 439.427 46.4171 439.427 40.2824C439.427 34.1478 444.365 30.2576 450.948 30.2576Z" fill="white"/> +<path d="M38.5017 18.0956C27.2499 18.0956 18.0957 27.2498 18.0957 38.5016C18.0957 49.7534 27.2499 58.9076 38.5017 58.9076C49.7535 58.9076 58.9077 49.7534 58.9077 38.5016C58.9077 27.2498 49.7535 18.0956 38.5017 18.0956ZM38.5017 49.0618C32.6687 49.0618 27.9415 44.3346 27.9415 38.5016C27.9415 32.6686 32.6687 27.9414 38.5017 27.9414C44.3347 27.9414 49.0619 32.6686 49.0619 38.5016C49.0619 44.3346 44.3347 49.0618 38.5017 49.0618Z" fill="white"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M40.2115 14.744V7.125C56.7719 8.0104 69.9275 21.7208 69.9275 38.5016C69.9275 55.2824 56.7719 68.989 40.2115 69.8782V62.2592C52.5539 61.3776 62.3275 51.0644 62.3275 38.5016C62.3275 25.9388 52.5539 15.6256 40.2115 14.744ZM20.5048 54.0815C17.233 50.3043 15.124 45.4935 14.7478 40.2115H7.125C7.5202 47.6025 10.4766 54.3095 15.1088 59.4737L20.501 54.0815H20.5048ZM36.7916 69.8782V62.2592C31.5058 61.883 26.695 59.7778 22.9178 56.5022L17.5256 61.8944C22.6936 66.5304 29.4006 69.483 36.7878 69.8782H36.7916Z" fill="url(#paint0_linear_2028_477)"/> +<defs> +<linearGradient id="paint0_linear_2028_477" x1="41.443" y1="11.5372" x2="10.5567" y2="42.4236" gradientUnits="userSpaceOnUse"> +<stop stop-color="#0096FF"/> +<stop offset="1" stop-color="#FF1E56"/> +</linearGradient> +</defs> +</svg> diff --git a/examples/basic/apps/web/app/globals.css b/examples/basic/apps/web/app/globals.css index 9147fcd3e6987..6af7ecbbb8656 100644 --- a/examples/basic/apps/web/app/globals.css +++ b/examples/basic/apps/web/app/globals.css @@ -32,8 +32,19 @@ a { text-decoration: none; } +.imgDark { + display: none; +} + @media (prefers-color-scheme: dark) { html { color-scheme: dark; } + + .imgLight { + display: none; + } + .imgDark { + display: unset; + } } diff --git a/examples/basic/apps/web/app/page.tsx b/examples/basic/apps/web/app/page.tsx index b5c042cd357a8..b509205e46944 100644 --- a/examples/basic/apps/web/app/page.tsx +++ b/examples/basic/apps/web/app/page.tsx @@ -1,22 +1,39 @@ -import Image from "next/image"; +import Image, { type ImageProps } from "next/image"; import { Button } from "@repo/ui/button"; import styles from "./page.module.css"; +type Props = Omit<ImageProps, "src"> & { + srcLight: string; + srcDark: string; +}; + +const ThemeImage = (props: Props) => { + const { srcLight, srcDark, ...rest } = props; + + return ( + <> + <Image {...rest} src={srcLight} className="imgLight" /> + <Image {...rest} src={srcDark} className="imgDark" /> + </> + ); +}; + export default function Home() { return ( <div className={styles.page}> <main className={styles.main}> - <Image + <ThemeImage className={styles.logo} - src="/next.svg" - alt="Next.js logo" + srcLight="turborepo-dark.svg" + srcDark="turborepo-light.svg" + alt="Turborepo logo" width={180} height={38} priority /> <ol> <li> - Get started by editing <code>app/page.tsx</code> + Get started by editing <code>apps/web/app/page.tsx</code> </li> <li>Save and see your changes instantly.</li> </ol> @@ -24,7 +41,7 @@ export default function Home() { <div className={styles.ctas}> <a className={styles.primary} - href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://vercel.com/new/clone?demo-description=Learn+to+implement+a+monorepo+with+a+two+Next.js+sites+that+has+installed+three+local+packages.&demo-image=%2F%2Fimages.ctfassets.net%2Fe5382hct74si%2F4K8ZISWAzJ8X1504ca0zmC%2F0b21a1c6246add355e55816278ef54bc%2FBasic.png&demo-title=Monorepo+with+Turborepo&demo-url=https%3A%2F%2Fexamples-basic-web.vercel.sh%2F&from=templates&project-name=Monorepo+with+Turborepo&repository-name=monorepo-turborepo&repository-url=https%3A%2F%2Fgithub.com%2Fvercel%2Fturborepo%2Ftree%2Fmain%2Fexamples%2Fbasic&root-directory=apps%2Fdocs&skippable-integrations=1&teamSlug=vercel&utm_source=create-turbo" target="_blank" rel="noopener noreferrer" > @@ -38,7 +55,7 @@ export default function Home() { Deploy now </a> <a - href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://turbo.build/repo/docs?utm_source" target="_blank" rel="noopener noreferrer" className={styles.secondary} @@ -52,21 +69,7 @@ export default function Home() { </main> <footer className={styles.footer}> <a - href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" - target="_blank" - rel="noopener noreferrer" - > - <Image - aria-hidden - src="/file-text.svg" - alt="File icon" - width={16} - height={16} - /> - Learn - </a> - <a - href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://vercel.com/templates?search=turborepo&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" target="_blank" rel="noopener noreferrer" > @@ -80,7 +83,7 @@ export default function Home() { Examples </a> <a - href="https://nextjs.org?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app" + href="https://turbo.build?utm_source=create-turbo" target="_blank" rel="noopener noreferrer" > @@ -91,7 +94,7 @@ export default function Home() { width={16} height={16} /> - Go to nextjs.org → + Go to turbo.build → </a> </footer> </div> diff --git a/examples/basic/apps/web/next-env.d.ts b/examples/basic/apps/web/next-env.d.ts index 4f11a03dc6cc3..40c3d68096c27 100644 --- a/examples/basic/apps/web/next-env.d.ts +++ b/examples/basic/apps/web/next-env.d.ts @@ -2,4 +2,4 @@ /// <reference types="next/image-types/global" /> // NOTE: This file should not be edited -// see https://nextjs.org/docs/basic-features/typescript for more information. +// see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information. diff --git a/examples/basic/apps/web/package.json b/examples/basic/apps/web/package.json index 3a52cac608d01..be9340e3daa3b 100644 --- a/examples/basic/apps/web/package.json +++ b/examples/basic/apps/web/package.json @@ -3,25 +3,26 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "next dev --turbo", + "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "check-types": "tsc --noEmit" }, "dependencies": { "@repo/ui": "workspace:*", - "next": "14.2.6", - "react": "18.3.1", - "react-dom": "18.3.1" + "next": "15.0.3", + "react": "19.0.0-rc-66855b96-20241106", + "react-dom": "19.0.0-rc-66855b96-20241106" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/node": "^20", - "@types/react": "^18", - "@types/react-dom": "^18", + "@types/react": "18.3.1", + "@types/react-dom": "18.3.0", "eslint": "^8", - "eslint-config-next": "14.2.6", + "eslint-config-next": "15.0.3", "typescript": "5.5.4" } } diff --git a/examples/basic/apps/web/public/turborepo-dark.svg b/examples/basic/apps/web/public/turborepo-dark.svg new file mode 100644 index 0000000000000..dae38fed54974 --- /dev/null +++ b/examples/basic/apps/web/public/turborepo-dark.svg @@ -0,0 +1,19 @@ +<svg width="473" height="76" viewBox="0 0 473 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M130.998 30.6565V22.3773H91.0977V30.6565H106.16V58.1875H115.935V30.6565H130.998Z" fill="black"/> +<path d="M153.542 58.7362C165.811 58.7362 172.544 52.5018 172.544 42.2275V22.3773H162.768V41.2799C162.768 47.0155 159.776 50.2574 153.542 50.2574C147.307 50.2574 144.315 47.0155 144.315 41.2799V22.3773H134.539V42.2275C134.539 52.5018 141.272 58.7362 153.542 58.7362Z" fill="black"/> +<path d="M187.508 46.3173H197.234L204.914 58.1875H216.136L207.458 45.2699C212.346 43.5243 215.338 39.634 215.338 34.3473C215.338 26.6665 209.603 22.3773 200.874 22.3773H177.732V58.1875H187.508V46.3173ZM187.508 38.5867V30.5568H200.376C203.817 30.5568 205.712 32.053 205.712 34.5967C205.712 36.9907 203.817 38.5867 200.376 38.5867H187.508Z" fill="black"/> +<path d="M219.887 58.1875H245.472C253.452 58.1875 258.041 54.397 258.041 48.0629C258.041 43.8235 255.348 40.9308 252.156 39.634C254.35 38.5867 257.043 36.0929 257.043 32.1528C257.043 25.8187 252.555 22.3773 244.625 22.3773H219.887V58.1875ZM229.263 36.3922V30.3074H243.627C246.32 30.3074 247.817 31.3548 247.817 33.3498C247.817 35.3448 246.32 36.3922 243.627 36.3922H229.263ZM229.263 43.7238H244.525C247.168 43.7238 248.615 45.0205 248.615 46.9657C248.615 48.9108 247.168 50.2075 244.525 50.2075H229.263V43.7238Z" fill="black"/> +<path d="M281.942 21.7788C269.423 21.7788 260.396 29.6092 260.396 40.2824C260.396 50.9557 269.423 58.786 281.942 58.786C294.461 58.786 303.438 50.9557 303.438 40.2824C303.438 29.6092 294.461 21.7788 281.942 21.7788ZM281.942 30.2575C288.525 30.2575 293.463 34.1478 293.463 40.2824C293.463 46.417 288.525 50.3073 281.942 50.3073C275.359 50.3073 270.421 46.417 270.421 40.2824C270.421 34.1478 275.359 30.2575 281.942 30.2575Z" fill="black"/> +<path d="M317.526 46.3173H327.251L334.932 58.1875H346.154L337.476 45.2699C342.364 43.5243 345.356 39.634 345.356 34.3473C345.356 26.6665 339.62 22.3773 330.892 22.3773H307.75V58.1875H317.526V46.3173ZM317.526 38.5867V30.5568H330.394C333.835 30.5568 335.73 32.053 335.73 34.5967C335.73 36.9907 333.835 38.5867 330.394 38.5867H317.526Z" fill="black"/> +<path d="M349.904 22.3773V58.1875H384.717V49.9083H359.48V44.0729H381.874V35.9932H359.48V30.6565H384.717V22.3773H349.904Z" fill="black"/> +<path d="M399.204 46.7662H412.221C420.95 46.7662 426.685 42.5767 426.685 34.5967C426.685 26.5668 420.95 22.3773 412.221 22.3773H389.428V58.1875H399.204V46.7662ZM399.204 38.6365V30.5568H411.673C415.164 30.5568 417.059 32.053 417.059 34.5967C417.059 37.0904 415.164 38.6365 411.673 38.6365H399.204Z" fill="black"/> +<path d="M450.948 21.7788C438.43 21.7788 429.402 29.6092 429.402 40.2824C429.402 50.9557 438.43 58.786 450.948 58.786C463.467 58.786 472.444 50.9557 472.444 40.2824C472.444 29.6092 463.467 21.7788 450.948 21.7788ZM450.948 30.2575C457.532 30.2575 462.469 34.1478 462.469 40.2824C462.469 46.417 457.532 50.3073 450.948 50.3073C444.365 50.3073 439.427 46.417 439.427 40.2824C439.427 34.1478 444.365 30.2575 450.948 30.2575Z" fill="black"/> +<path d="M38.5017 18.0956C27.2499 18.0956 18.0957 27.2498 18.0957 38.5016C18.0957 49.7534 27.2499 58.9076 38.5017 58.9076C49.7535 58.9076 58.9077 49.7534 58.9077 38.5016C58.9077 27.2498 49.7535 18.0956 38.5017 18.0956ZM38.5017 49.0618C32.6687 49.0618 27.9415 44.3346 27.9415 38.5016C27.9415 32.6686 32.6687 27.9414 38.5017 27.9414C44.3347 27.9414 49.0619 32.6686 49.0619 38.5016C49.0619 44.3346 44.3347 49.0618 38.5017 49.0618Z" fill="black"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M40.2115 14.744V7.125C56.7719 8.0104 69.9275 21.7208 69.9275 38.5016C69.9275 55.2824 56.7719 68.989 40.2115 69.8782V62.2592C52.5539 61.3776 62.3275 51.0644 62.3275 38.5016C62.3275 25.9388 52.5539 15.6256 40.2115 14.744ZM20.5048 54.0815C17.233 50.3043 15.124 45.4935 14.7478 40.2115H7.125C7.5202 47.6025 10.4766 54.3095 15.1088 59.4737L20.501 54.0815H20.5048ZM36.7916 69.8782V62.2592C31.5058 61.883 26.695 59.7778 22.9178 56.5022L17.5256 61.8944C22.6936 66.5304 29.4006 69.483 36.7878 69.8782H36.7916Z" fill="url(#paint0_linear_2028_278)"/> +<defs> +<linearGradient id="paint0_linear_2028_278" x1="41.443" y1="11.5372" x2="10.5567" y2="42.4236" gradientUnits="userSpaceOnUse"> +<stop stop-color="#0096FF"/> +<stop offset="1" stop-color="#FF1E56"/> +</linearGradient> +</defs> +</svg> diff --git a/examples/basic/apps/web/public/turborepo-light.svg b/examples/basic/apps/web/public/turborepo-light.svg new file mode 100644 index 0000000000000..ddea915815874 --- /dev/null +++ b/examples/basic/apps/web/public/turborepo-light.svg @@ -0,0 +1,19 @@ +<svg width="473" height="76" viewBox="0 0 473 76" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M130.998 30.6566V22.3773H91.0977V30.6566H106.16V58.1876H115.935V30.6566H130.998Z" fill="white"/> +<path d="M153.542 58.7362C165.811 58.7362 172.544 52.5018 172.544 42.2276V22.3773H162.768V41.2799C162.768 47.0156 159.776 50.2574 153.542 50.2574C147.307 50.2574 144.315 47.0156 144.315 41.2799V22.3773H134.539V42.2276C134.539 52.5018 141.272 58.7362 153.542 58.7362Z" fill="white"/> +<path d="M187.508 46.3173H197.234L204.914 58.1876H216.136L207.458 45.2699C212.346 43.5243 215.338 39.6341 215.338 34.3473C215.338 26.6666 209.603 22.3773 200.874 22.3773H177.732V58.1876H187.508V46.3173ZM187.508 38.5867V30.5568H200.376C203.817 30.5568 205.712 32.0531 205.712 34.5967C205.712 36.9907 203.817 38.5867 200.376 38.5867H187.508Z" fill="white"/> +<path d="M219.887 58.1876H245.472C253.452 58.1876 258.041 54.3971 258.041 48.0629C258.041 43.8236 255.348 40.9308 252.156 39.6341C254.35 38.5867 257.043 36.0929 257.043 32.1528C257.043 25.8187 252.555 22.3773 244.625 22.3773H219.887V58.1876ZM229.263 36.3922V30.3074H243.627C246.32 30.3074 247.817 31.3548 247.817 33.3498C247.817 35.3448 246.32 36.3922 243.627 36.3922H229.263ZM229.263 43.7238H244.525C247.168 43.7238 248.615 45.0206 248.615 46.9657C248.615 48.9108 247.168 50.2076 244.525 50.2076H229.263V43.7238Z" fill="white"/> +<path d="M281.942 21.7788C269.423 21.7788 260.396 29.6092 260.396 40.2824C260.396 50.9557 269.423 58.7861 281.942 58.7861C294.461 58.7861 303.438 50.9557 303.438 40.2824C303.438 29.6092 294.461 21.7788 281.942 21.7788ZM281.942 30.2576C288.525 30.2576 293.463 34.1478 293.463 40.2824C293.463 46.4171 288.525 50.3073 281.942 50.3073C275.359 50.3073 270.421 46.4171 270.421 40.2824C270.421 34.1478 275.359 30.2576 281.942 30.2576Z" fill="white"/> +<path d="M317.526 46.3173H327.251L334.932 58.1876H346.154L337.476 45.2699C342.364 43.5243 345.356 39.6341 345.356 34.3473C345.356 26.6666 339.62 22.3773 330.892 22.3773H307.75V58.1876H317.526V46.3173ZM317.526 38.5867V30.5568H330.394C333.835 30.5568 335.73 32.0531 335.73 34.5967C335.73 36.9907 333.835 38.5867 330.394 38.5867H317.526Z" fill="white"/> +<path d="M349.904 22.3773V58.1876H384.717V49.9083H359.48V44.0729H381.874V35.9932H359.48V30.6566H384.717V22.3773H349.904Z" fill="white"/> +<path d="M399.204 46.7662H412.221C420.95 46.7662 426.685 42.5767 426.685 34.5967C426.685 26.5668 420.95 22.3773 412.221 22.3773H389.428V58.1876H399.204V46.7662ZM399.204 38.6366V30.5568H411.673C415.164 30.5568 417.059 32.0531 417.059 34.5967C417.059 37.0904 415.164 38.6366 411.673 38.6366H399.204Z" fill="white"/> +<path d="M450.948 21.7788C438.43 21.7788 429.402 29.6092 429.402 40.2824C429.402 50.9557 438.43 58.7861 450.948 58.7861C463.467 58.7861 472.444 50.9557 472.444 40.2824C472.444 29.6092 463.467 21.7788 450.948 21.7788ZM450.948 30.2576C457.532 30.2576 462.469 34.1478 462.469 40.2824C462.469 46.4171 457.532 50.3073 450.948 50.3073C444.365 50.3073 439.427 46.4171 439.427 40.2824C439.427 34.1478 444.365 30.2576 450.948 30.2576Z" fill="white"/> +<path d="M38.5017 18.0956C27.2499 18.0956 18.0957 27.2498 18.0957 38.5016C18.0957 49.7534 27.2499 58.9076 38.5017 58.9076C49.7535 58.9076 58.9077 49.7534 58.9077 38.5016C58.9077 27.2498 49.7535 18.0956 38.5017 18.0956ZM38.5017 49.0618C32.6687 49.0618 27.9415 44.3346 27.9415 38.5016C27.9415 32.6686 32.6687 27.9414 38.5017 27.9414C44.3347 27.9414 49.0619 32.6686 49.0619 38.5016C49.0619 44.3346 44.3347 49.0618 38.5017 49.0618Z" fill="white"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M40.2115 14.744V7.125C56.7719 8.0104 69.9275 21.7208 69.9275 38.5016C69.9275 55.2824 56.7719 68.989 40.2115 69.8782V62.2592C52.5539 61.3776 62.3275 51.0644 62.3275 38.5016C62.3275 25.9388 52.5539 15.6256 40.2115 14.744ZM20.5048 54.0815C17.233 50.3043 15.124 45.4935 14.7478 40.2115H7.125C7.5202 47.6025 10.4766 54.3095 15.1088 59.4737L20.501 54.0815H20.5048ZM36.7916 69.8782V62.2592C31.5058 61.883 26.695 59.7778 22.9178 56.5022L17.5256 61.8944C22.6936 66.5304 29.4006 69.483 36.7878 69.8782H36.7916Z" fill="url(#paint0_linear_2028_477)"/> +<defs> +<linearGradient id="paint0_linear_2028_477" x1="41.443" y1="11.5372" x2="10.5567" y2="42.4236" gradientUnits="userSpaceOnUse"> +<stop stop-color="#0096FF"/> +<stop offset="1" stop-color="#FF1E56"/> +</linearGradient> +</defs> +</svg> diff --git a/examples/basic/package.json b/examples/basic/package.json index 67b37b5d70532..f5d60d62a2d54 100644 --- a/examples/basic/package.json +++ b/examples/basic/package.json @@ -9,7 +9,7 @@ }, "devDependencies": { "prettier": "^3.2.5", - "turbo": "^2.0.7", + "turbo": "^2.3.0", "typescript": "5.5.4" }, "packageManager": "pnpm@8.15.6", diff --git a/examples/basic/packages/eslint-config/react-internal.js b/examples/basic/packages/eslint-config/react-internal.js index bf0a208366d04..ef700cbd03d48 100644 --- a/examples/basic/packages/eslint-config/react-internal.js +++ b/examples/basic/packages/eslint-config/react-internal.js @@ -14,7 +14,6 @@ module.exports = { plugins: ["only-warn"], globals: { React: true, - JSX: true, }, env: { browser: true, diff --git a/examples/basic/packages/ui/package.json b/examples/basic/packages/ui/package.json index 44ae805dd5cb9..f4fc571ed6ce8 100644 --- a/examples/basic/packages/ui/package.json +++ b/examples/basic/packages/ui/package.json @@ -9,7 +9,8 @@ }, "scripts": { "lint": "eslint . --max-warnings 0", - "generate:component": "turbo gen react-component" + "generate:component": "turbo gen react-component", + "check-types": "tsc --noEmit" }, "devDependencies": { "@repo/eslint-config": "workspace:*", @@ -17,12 +18,13 @@ "@turbo/gen": "^1.12.4", "@types/node": "^20.11.24", "@types/eslint": "^8.56.5", - "@types/react": "^18.2.61", - "@types/react-dom": "^18.2.19", + "@types/react": "18.3.0", + "@types/react-dom": "18.3.1", "eslint": "^8.57.0", "typescript": "5.5.4" }, "dependencies": { - "react": "^18.2.0" + "react": "19.0.0-rc-5c56b873-20241107", + "react-dom": "19.0.0-rc-5c56b873-20241107" } } diff --git a/examples/basic/packages/ui/src/card.tsx b/examples/basic/packages/ui/src/card.tsx index f69672e13501b..7b988937b9a1d 100644 --- a/examples/basic/packages/ui/src/card.tsx +++ b/examples/basic/packages/ui/src/card.tsx @@ -1,3 +1,5 @@ +import { type JSX } from "react"; + export function Card({ className, title, diff --git a/examples/basic/packages/ui/src/code.tsx b/examples/basic/packages/ui/src/code.tsx index 769d9711fdfa7..f7cbd22a8618f 100644 --- a/examples/basic/packages/ui/src/code.tsx +++ b/examples/basic/packages/ui/src/code.tsx @@ -1,3 +1,5 @@ +import { type JSX } from "react"; + export function Code({ children, className, diff --git a/examples/basic/pnpm-lock.yaml b/examples/basic/pnpm-lock.yaml index aef2ce84acc9a..7de9bb57d02dc 100644 --- a/examples/basic/pnpm-lock.yaml +++ b/examples/basic/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.0' +lockfileVersion: '9.0' settings: autoInstallPeers: true @@ -12,8 +12,8 @@ importers: specifier: ^3.2.5 version: 3.3.3 turbo: - specifier: ^2.0.7 - version: 2.1.2 + specifier: ^2.3.0 + version: 2.3.0 typescript: specifier: 5.5.4 version: 5.5.4 @@ -24,14 +24,14 @@ importers: specifier: workspace:* version: link:../../packages/ui next: - specifier: 14.2.6 - version: 14.2.6(react-dom@18.3.1)(react@18.3.1) + specifier: 15.0.3 + version: 15.0.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) react: - specifier: 18.3.1 - version: 18.3.1 + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106 react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -43,17 +43,17 @@ importers: specifier: ^20 version: 20.16.5 '@types/react': - specifier: ^18 - version: 18.3.6 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: ^18 + specifier: 18.3.0 version: 18.3.0 eslint: specifier: ^8 version: 8.57.1 eslint-config-next: - specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.5.4) + specifier: 15.0.3 + version: 15.0.3(eslint@8.57.1)(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -64,14 +64,14 @@ importers: specifier: workspace:* version: link:../../packages/ui next: - specifier: 14.2.6 - version: 14.2.6(react-dom@18.3.1)(react@18.3.1) + specifier: 15.0.3 + version: 15.0.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106) react: - specifier: 18.3.1 - version: 18.3.1 + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106 react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) + specifier: 19.0.0-rc-66855b96-20241106 + version: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -83,17 +83,17 @@ importers: specifier: ^20 version: 20.16.5 '@types/react': - specifier: ^18 - version: 18.3.6 + specifier: 18.3.1 + version: 18.3.1 '@types/react-dom': - specifier: ^18 + specifier: 18.3.0 version: 18.3.0 eslint: specifier: ^8 version: 8.57.1 eslint-config-next: - specifier: 14.2.6 - version: 14.2.6(eslint@8.57.1)(typescript@5.5.4) + specifier: 15.0.3 + version: 15.0.3(eslint@8.57.1)(typescript@5.5.4) typescript: specifier: 5.5.4 version: 5.5.4 @@ -102,13 +102,13 @@ importers: devDependencies: '@typescript-eslint/eslint-plugin': specifier: ^7.1.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.5.4) + version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/parser': specifier: ^7.1.0 version: 7.18.0(eslint@8.57.1)(typescript@5.5.4) '@vercel/style-guide': specifier: ^5.2.0 - version: 5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4) + version: 5.2.0(@next/eslint-plugin-next@14.2.6)(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4) eslint-config-prettier: specifier: ^9.1.0 version: 9.1.0(eslint@8.57.1) @@ -127,8 +127,11 @@ importers: packages/ui: dependencies: react: - specifier: ^18.2.0 - version: 18.3.1 + specifier: 19.0.0-rc-5c56b873-20241107 + version: 19.0.0-rc-5c56b873-20241107 + react-dom: + specifier: 19.0.0-rc-5c56b873-20241107 + version: 19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -146,11 +149,11 @@ importers: specifier: ^20.11.24 version: 20.16.5 '@types/react': - specifier: ^18.2.61 - version: 18.3.6 - '@types/react-dom': - specifier: ^18.2.19 + specifier: 18.3.0 version: 18.3.0 + '@types/react-dom': + specifier: 18.3.1 + version: 18.3.1 eslint: specifier: ^8.57.0 version: 8.57.1 @@ -158,32 +161,2686 @@ importers: specifier: 5.5.4 version: 5.5.4 -packages: +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.25.4': + resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.25.2': + resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} + engines: {node: '>=6.9.0'} + + '@babel/eslint-parser@7.25.1': + resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} + engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} + peerDependencies: + '@babel/core': ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + + '@babel/generator@7.25.6': + resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.25.2': + resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.25.2': + resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.8': + resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.8': + resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.25.6': + resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.25.6': + resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/runtime-corejs3@7.25.6': + resolution: {integrity: sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.0': + resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.25.6': + resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.25.6': + resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} + engines: {node: '>=6.9.0'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@emnapi/runtime@1.3.1': + resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==} + + '@eslint-community/eslint-utils@4.4.0': + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + 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.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + + '@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] + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + 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/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==} + + '@microsoft/tsdoc-config@0.16.2': + resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + + '@microsoft/tsdoc@0.14.2': + resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} + + '@next/env@15.0.3': + resolution: {integrity: sha512-t9Xy32pjNOvVn2AS+Utt6VmyrshbpfUMhIjFO60gI58deSo/KgLOp31XZ4O+kY/Is8WAGYwA5gR7kOb1eORDBA==} + + '@next/eslint-plugin-next@14.2.6': + resolution: {integrity: sha512-d3+p4AjIYmhqzYHhhmkRYYN6ZU35TwZAKX08xKRfnHkz72KhWL2kxMFsDptpZs5e8bBGdepn7vn1+9DaF8iX+A==} + + '@next/eslint-plugin-next@15.0.3': + resolution: {integrity: sha512-3Ln/nHq2V+v8uIaxCR6YfYo7ceRgZNXfTd3yW1ukTaFbO+/I8jNakrjYWODvG9BuR2v5kgVtH/C8r0i11quOgw==} + + '@next/swc-darwin-arm64@15.0.3': + resolution: {integrity: sha512-s3Q/NOorCsLYdCKvQlWU+a+GeAd3C8Rb3L1YnetsgwXzhc3UTWrtQpB/3eCjFOdGUj5QmXfRak12uocd1ZiiQw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@next/swc-darwin-x64@15.0.3': + resolution: {integrity: sha512-Zxl/TwyXVZPCFSf0u2BNj5sE0F2uR6iSKxWpq4Wlk/Sv9Ob6YCKByQTkV2y6BCic+fkabp9190hyrDdPA/dNrw==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@next/swc-linux-arm64-gnu@15.0.3': + resolution: {integrity: sha512-T5+gg2EwpsY3OoaLxUIofmMb7ohAUlcNZW0fPQ6YAutaWJaxt1Z1h+8zdl4FRIOr5ABAAhXtBcpkZNwUcKI2fw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-arm64-musl@15.0.3': + resolution: {integrity: sha512-WkAk6R60mwDjH4lG/JBpb2xHl2/0Vj0ZRu1TIzWuOYfQ9tt9NFsIinI1Epma77JVgy81F32X/AeD+B2cBu/YQA==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@next/swc-linux-x64-gnu@15.0.3': + resolution: {integrity: sha512-gWL/Cta1aPVqIGgDb6nxkqy06DkwJ9gAnKORdHWX1QBbSZZB+biFYPFti8aKIQL7otCE1pjyPaXpFzGeG2OS2w==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-linux-x64-musl@15.0.3': + resolution: {integrity: sha512-QQEMwFd8r7C0GxQS62Zcdy6GKx999I/rTO2ubdXEe+MlZk9ZiinsrjwoiBL5/57tfyjikgh6GOU2WRQVUej3UA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@next/swc-win32-arm64-msvc@15.0.3': + resolution: {integrity: sha512-9TEp47AAd/ms9fPNgtgnT7F3M1Hf7koIYYWCMQ9neOwjbVWJsHZxrFbI3iEDJ8rf1TDGpmHbKxXf2IFpAvheIQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + + '@next/swc-win32-x64-msvc@15.0.3': + resolution: {integrity: sha512-VNAz+HN4OGgvZs6MOoVfnn41kBzT+M+tB+OK4cww6DNyWS6wKaDpaAm/qLeOUbnMh0oVx1+mg0uoYARF69dJyA==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': + resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@nolyfill/is-core-module@1.0.39': + resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} + engines: {node: '>=12.4.0'} + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@pkgr/core@0.1.1': + resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rushstack/eslint-patch@1.10.4': + resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + + '@swc/helpers@0.5.13': + resolution: {integrity: sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w==} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + + '@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==} + + '@turbo/gen@1.13.4': + resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} + hasBin: true + + '@turbo/workspaces@1.13.4': + resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} + hasBin: true + + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + + '@types/inquirer@6.5.0': + resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/json5@0.0.29': + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/node@20.16.5': + resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} + + '@types/react-dom@18.3.0': + resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + + '@types/react-dom@18.3.1': + resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} + + '@types/react@18.3.0': + resolution: {integrity: sha512-DiUcKjzE6soLyln8NNZmyhcQjVv+WsUIFSqetMN0p8927OztKT4VTfFTqsbAi5oAGIcgOmOajlfBqyptDDjZRw==} + + '@types/react@18.3.1': + resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + + '@types/semver@7.5.8': + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + + '@types/through@0.0.33': + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + + '@types/tinycolor2@1.4.6': + resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} + + '@typescript-eslint/eslint-plugin@6.21.0': + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/eslint-plugin@7.18.0': + resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@6.21.0': + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/parser@7.18.0': + resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/scope-manager@5.62.0': + resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@7.18.0': + resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/type-utils@6.21.0': + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/type-utils@7.18.0': + resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/types@5.62.0': + resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@7.18.0': + resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@typescript-eslint/typescript-estree@5.62.0': + resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@7.18.0': + resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@5.62.0': + resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@7.18.0': + resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} + engines: {node: ^18.18.0 || >=20.0.0} + peerDependencies: + eslint: ^8.56.0 + + '@typescript-eslint/visitor-keys@5.62.0': + resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@7.18.0': + resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} + engines: {node: ^18.18.0 || >=20.0.0} + + '@ungap/structured-clone@1.2.0': + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + '@vercel/style-guide@5.2.0': + resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} + engines: {node: '>=16'} + peerDependencies: + '@next/eslint-plugin-next': '>=12.3.0 <15' + eslint: '>=8.48.0 <9' + prettier: '>=3.0.0 <4' + typescript: '>=4.8.0 <6' + peerDependenciesMeta: + '@next/eslint-plugin-next': + optional: true + eslint: + optional: true + prettier: + optional: true + typescript: + optional: true + + 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.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.1: + resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} + engines: {node: '>= 14'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + 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@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-includes@3.1.8: + resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} + engines: {node: '>= 0.4'} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlast@1.2.5: + resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} + engines: {node: '>= 0.4'} + + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + 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.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + ast-types-flow@0.0.8: + resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} + + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + axe-core@4.10.0: + resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} + engines: {node: '>=4'} + + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + browserslist@4.23.3: + resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + + caniuse-lite@1.0.30001660: + resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + 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'} + + change-case@3.1.0: + resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + client-only@0.0.1: + resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + 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-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + constant-case@2.0.0: + resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + core-js-pure@3.38.1: + resolution: {integrity: sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + damerau-levenshtein@1.0.8: + resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + 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 + + 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==} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + + del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + + detect-indent@7.0.1: + resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + engines: {node: '>=12.20'} + + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + + detect-newline@4.0.1: + resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + 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'} + + dot-case@2.1.1: + resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + + dotenv@16.0.3: + resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} + engines: {node: '>=12'} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + electron-to-chromium@1.5.24: + resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + 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.0.19: + resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.0.0: + resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-next@15.0.3: + resolution: {integrity: sha512-IGP2DdQQrgjcr4mwFPve4DrCqo7CVVez1WoYY47XwKSrYO4hC0Dlb+iJA60i0YfICOzgNADIb8r28BpQ5Zs0wg==} + peerDependencies: + eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 + typescript: '>=3.3.1' + peerDependenciesMeta: + typescript: + optional: true + + eslint-config-prettier@9.1.0: + resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-turbo@2.1.2: + resolution: {integrity: sha512-UCNwxBrTOx0K41h1OrwMg7vPdGvcGSAlj40ZzpuUi0S2Muac2UOs+6F2dMYQiKg7lX2HAtyHXlF0T2wlWNHjGg==} + peerDependencies: + eslint: '>6.6.0' + + eslint-import-resolver-alias@1.1.2: + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@3.6.3: + resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} + engines: {node: ^14.18.0 || >=16.0.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.11.0: + resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} + 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-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-eslint-comments@3.2.0: + resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} + engines: {node: '>=6.5.0'} + peerDependencies: + eslint: '>=4.19.1' + + eslint-plugin-import@2.30.0: + resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + 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@27.9.0: + resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 + eslint: ^7.0.0 || ^8.0.0 + jest: '*' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + jest: + optional: true + + eslint-plugin-jsx-a11y@6.10.0: + resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-only-warn@1.1.0: + resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} + engines: {node: '>=6'} + + eslint-plugin-playwright@0.16.0: + resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} + peerDependencies: + eslint: '>=7' + eslint-plugin-jest: '>=25' + peerDependenciesMeta: + eslint-plugin-jest: + optional: true + + eslint-plugin-react-hooks@4.6.2: + resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} + engines: {node: '>=10'} + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + + eslint-plugin-react-hooks@5.0.0: + resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} + 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.36.1: + resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + + eslint-plugin-testing-library@6.3.0: + resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} + peerDependencies: + eslint: ^7.5.0 || ^8.0.0 + + eslint-plugin-tsdoc@0.2.17: + resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + + eslint-plugin-turbo@2.1.2: + resolution: {integrity: sha512-q2ikGubfVLZDPEKliiuubZc3sI5oqbKIZJ6fRi6Bldv8E3cMNH3Qt7g6hXZV4+GxwQbzEEteCYSBNbOn1DBqRg==} + peerDependencies: + eslint: '>6.6.0' + + eslint-plugin-unicorn@48.0.1: + resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} + engines: {node: '>=16'} + peerDependencies: + eslint: '>=8.44.0' + + eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + + 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@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.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'} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-glob@3.3.1: + resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + 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==} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + 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'} + + flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + + flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + + fs-extra@10.1.0: + resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} + engines: {node: '>=12'} + + fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} + + get-stdin@9.0.0: + resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} + engines: {node: '>=12'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + + get-uri@6.0.3: + resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} + engines: {node: '>= 14'} + + git-hooks-list@3.1.0: + resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} + + 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@10.3.10: + resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + gradient-string@2.0.2: + resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} + engines: {node: '>=10'} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + 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-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + header-case@1.0.1: + resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + + hosted-git-info@2.8.9: + resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.5: + resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} + engines: {node: '>= 14'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + 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'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + inquirer@8.2.6: + resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} + engines: {node: '>=12.0.0'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + 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.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-builtin-module@3.2.1: + resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} + engines: {node: '>=6'} + + is-bun-module@1.2.1: + resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lower-case@1.1.3: + resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + 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.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-upper-case@1.1.2: + resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakset@2.0.3: + resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} + engines: {node: '>= 0.4'} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbinaryfile@4.0.10: + resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} + engines: {node: '>= 8.0.0'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + 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 + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + language-subtag-registry@0.3.23: + resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} + + language-tags@1.0.9: + resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} + engines: {node: '>=0.10'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + 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'} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@3.0.0: + resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} + engines: {node: '>=8'} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lower-case-first@1.0.2: + resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + + lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + 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'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + 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@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + + next@15.0.3: + resolution: {integrity: sha512-ontCbCRKJUIoivAdGB34yCaOcPgYXr9AAkV/IwqFfWWTXEPUgLYkSkqBhIk9KK7gGmgjc64B+RdoeIDM13Irnw==} + 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-66855b96-20241106 + react-dom: ^18.2.0 || 19.0.0-rc-66855b96-20241106 + sass: ^1.3.0 + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@playwright/test': + optional: true + babel-plugin-react-compiler: + optional: true + sass: + optional: true + + no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + + node-plop@0.26.3: + resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} + engines: {node: '>=8.9.4'} + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + + normalize-package-data@2.5.0: + resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + 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.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.entries@1.1.8: + resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} + 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.0: + resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} + engines: {node: '>= 0.4'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + + ora@4.1.1: + resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} + engines: {node: '>=8'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-tmpdir@1.0.2: + resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} + engines: {node: '>=0.10.0'} + + 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-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-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + pac-proxy-agent@7.0.2: + resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + + param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + + 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'} + + pascal-case@2.0.1: + resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + + path-case@2.1.1: + resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + 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-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + prettier-plugin-packagejson@2.5.2: + resolution: {integrity: sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==} + peerDependencies: + prettier: '>= 1.16.0' + peerDependenciesMeta: + prettier: + optional: true + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + proxy-agent@6.4.0: + resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-dom@19.0.0-rc-5c56b873-20241107: + resolution: {integrity: sha512-z60mK7HC5Cs3dz5dHLauTcnNe0LgeQNSX4BilnjBnV0BhHitQniPgmV87QhR2v4fryS4WRL2RF4NklwIhSCbCA==} + peerDependencies: + react: 19.0.0-rc-5c56b873-20241107 + + react-dom@19.0.0-rc-66855b96-20241106: + resolution: {integrity: sha512-D25vdaytZ1wFIRiwNU98NPQ/upS2P8Co4/oNoa02PzHbh8deWdepjm5qwZM/46OdSiGv4WSWwxP55RO9obqJEQ==} + peerDependencies: + react: 19.0.0-rc-66855b96-20241106 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react@19.0.0-rc-5c56b873-20241107: + resolution: {integrity: sha512-cFT1p+jDiT5MSDCOAlllNC9cN6532458CNGZMw+8u33ffZuX3yf2XJtSwar/G9t47nEmqsurdvtIjqb603735g==} + engines: {node: '>=0.10.0'} + + react@19.0.0-rc-66855b96-20241106: + resolution: {integrity: sha512-klH7xkT71SxRCx4hb1hly5FJB21Hz0ACyxbXYAECEqssUjtJeFUAaI2U1DgJAzkGEnvEm3DkxuBchMC/9K4ipg==} + engines: {node: '>=0.10.0'} + + read-pkg-up@7.0.1: + resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} + engines: {node: '>=8'} + + read-pkg@5.2.0: + resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} + engines: {node: '>=8'} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + reflect.getprototypeof@1.0.6: + resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} + engines: {node: '>= 0.4'} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + engines: {node: '>= 0.4'} + + registry-auth-token@3.3.2: + resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + + registry-url@3.1.0: + resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} + engines: {node: '>=0.10.0'} + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve@1.19.0: + resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + scheduler@0.25.0-rc-5c56b873-20241107: + resolution: {integrity: sha512-rt9KBjQg9XWMfNl0jNAKTRReFiuAG1U5Pi7b9IMZIMXSEfu5wSCPzqvygzvO38piDJag/ljLcFULHo7oLVDh7w==} + + scheduler@0.25.0-rc-66855b96-20241106: + resolution: {integrity: sha512-HQXp/Mnp/MMRSXMQF7urNFla+gmtXW/Gr1KliuR0iboTit4KvZRY8KYaq5ccCTAOJiUqQh2rE2F3wgUekmgdlA==} + + 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.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + + sentence-case@2.1.1: + resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + + 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'} + + 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@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + + 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-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + snake-case@2.1.0: + resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + + socks-proxy-agent@8.0.4: + resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} + engines: {node: '>= 14'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sort-object-keys@1.1.3: + resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} + + sort-package-json@2.10.1: + resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} + hasBin: true + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + 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-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + stop-iteration-iterator@1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} + engines: {node: '>= 0.4'} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + 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.prototype.includes@2.0.0: + resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + + string.prototype.matchall@4.0.11: + resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} + 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.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.8: + resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + 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-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + 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'} + + 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 + + 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-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + swap-case@1.1.2: + resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} + engines: {node: ^14.18.0 || >=16.0.0} + + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + tinycolor2@1.6.0: + resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} + + tinygradient@1.1.5: + resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + + title-case@2.1.1: + resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + + tmp@0.0.33: + resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} + engines: {node: '>=0.6.0'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + ts-api-utils@1.3.0: + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.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==} + + tslib@1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + + tsutils@3.21.0: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + + turbo-darwin-64@2.3.0: + resolution: {integrity: sha512-pji+D49PhFItyQjf2QVoLZw2d3oRGo8gJgKyOiRzvip78Rzie74quA8XNwSg/DuzM7xx6gJ3p2/LylTTlgZXxQ==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.3.0: + resolution: {integrity: sha512-AJrGIL9BO41mwDF/IBHsNGwvtdyB911vp8f5mbNo1wG66gWTvOBg7WCtYQBvCo11XTenTfXPRSsAb7w3WAZb6w==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.3.0: + resolution: {integrity: sha512-jZqW6vc2sPJT3M/3ZmV1Cg4ecQVPqsbHncG/RnogHpBu783KCSXIndgxvUQNm9qfgBYbZDBnP1md63O4UTElhw==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.3.0: + resolution: {integrity: sha512-HUbDLJlvd/hxuyCNO0BmEWYQj0TugRMvSQeG8vHJH+Lq8qOgDAe7J0K73bFNbZejZQxW3C3XEiZFB3pnpO78+A==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.3.0: + resolution: {integrity: sha512-c5rxrGNTYDWX9QeMzWLFE9frOXnKjHGEvQMp1SfldDlbZYsloX9UKs31TzUThzfTgTiz8NYuShaXJ2UvTMnV/g==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.3.0: + resolution: {integrity: sha512-7qfUuYhfIVb1AZgs89DxhXK+zZez6O2ocmixEQ4hXZK7ytnBt5vaz2zGNJJKFNYIL5HX1C3tuHolnpNgDNCUIg==} + cpu: [arm64] + os: [win32] + + turbo@2.3.0: + resolution: {integrity: sha512-/uOq5o2jwRPyaUDnwBpOR5k9mQq4c3wziBgWNWttiYQPmbhDtrKYPRBxTvA2WpgQwRIbt8UM612RMN8n/TvmHA==} + hasBin: true + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@0.6.0: + resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} + engines: {node: '>=8'} + + type-fest@0.8.1: + resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} + engines: {node: '>=8'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typescript@5.5.4: + resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} + engines: {node: '>=14.17'} + hasBin: true + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} + engines: {node: '>=0.8.0'} + hasBin: true + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-check@1.5.4: + resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + + upper-case-first@1.1.2: + resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + + upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + + validate-npm-package-name@5.0.1: + resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-builtin-type@1.1.4: + resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} - /@ampproject/remapping@2.3.0: - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + 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'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + +snapshots: + + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@babel/code-frame@7.24.7: - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} - engines: {node: '>=6.9.0'} + '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 picocolors: 1.1.0 - dev: true - /@babel/compat-data@7.25.4: - resolution: {integrity: sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/compat-data@7.25.4': {} - /@babel/core@7.25.2: - resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} - engines: {node: '>=6.9.0'} + '@babel/core@7.25.2': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 @@ -202,58 +2859,38 @@ packages: semver: 6.3.1 transitivePeerDependencies: - supports-color - dev: true - /@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.1): - resolution: {integrity: sha512-Y956ghgTT4j7rKesabkh5WeqgSFZVFwaPR0IWFm7KFHFmmJ4afbG49SmfW4S+GyRPx0Dy5jxEWA5t0rpxfElWg==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + '@babel/eslint-parser@7.25.1(@babel/core@7.25.2)(eslint@8.57.1)': dependencies: '@babel/core': 7.25.2 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 eslint: 8.57.1 eslint-visitor-keys: 2.1.0 semver: 6.3.1 - dev: true - /@babel/generator@7.25.6: - resolution: {integrity: sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==} - engines: {node: '>=6.9.0'} + '@babel/generator@7.25.6': dependencies: '@babel/types': 7.25.6 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - dev: true - /@babel/helper-compilation-targets@7.25.2: - resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} - engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.25.2': dependencies: '@babel/compat-data': 7.25.4 '@babel/helper-validator-option': 7.24.8 browserslist: 4.23.3 lru-cache: 5.1.1 semver: 6.3.1 - dev: true - /@babel/helper-module-imports@7.24.7: - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): - resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': dependencies: '@babel/core': 7.25.2 '@babel/helper-module-imports': 7.24.7 @@ -262,79 +2899,48 @@ packages: '@babel/traverse': 7.25.6 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-simple-access@7.24.7: - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} - engines: {node: '>=6.9.0'} + '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.25.6 '@babel/types': 7.25.6 transitivePeerDependencies: - supports-color - dev: true - /@babel/helper-string-parser@7.24.8: - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-string-parser@7.24.8': {} - /@babel/helper-validator-identifier@7.24.7: - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-identifier@7.24.7': {} - /@babel/helper-validator-option@7.24.8: - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} - engines: {node: '>=6.9.0'} - dev: true + '@babel/helper-validator-option@7.24.8': {} - /@babel/helpers@7.25.6: - resolution: {integrity: sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==} - engines: {node: '>=6.9.0'} + '@babel/helpers@7.25.6': dependencies: '@babel/template': 7.25.0 '@babel/types': 7.25.6 - dev: true - /@babel/highlight@7.24.7: - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} + '@babel/highlight@7.24.7': dependencies: '@babel/helper-validator-identifier': 7.24.7 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.1.0 - dev: true - /@babel/parser@7.25.6: - resolution: {integrity: sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==} - engines: {node: '>=6.0.0'} - hasBin: true + '@babel/parser@7.25.6': dependencies: '@babel/types': 7.25.6 - dev: true - /@babel/runtime-corejs3@7.25.6: - resolution: {integrity: sha512-Gz0Nrobx8szge6kQQ5Z5MX9L3ObqNwCQY1PSwSNzreFL7aHGxv8Fp2j3ETV6/wWdbiV+mW6OSm8oQhg3Tcsniw==} - engines: {node: '>=6.9.0'} + '@babel/runtime-corejs3@7.25.6': dependencies: core-js-pure: 3.38.1 regenerator-runtime: 0.14.1 - dev: true - /@babel/template@7.25.0: - resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} - engines: {node: '>=6.9.0'} + '@babel/template@7.25.0': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.25.6 '@babel/types': 7.25.6 - dev: true - /@babel/traverse@7.25.6: - resolution: {integrity: sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==} - engines: {node: '>=6.9.0'} + '@babel/traverse@7.25.6': dependencies: '@babel/code-frame': 7.24.7 '@babel/generator': 7.25.6 @@ -345,42 +2951,30 @@ packages: globals: 11.12.0 transitivePeerDependencies: - supports-color - dev: true - /@babel/types@7.25.6: - resolution: {integrity: sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==} - engines: {node: '>=6.9.0'} + '@babel/types@7.25.6': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - dev: true - /@cspotcode/source-map-support@0.8.1: - resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} - engines: {node: '>=12'} + '@cspotcode/source-map-support@0.8.1': dependencies: '@jridgewell/trace-mapping': 0.3.9 - dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.57.1): - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@emnapi/runtime@1.3.1': + dependencies: + tslib: 2.7.0 + optional: true + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - dev: true - /@eslint-community/regexpp@4.11.1: - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - dev: true + '@eslint-community/regexpp@4.11.1': {} - /@eslint/eslintrc@2.1.4: - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 debug: 4.3.7 @@ -393,274 +2987,216 @@ packages: strip-json-comments: 3.1.1 transitivePeerDependencies: - supports-color - dev: true - /@eslint/js@8.57.1: - resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true + '@eslint/js@8.57.1': {} - /@humanwhocodes/config-array@0.13.0: - resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - dev: true - /@humanwhocodes/module-importer@1.0.1: - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} - dev: true + '@humanwhocodes/module-importer@1.0.1': {} - /@humanwhocodes/object-schema@2.0.3: - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead - dev: true + '@humanwhocodes/object-schema@2.0.3': {} - /@isaacs/cliui@8.0.2: - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@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 + + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 - string-width-cjs: /string-width@4.2.3 + string-width-cjs: string-width@4.2.3 strip-ansi: 7.1.0 - strip-ansi-cjs: /strip-ansi@6.0.1 + strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 - wrap-ansi-cjs: /wrap-ansi@7.0.0 - dev: true + wrap-ansi-cjs: wrap-ansi@7.0.0 + optional: true - /@jridgewell/gen-mapping@0.3.5: - resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} - engines: {node: '>=6.0.0'} + '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - dev: true - /@jridgewell/resolve-uri@3.1.2: - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/resolve-uri@3.1.2': {} - /@jridgewell/set-array@1.2.1: - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - dev: true + '@jridgewell/set-array@1.2.1': {} - /@jridgewell/sourcemap-codec@1.5.0: - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - dev: true + '@jridgewell/sourcemap-codec@1.5.0': {} - /@jridgewell/trace-mapping@0.3.25: - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@jridgewell/trace-mapping@0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - dev: true - /@microsoft/tsdoc-config@0.16.2: - resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==} + '@microsoft/tsdoc-config@0.16.2': dependencies: '@microsoft/tsdoc': 0.14.2 ajv: 6.12.6 jju: 1.4.0 resolve: 1.19.0 - dev: true - /@microsoft/tsdoc@0.14.2: - resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==} - dev: true + '@microsoft/tsdoc@0.14.2': {} - /@next/env@14.2.6: - resolution: {integrity: sha512-bs5DFKV+08EjWrl8EB+KKqev1ZTNONH1vFCaHh911aaB362NnP32UDTbE9VQhyiAgbFqJsfDkSxFERNDDb3j0g==} - dev: false + '@next/env@15.0.3': {} - /@next/eslint-plugin-next@14.2.6: - resolution: {integrity: sha512-d3+p4AjIYmhqzYHhhmkRYYN6ZU35TwZAKX08xKRfnHkz72KhWL2kxMFsDptpZs5e8bBGdepn7vn1+9DaF8iX+A==} + '@next/eslint-plugin-next@14.2.6': dependencies: glob: 10.3.10 - dev: true - - /@next/swc-darwin-arm64@14.2.6: - resolution: {integrity: sha512-BtJZb+hYXGaVJJivpnDoi3JFVn80SHKCiiRUW3kk1SY6UCUy5dWFFSbh+tGi5lHAughzeduMyxbLt3pspvXNSg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false optional: true - /@next/swc-darwin-x64@14.2.6: - resolution: {integrity: sha512-ZHRbGpH6KHarzm6qEeXKSElSXh8dS2DtDPjQt3IMwY8QVk7GbdDYjvV4NgSnDA9huGpGgnyy3tH8i5yHCqVkiQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false + '@next/eslint-plugin-next@15.0.3': + dependencies: + fast-glob: 3.3.1 + + '@next/swc-darwin-arm64@15.0.3': optional: true - /@next/swc-linux-arm64-gnu@14.2.6: - resolution: {integrity: sha512-O4HqUEe3ZvKshXHcDUXn1OybN4cSZg7ZdwHJMGCXSUEVUqGTJVsOh17smqilIjooP/sIJksgl+1kcf2IWMZWHg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-darwin-x64@15.0.3': optional: true - /@next/swc-linux-arm64-musl@14.2.6: - resolution: {integrity: sha512-xUcdhr2hfalG8RDDGSFxQ75yOG894UlmFS4K2M0jLrUhauRBGOtUOxoDVwiIIuZQwZ3Y5hDsazNjdYGB0cQ9yQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-arm64-gnu@15.0.3': optional: true - /@next/swc-linux-x64-gnu@14.2.6: - resolution: {integrity: sha512-InosKxw8UMcA/wEib5n2QttwHSKHZHNSbGcMepBM0CTcNwpxWzX32KETmwbhKod3zrS8n1vJ+DuJKbL9ZAB0Ag==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-arm64-musl@15.0.3': optional: true - /@next/swc-linux-x64-musl@14.2.6: - resolution: {integrity: sha512-d4QXfJmt5pGJ7cG8qwxKSBnO5AXuKAFYxV7qyDRHnUNvY/dgDh+oX292gATpB2AAHgjdHd5ks1wXxIEj6muLUQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false + '@next/swc-linux-x64-gnu@15.0.3': optional: true - /@next/swc-win32-arm64-msvc@14.2.6: - resolution: {integrity: sha512-AlgIhk4/G+PzOG1qdF1b05uKTMsuRatFlFzAi5G8RZ9h67CVSSuZSbqGHbJDlcV1tZPxq/d4G0q6qcHDKWf4aQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-linux-x64-musl@15.0.3': optional: true - /@next/swc-win32-ia32-msvc@14.2.6: - resolution: {integrity: sha512-hNukAxq7hu4o5/UjPp5jqoBEtrpCbOmnUqZSKNJG8GrUVzfq0ucdhQFVrHcLRMvQcwqqDh1a5AJN9ORnNDpgBQ==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-win32-arm64-msvc@15.0.3': optional: true - /@next/swc-win32-x64-msvc@14.2.6: - resolution: {integrity: sha512-NANtw+ead1rSDK1jxmzq3TYkl03UNK2KHqUYf1nIhNci6NkeqBD4s1njSzYGIlSHxCK+wSaL8RXZm4v+NF/pMw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false + '@next/swc-win32-x64-msvc@15.0.3': optional: true - /@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1: - resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} + '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 - dev: true - /@nodelib/fs.scandir@2.1.5: - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 - dev: true - /@nodelib/fs.stat@2.0.5: - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - dev: true + '@nodelib/fs.stat@2.0.5': {} - /@nodelib/fs.walk@1.2.8: - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - dev: true - /@nolyfill/is-core-module@1.0.39: - resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==} - engines: {node: '>=12.4.0'} - dev: true + '@nolyfill/is-core-module@1.0.39': {} - /@pkgjs/parseargs@0.11.0: - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - requiresBuild: true - dev: true + '@pkgjs/parseargs@0.11.0': optional: true - /@pkgr/core@0.1.1: - resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - dev: true + '@pkgr/core@0.1.1': {} - /@rtsao/scc@1.1.0: - resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} - dev: true + '@rtsao/scc@1.1.0': {} - /@rushstack/eslint-patch@1.10.4: - resolution: {integrity: sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==} - dev: true + '@rushstack/eslint-patch@1.10.4': {} - /@swc/counter@0.1.3: - resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} - dev: false + '@swc/counter@0.1.3': {} - /@swc/helpers@0.5.5: - resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==} + '@swc/helpers@0.5.13': dependencies: - '@swc/counter': 0.1.3 tslib: 2.7.0 - dev: false - /@tootallnate/quickjs-emscripten@0.23.0: - resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - dev: true + '@tootallnate/quickjs-emscripten@0.23.0': {} - /@tsconfig/node10@1.0.11: - resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} - dev: true + '@tsconfig/node10@1.0.11': {} - /@tsconfig/node12@1.0.11: - resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} - dev: true + '@tsconfig/node12@1.0.11': {} - /@tsconfig/node14@1.0.3: - resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} - dev: true + '@tsconfig/node14@1.0.3': {} - /@tsconfig/node16@1.0.4: - resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - dev: true + '@tsconfig/node16@1.0.4': {} - /@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.5.4): - resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} - hasBin: true + '@turbo/gen@1.13.4(@types/node@20.16.5)(typescript@5.5.4)': dependencies: '@turbo/workspaces': 1.13.4 chalk: 2.4.2 @@ -679,11 +3215,8 @@ packages: - '@types/node' - supports-color - typescript - dev: true - /@turbo/workspaces@1.13.4: - resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} - hasBin: true + '@turbo/workspaces@1.13.4': dependencies: chalk: 2.4.2 commander: 10.0.1 @@ -697,96 +3230,65 @@ packages: rimraf: 3.0.2 semver: 7.6.3 update-check: 1.5.4 - dev: true - /@types/eslint@8.56.12: - resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} + '@types/eslint@8.56.12': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 - dev: true - /@types/estree@1.0.5: - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} - dev: true + '@types/estree@1.0.5': {} - /@types/glob@7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 '@types/node': 20.16.5 - dev: true - /@types/inquirer@6.5.0: - resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + '@types/inquirer@6.5.0': dependencies: '@types/through': 0.0.33 rxjs: 6.6.7 - dev: true - /@types/json-schema@7.0.15: - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - dev: true + '@types/json-schema@7.0.15': {} - /@types/json5@0.0.29: - resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - dev: true + '@types/json5@0.0.29': {} - /@types/minimatch@5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true + '@types/minimatch@5.1.2': {} - /@types/node@20.16.5: - resolution: {integrity: sha512-VwYCweNo3ERajwy0IUlqqcyZ8/A7Zwa9ZP3MnENWcB11AejO+tLy3pu850goUW2FC/IJMdZUfKpX/yxL1gymCA==} + '@types/node@20.16.5': dependencies: undici-types: 6.19.8 - dev: true - /@types/normalize-package-data@2.4.4: - resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} - dev: true + '@types/normalize-package-data@2.4.4': {} - /@types/prop-types@15.7.13: - resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - dev: true + '@types/prop-types@15.7.13': {} - /@types/react-dom@18.3.0: - resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + '@types/react-dom@18.3.0': dependencies: - '@types/react': 18.3.6 - dev: true + '@types/react': 18.3.1 - /@types/react@18.3.6: - resolution: {integrity: sha512-CnGaRYNu2iZlkGXGrOYtdg5mLK8neySj0woZ4e2wF/eli2E6Sazmq5X+Nrj6OBrrFVQfJWTUFeqAzoRhWQXYvg==} + '@types/react-dom@18.3.1': + dependencies: + '@types/react': 18.3.1 + + '@types/react@18.3.0': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 - dev: true - /@types/semver@7.5.8: - resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} - dev: true + '@types/react@18.3.1': + dependencies: + '@types/prop-types': 15.7.13 + csstype: 3.1.3 - /@types/through@0.0.33: - resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} + '@types/semver@7.5.8': {} + + '@types/through@0.0.33': dependencies: '@types/node': 20.16.5 - dev: true - /@types/tinycolor2@1.4.6: - resolution: {integrity: sha512-iEN8J0BoMnsWBqjVbWH/c0G0Hh7O21lpR2/+PrvAVgWdzL7eexIFm4JN/Wn10PTcmNdtS6U67r499mlWMXOxNw==} - dev: true + '@types/tinycolor2@1.4.6': {} - /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.1 '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) @@ -801,21 +3303,12 @@ packages: natural-compare: 1.4.0 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - - /@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.1 '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) @@ -828,20 +3321,12 @@ packages: ignore: 5.3.2 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 @@ -849,20 +3334,12 @@ packages: '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.7 eslint: 8.57.1 + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/scope-manager': 7.18.0 '@typescript-eslint/types': 7.18.0 @@ -870,132 +3347,57 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 debug: 4.3.7 eslint: 8.57.1 + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - - /@typescript-eslint/parser@7.2.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-5FKsVcHTk6TafQKQbuIVkXq58Fnbkd2wDL4LB7AURN7RUOu1utVP+G8+6u3ZhEroW3DF6hyo3ZEXxgKgp4KeCg==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 7.2.0 - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.7 - eslint: 8.57.1 - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/scope-manager@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - dev: true - /@typescript-eslint/scope-manager@6.21.0: - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/scope-manager@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - dev: true - /@typescript-eslint/scope-manager@7.18.0: - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - dev: true - - /@typescript-eslint/scope-manager@7.2.0: - resolution: {integrity: sha512-Qh976RbQM/fYtjx9hs4XkayYujB/aPwglw2choHmf3zBjB4qOywWSdt9+KLRdHubGcoSwBnXUH2sR3hkyaERRg==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - dev: true - /@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/type-utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.5.4) debug: 4.3.7 eslint: 8.57.1 ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dev: true - - /@typescript-eslint/types@6.21.0: - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@5.62.0': {} - /@typescript-eslint/types@7.18.0: - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} - dev: true + '@typescript-eslint/types@6.21.0': {} - /@typescript-eslint/types@7.2.0: - resolution: {integrity: sha512-XFtUHPI/abFhm4cbCDc5Ykc8npOKBSJePY3a3s+lwumt7XWJuzP5cZcfZ610MIPHjQjNsOLlYK8ASPaNG8UiyA==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true + '@typescript-eslint/types@7.18.0': {} - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 @@ -1004,19 +3406,12 @@ packages: is-glob: 4.0.3 semver: 7.6.3 tsutils: 3.21.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4): - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -1026,19 +3421,12 @@ packages: minimatch: 9.0.3 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - /@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4): - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 @@ -1048,38 +3436,12 @@ packages: minimatch: 9.0.5 semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.5.4) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - supports-color - dev: true - - /@typescript-eslint/typescript-estree@7.2.0(typescript@5.5.4): - resolution: {integrity: sha512-cyxS5WQQCoBwSakpMrvMXuMDEbhOo9bNHHrNcEWis6XHx6KF518tkF1wBvKIn/tpq5ZpUYK7Bdklu8qY0MsFIA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 7.2.0 - '@typescript-eslint/visitor-keys': 7.2.0 - debug: 4.3.7 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 @@ -1093,13 +3455,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 @@ -1112,13 +3469,8 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 + '@typescript-eslint/utils@7.18.0(eslint@8.57.1)(typescript@5.5.4)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@typescript-eslint/scope-manager': 7.18.0 @@ -1128,83 +3480,49 @@ packages: transitivePeerDependencies: - supports-color - typescript - dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@typescript-eslint/visitor-keys@5.62.0': dependencies: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.21.0: - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} + '@typescript-eslint/visitor-keys@6.21.0': dependencies: '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@7.18.0: - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@7.18.0': dependencies: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - dev: true - - /@typescript-eslint/visitor-keys@7.2.0: - resolution: {integrity: sha512-c6EIQRHhcpl6+tO8EMR+kjkkV+ugUNXOmeASA1rlzkd8EPIriavpWoiEz1HR/VLhbVIdhqnV6E7JZm00cBDx2A==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 7.2.0 - eslint-visitor-keys: 3.4.3 - dev: true - /@ungap/structured-clone@1.2.0: - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: true + '@ungap/structured-clone@1.2.0': {} - /@vercel/style-guide@5.2.0(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4): - resolution: {integrity: sha512-fNSKEaZvSkiBoF6XEefs8CcgAV9K9e+MbcsDZjUsktHycKdA0jvjAzQi1W/FzLS+Nr5zZ6oejCwq/97dHUKe0g==} - engines: {node: '>=16'} - peerDependencies: - '@next/eslint-plugin-next': '>=12.3.0 <15' - eslint: '>=8.48.0 <9' - prettier: '>=3.0.0 <4' - typescript: '>=4.8.0 <6' - peerDependenciesMeta: - '@next/eslint-plugin-next': - optional: true - eslint: - optional: true - prettier: - optional: true - typescript: - optional: true + '@vercel/style-guide@5.2.0(@next/eslint-plugin-next@14.2.6)(eslint@8.57.1)(prettier@3.3.3)(typescript@5.5.4)': dependencies: '@babel/core': 7.25.2 '@babel/eslint-parser': 7.25.1(@babel/core@7.25.2)(eslint@8.57.1) '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) - eslint: 8.57.1 eslint-config-prettier: 9.1.0(eslint@8.57.1) - eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0) - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-alias: 1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1) eslint-plugin-eslint-comments: 3.2.0(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1) + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) - eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1) + eslint-plugin-playwright: 0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) eslint-plugin-testing-library: 6.3.0(eslint@8.57.1)(typescript@5.5.4) eslint-plugin-tsdoc: 0.2.17 eslint-plugin-unicorn: 48.0.1(eslint@8.57.1) - prettier: 3.3.3 prettier-plugin-packagejson: 2.5.2(prettier@3.3.3) + optionalDependencies: + '@next/eslint-plugin-next': 14.2.6 + eslint: 8.57.1 + prettier: 3.3.3 typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-node @@ -1212,116 +3530,69 @@ packages: - eslint-plugin-import-x - jest - supports-color - dev: true - /acorn-jsx@5.3.2(acorn@8.12.1): - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 - dev: true - /acorn-walk@8.3.4: - resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} - engines: {node: '>=0.4.0'} + acorn-walk@8.3.4: dependencies: acorn: 8.12.1 - dev: true - /acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} - engines: {node: '>=0.4.0'} - hasBin: true - dev: true + acorn@8.12.1: {} - /agent-base@7.1.1: - resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} - engines: {node: '>= 14'} + agent-base@7.1.1: dependencies: debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 - dev: true - /ajv@6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + 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 - dev: true - /ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} + ansi-escapes@4.3.2: dependencies: type-fest: 0.21.3 - dev: true - /ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - dev: true + ansi-regex@5.0.1: {} - /ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} - engines: {node: '>=12'} - dev: true + ansi-regex@6.1.0: + optional: true - /ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} + ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 - dev: true - /ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} + ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - dev: true - /ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - dev: true + ansi-styles@6.2.1: + optional: true - /arg@4.1.3: - resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} - dev: true + arg@4.1.3: {} - /argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - dev: true + argparse@2.0.1: {} - /aria-query@5.1.3: - resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + aria-query@5.1.3: dependencies: deep-equal: 2.2.3 - dev: true - /array-buffer-byte-length@1.0.1: - resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} - engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 is-array-buffer: 3.0.4 - dev: true - /array-includes@3.1.8: - resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} - engines: {node: '>= 0.4'} + array-includes@3.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1329,16 +3600,10 @@ packages: es-object-atoms: 1.0.0 get-intrinsic: 1.2.4 is-string: 1.0.7 - dev: true - /array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - dev: true + array-union@2.1.0: {} - /array.prototype.findlast@1.2.5: - resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} - engines: {node: '>= 0.4'} + array.prototype.findlast@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1346,11 +3611,8 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} - engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -1358,42 +3620,30 @@ packages: es-errors: 1.3.0 es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flat@1.3.2: - resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} - engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.flatmap@1.3.2: - resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} - engines: {node: '>= 0.4'} + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - dev: true - /array.prototype.tosorted@1.1.4: - resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} - engines: {node: '>= 0.4'} + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 - dev: true - /arraybuffer.prototype.slice@1.0.3: - resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} - engines: {node: '>= 0.4'} + arraybuffer.prototype.slice@1.0.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -1403,160 +3653,98 @@ packages: get-intrinsic: 1.2.4 is-array-buffer: 3.0.4 is-shared-array-buffer: 1.0.3 - dev: true - /ast-types-flow@0.0.8: - resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} - dev: true + ast-types-flow@0.0.8: {} - /ast-types@0.13.4: - resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} - engines: {node: '>=4'} + ast-types@0.13.4: dependencies: tslib: 2.7.0 - dev: true - /available-typed-arrays@1.0.7: - resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} - engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - dev: true - /axe-core@4.10.0: - resolution: {integrity: sha512-Mr2ZakwQ7XUAjp7pAwQWRhhK8mQQ6JAaNWSjmjxil0R8BPioMtQsTLOolGYkji1rcL++3dCqZA3zWqpT+9Ew6g==} - engines: {node: '>=4'} - dev: true + axe-core@4.10.0: {} - /axobject-query@4.1.0: - resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} - engines: {node: '>= 0.4'} - dev: true + axobject-query@4.1.0: {} - /balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - dev: true + balanced-match@1.0.2: {} - /base64-js@1.5.1: - resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - dev: true + base64-js@1.5.1: {} - /basic-ftp@5.0.5: - resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} - engines: {node: '>=10.0.0'} - dev: true + basic-ftp@5.0.5: {} - /bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bl@4.1.0: dependencies: buffer: 5.7.1 inherits: 2.0.4 readable-stream: 3.6.2 - dev: true - /brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.11: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - dev: true - /brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 - dev: true - /braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} + braces@3.0.3: dependencies: fill-range: 7.1.1 - dev: true - /browserslist@4.23.3: - resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true + browserslist@4.23.3: dependencies: caniuse-lite: 1.0.30001660 electron-to-chromium: 1.5.24 node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.3) - dev: true - /buffer@5.7.1: - resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - dev: true - /builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - dev: true + builtin-modules@3.3.0: {} - /busboy@1.6.0: - resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} - engines: {node: '>=10.16.0'} + busboy@1.6.0: dependencies: streamsearch: 1.1.0 - dev: false - /call-bind@1.0.7: - resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} - engines: {node: '>= 0.4'} + call-bind@1.0.7: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 get-intrinsic: 1.2.4 set-function-length: 1.2.2 - dev: true - /callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - dev: true + callsites@3.1.0: {} - /camel-case@3.0.0: - resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + camel-case@3.0.0: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /caniuse-lite@1.0.30001660: - resolution: {integrity: sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==} + caniuse-lite@1.0.30001660: {} - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 - dev: true - /chalk@3.0.0: - resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} - engines: {node: '>=8'} + chalk@3.0.0: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - dev: true - /change-case@3.1.0: - resolution: {integrity: sha512-2AZp7uJZbYEzRPsFoa+ijKdvp9zsrnnt6+yFokfwEpeJm0xuJDVoxiRCAaTzyJND8GJkofo2IcKWaUZ/OECVzw==} + change-case@3.1.0: dependencies: camel-case: 3.0.0 constant-case: 2.0.0 @@ -1576,180 +3764,107 @@ packages: title-case: 2.1.1 upper-case: 1.1.3 upper-case-first: 1.1.2 - dev: true - /chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} - dev: true + chardet@0.7.0: {} - /ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - dev: true + ci-info@3.9.0: {} - /clean-regexp@1.0.0: - resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} - engines: {node: '>=4'} + clean-regexp@1.0.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true + clean-stack@2.2.0: {} - /cli-cursor@3.1.0: - resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} - engines: {node: '>=8'} + cli-cursor@3.1.0: dependencies: restore-cursor: 3.1.0 - dev: true - /cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} - dev: true + cli-spinners@2.9.2: {} - /cli-width@3.0.0: - resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} - engines: {node: '>= 10'} - dev: true + cli-width@3.0.0: {} - /client-only@0.0.1: - resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} - dev: false + client-only@0.0.1: {} - /clone@1.0.4: - resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} - engines: {node: '>=0.8'} - dev: true + clone@1.0.4: {} - /color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + color-convert@1.9.3: dependencies: color-name: 1.1.3 - dev: true - /color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} + color-convert@2.0.1: dependencies: color-name: 1.1.4 - dev: true - /color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - dev: true + color-name@1.1.3: {} - /color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - dev: true + color-name@1.1.4: {} - /commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - dev: true + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + optional: true - /concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - dev: true + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + optional: true - /constant-case@2.0.0: - resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} + commander@10.0.1: {} + + concat-map@0.0.1: {} + + constant-case@2.0.0: dependencies: snake-case: 2.1.0 upper-case: 1.1.3 - dev: true - /convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true + convert-source-map@2.0.0: {} - /core-js-pure@3.38.1: - resolution: {integrity: sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==} - requiresBuild: true - dev: true + core-js-pure@3.38.1: {} - /create-require@1.1.1: - resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} - dev: true + create-require@1.1.1: {} - /cross-spawn@7.0.3: - resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} - engines: {node: '>= 8'} + cross-spawn@7.0.3: dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 - dev: true - /csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - dev: true + csstype@3.1.3: {} - /damerau-levenshtein@1.0.8: - resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} - dev: true + damerau-levenshtein@1.0.8: {} - /data-uri-to-buffer@6.0.2: - resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} - engines: {node: '>= 14'} - dev: true + data-uri-to-buffer@6.0.2: {} - /data-view-buffer@1.0.1: - resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} - engines: {node: '>= 0.4'} + data-view-buffer@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-length@1.0.1: - resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} - engines: {node: '>= 0.4'} + data-view-byte-length@1.0.1: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /data-view-byte-offset@1.0.0: - resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} - engines: {node: '>= 0.4'} + data-view-byte-offset@1.0.0: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-data-view: 1.0.1 - dev: true - /debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true + debug@3.2.7: dependencies: ms: 2.1.3 - dev: 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.3.7: dependencies: ms: 2.1.3 - dev: true - /deep-equal@2.2.3: - resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} - engines: {node: '>= 0.4'} + deep-equal@2.2.3: dependencies: array-buffer-byte-length: 1.0.1 call-bind: 1.0.7 @@ -1769,53 +3884,34 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - /deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - dev: true + deep-extend@0.6.0: {} - /deep-is@0.1.4: - resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - dev: true + deep-is@0.1.4: {} - /defaults@1.0.4: - resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defaults@1.0.4: dependencies: clone: 1.0.4 - dev: true - /define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} + define-data-property@1.1.4: dependencies: es-define-property: 1.0.0 es-errors: 1.3.0 gopd: 1.0.1 - dev: true - /define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} + define-properties@1.2.1: dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dev: true - /degenerator@5.0.1: - resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} - engines: {node: '>= 14'} + degenerator@5.0.1: dependencies: ast-types: 0.13.4 escodegen: 2.1.0 esprima: 4.0.1 - dev: true - /del@5.1.0: - resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} - engines: {node: '>=8'} + del@5.1.0: dependencies: globby: 10.0.2 graceful-fs: 4.2.11 @@ -1825,88 +3921,53 @@ packages: p-map: 3.0.0 rimraf: 3.0.2 slash: 3.0.0 - dev: true - /detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} - engines: {node: '>=12.20'} - dev: true + detect-indent@7.0.1: {} - /detect-newline@4.0.1: - resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: true + detect-libc@2.0.3: + optional: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} - dev: true + detect-newline@4.0.1: {} - /dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} + diff@4.0.2: {} + + dir-glob@3.0.1: dependencies: path-type: 4.0.0 - dev: true - /doctrine@2.1.0: - resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} - engines: {node: '>=0.10.0'} + doctrine@2.1.0: dependencies: esutils: 2.0.3 - dev: true - /doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} + doctrine@3.0.0: dependencies: esutils: 2.0.3 - dev: true - /dot-case@2.1.1: - resolution: {integrity: sha512-HnM6ZlFqcajLsyudHq7LeeLDr2rFAVYtDv/hV5qchQEidSck8j9OPUsXY9KwJv/lHMtYlX4DjRQqwFYa+0r8Ug==} + dot-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /dotenv@16.0.3: - resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} - engines: {node: '>=12'} - dev: true + dotenv@16.0.3: {} - /eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - dev: true + eastasianwidth@0.2.0: + optional: true - /electron-to-chromium@1.5.24: - resolution: {integrity: sha512-0x0wLCmpdKFCi9ulhvYZebgcPmHTkFVUfU2wzDykadkslKwT4oAmDTHEKLnlrDsMGZe4B+ksn8quZfZjYsBetA==} - dev: true + electron-to-chromium@1.5.24: {} - /emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - dev: true + emoji-regex@8.0.0: {} - /emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - dev: true + emoji-regex@9.2.2: {} - /enhanced-resolve@5.17.1: - resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} - engines: {node: '>=10.13.0'} + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - dev: true - /error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 - dev: true - /es-abstract@1.23.3: - resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} - engines: {node: '>= 0.4'} + es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 arraybuffer.prototype.slice: 1.0.3 @@ -1954,22 +4015,14 @@ packages: typed-array-length: 1.0.6 unbox-primitive: 1.0.2 which-typed-array: 1.1.15 - dev: true - /es-define-property@1.0.0: - resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} - engines: {node: '>= 0.4'} + es-define-property@1.0.0: dependencies: get-intrinsic: 1.2.4 - dev: true - /es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - dev: true + es-errors@1.3.0: {} - /es-get-iterator@1.1.3: - resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-get-iterator@1.1.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 @@ -1980,11 +4033,8 @@ packages: is-string: 1.0.7 isarray: 2.0.5 stop-iteration-iterator: 1.0.0 - dev: true - /es-iterator-helpers@1.0.19: - resolution: {integrity: sha512-zoMwbCcH5hwUkKJkT8kDIBZSz9I6mVG//+lDCinLCGov4+r7NIy0ld8o03M0cJxl2spVf6ESYVS6/gpIfq1FFw==} - engines: {node: '>= 0.4'} + es-iterator-helpers@1.0.19: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -2000,300 +4050,171 @@ packages: internal-slot: 1.0.7 iterator.prototype: 1.1.2 safe-array-concat: 1.1.2 - dev: true - /es-object-atoms@1.0.0: - resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} - engines: {node: '>= 0.4'} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 - dev: true - /es-set-tostringtag@2.0.3: - resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} - engines: {node: '>= 0.4'} + es-set-tostringtag@2.0.3: dependencies: get-intrinsic: 1.2.4 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true - /es-shim-unscopables@1.0.2: - resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + es-shim-unscopables@1.0.2: dependencies: hasown: 2.0.2 - dev: true - /es-to-primitive@1.2.1: - resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} - engines: {node: '>= 0.4'} + es-to-primitive@1.2.1: dependencies: is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 - dev: true - /escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - dev: true + escalade@3.2.0: {} - /escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - dev: true + escape-string-regexp@1.0.5: {} - /escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - dev: true + escape-string-regexp@4.0.0: {} - /escodegen@2.1.0: - resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} - engines: {node: '>=6.0'} - hasBin: true + escodegen@2.1.0: dependencies: esprima: 4.0.1 estraverse: 5.3.0 esutils: 2.0.3 optionalDependencies: source-map: 0.6.1 - dev: true - /eslint-config-next@14.2.6(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-z0URA5LO6y8lS/YLN0EDW/C4LEkDODjJzA37dvLVdzCPzuewjzTe1os5g3XclZAZrQ8X8hPaSMQ2JuVWwMmrTA==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true + eslint-config-next@15.0.3(eslint@8.57.1)(typescript@5.5.4): dependencies: - '@next/eslint-plugin-next': 14.2.6 + '@next/eslint-plugin-next': 15.0.3 '@rushstack/eslint-patch': 1.10.4 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1) + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) eslint-plugin-jsx-a11y: 6.10.0(eslint@8.57.1) eslint-plugin-react: 7.36.1(eslint@8.57.1) - eslint-plugin-react-hooks: 4.6.2(eslint@8.57.1) + eslint-plugin-react-hooks: 5.0.0(eslint@8.57.1) + optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: - eslint-import-resolver-webpack - eslint-plugin-import-x - supports-color - dev: true - /eslint-config-prettier@9.1.0(eslint@8.57.1): - resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} - hasBin: true - peerDependencies: - eslint: '>=7.0.0' + eslint-config-prettier@9.1.0(eslint@8.57.1): dependencies: eslint: 8.57.1 - dev: true - /eslint-config-turbo@2.1.2(eslint@8.57.1): - resolution: {integrity: sha512-UCNwxBrTOx0K41h1OrwMg7vPdGvcGSAlj40ZzpuUi0S2Muac2UOs+6F2dMYQiKg7lX2HAtyHXlF0T2wlWNHjGg==} - peerDependencies: - eslint: '>6.6.0' + eslint-config-turbo@2.1.2(eslint@8.57.1): dependencies: eslint: 8.57.1 eslint-plugin-turbo: 2.1.2(eslint@8.57.1) - dev: true - /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0): - resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} - engines: {node: '>= 4'} - peerDependencies: - eslint-plugin-import: '>=1.4.0' + eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.30.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1)): dependencies: - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) - dev: true + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1) - /eslint-import-resolver-node@0.3.9: - resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1): - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1): - resolution: {integrity: sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - eslint-plugin-import-x: '*' - peerDependenciesMeta: - eslint-plugin-import: - optional: true - eslint-plugin-import-x: - optional: true + eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.3.7 enhanced-resolve: 5.17.1 eslint: 8.57.1 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) - eslint-plugin-import: 2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) fast-glob: 3.3.2 get-tsconfig: 4.8.1 is-bun-module: 1.2.1 is-glob: 4.0.3 + optionalDependencies: + eslint-plugin-import: 2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - '@typescript-eslint/parser' - eslint-import-resolver-node - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-module-utils@2.11.0(@typescript-eslint/parser@6.21.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} - 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-module-utils@2.11.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint-plugin-import@2.30.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} - 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-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: + debug: 3.2.7 + optionalDependencies: '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) + eslint: 8.57.1 + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): + dependencies: debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - dev: true - /eslint-module-utils@2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - resolution: {integrity: sha512-gbBE5Hitek/oG6MUVj6sFuzEjA/ClzNflVrLovHi/JgLdC7fiN5gLAY1WIPW1a0V5I999MnsrvVrCOGmmVqDBQ==} - 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-module-utils@2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.30.0)(eslint@8.57.1) + eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1) transitivePeerDependencies: - supports-color - dev: true - /eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): - resolution: {integrity: sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==} - engines: {node: '>=6.5.0'} - peerDependencies: - eslint: '>=4.19.1' + eslint-plugin-eslint-comments@3.2.0(eslint@8.57.1): dependencies: escape-string-regexp: 1.0.5 eslint: 8.57.1 ignore: 5.3.2 - dev: true - /eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.1): - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2302,7 +4223,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0)(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) + eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -2312,24 +4233,16 @@ packages: object.values: 1.2.0 semver: 6.3.1 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-import@2.30.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1): - resolution: {integrity: sha512-/mHNE9jINJfiD2EKkg1BKyPyUk4zdnT54YgbOgfjSakWT5oyX/qQLVNTkehyfpcMxZXMy1zyonZ2v7hZTX43Yw==} - engines: {node: '>=4'} - peerDependencies: - '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - peerDependenciesMeta: - '@typescript-eslint/parser': - optional: true + eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): dependencies: '@rtsao/scc': 1.1.0 - '@typescript-eslint/parser': 7.2.0(eslint@8.57.1)(typescript@5.5.4) array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 @@ -2338,7 +4251,7 @@ packages: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.11.0(@typescript-eslint/parser@7.2.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.57.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -2347,39 +4260,26 @@ packages: object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 7.18.0(eslint@8.57.1)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - dev: true - /eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0 || ^7.0.0 - eslint: ^7.0.0 || ^8.0.0 - jest: '*' - peerDependenciesMeta: - '@typescript-eslint/eslint-plugin': - optional: true - jest: - optional: true + eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4): dependencies: - '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.1)(typescript@5.5.4) '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): - resolution: {integrity: sha512-ySOHvXX8eSN6zz8Bywacm7CvGNhUtdjvqfQDVe6020TUK34Cywkw7m0KsCCk1Qtm9G1FayfTN1/7mMYnYO2Bhg==} - engines: {node: '>=4.0'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + eslint-plugin-jsx-a11y@6.10.0(eslint@8.57.1): dependencies: aria-query: 5.1.3 array-includes: 3.1.8 @@ -2398,40 +4298,24 @@ packages: object.fromentries: 2.0.8 safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - dev: true - /eslint-plugin-only-warn@1.1.0: - resolution: {integrity: sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==} - engines: {node: '>=6'} - dev: true + eslint-plugin-only-warn@1.1.0: {} - /eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0)(eslint@8.57.1): - resolution: {integrity: sha512-DcHpF0SLbNeh9MT4pMzUGuUSnJ7q5MWbP8sSEFIMS6j7Ggnduq8ghNlfhURgty4c1YFny7Ge9xYTO1FSAoV2Vw==} - peerDependencies: - eslint: '>=7' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true + eslint-plugin-playwright@0.16.0(eslint-plugin-jest@27.9.0(@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1): dependencies: eslint: 8.57.1 - eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@6.21.0)(eslint@8.57.1)(typescript@5.5.4) - dev: true + optionalDependencies: + eslint-plugin-jest: 27.9.0(@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4))(eslint@8.57.1)(typescript@5.5.4) - /eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): - resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} - engines: {node: '>=10'} - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + eslint-plugin-react-hooks@4.6.2(eslint@8.57.1): dependencies: eslint: 8.57.1 - dev: true - /eslint-plugin-react@7.36.1(eslint@8.57.1): - resolution: {integrity: sha512-/qwbqNXZoq+VP30s1d4Nc1C5GTxjJQjk4Jzs4Wq2qzxFM7dSmuG2UkIjg2USMLh3A/aVcUNrK7v0J5U1XEGGwA==} - engines: {node: '>=4'} - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 + eslint-plugin-react-hooks@5.0.0(eslint@8.57.1): + dependencies: + eslint: 8.57.1 + + eslint-plugin-react@7.36.1(eslint@8.57.1): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 @@ -2452,42 +4336,26 @@ packages: semver: 6.3.1 string.prototype.matchall: 4.0.11 string.prototype.repeat: 1.0.0 - dev: true - /eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): - resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} - peerDependencies: - eslint: ^7.5.0 || ^8.0.0 + eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.5.4): dependencies: '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.5.4) eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript - dev: true - /eslint-plugin-tsdoc@0.2.17: - resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==} + eslint-plugin-tsdoc@0.2.17: dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - dev: true - /eslint-plugin-turbo@2.1.2(eslint@8.57.1): - resolution: {integrity: sha512-q2ikGubfVLZDPEKliiuubZc3sI5oqbKIZJ6fRi6Bldv8E3cMNH3Qt7g6hXZV4+GxwQbzEEteCYSBNbOn1DBqRg==} - peerDependencies: - eslint: '>6.6.0' + eslint-plugin-turbo@2.1.2(eslint@8.57.1): dependencies: dotenv: 16.0.3 eslint: 8.57.1 - dev: true - /eslint-plugin-unicorn@48.0.1(eslint@8.57.1): - resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==} - engines: {node: '>=16'} - peerDependencies: - eslint: '>=8.44.0' + eslint-plugin-unicorn@48.0.1(eslint@8.57.1): dependencies: '@babel/helper-validator-identifier': 7.24.7 '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) @@ -2505,38 +4373,22 @@ packages: regjsparser: 0.10.0 semver: 7.6.3 strip-indent: 3.0.0 - dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} + eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - dev: true - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true + eslint-visitor-keys@2.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} - dev: true + eslint-visitor-keys@3.4.3: {} - /eslint@8.57.1: - resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true + eslint@8.57.1: dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@eslint-community/regexpp': 4.11.1 @@ -2578,55 +4430,30 @@ packages: text-table: 0.2.0 transitivePeerDependencies: - supports-color - dev: true - /espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: dependencies: acorn: 8.12.1 acorn-jsx: 5.3.2(acorn@8.12.1) eslint-visitor-keys: 3.4.3 - dev: true - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true + esprima@4.0.1: {} - /esquery@1.6.0: - resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} - engines: {node: '>=0.10'} + esquery@1.6.0: dependencies: estraverse: 5.3.0 - dev: true - /esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 - dev: true - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true + estraverse@4.3.0: {} - /estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - dev: true + estraverse@5.3.0: {} - /esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - dev: true + esutils@2.0.3: {} - /execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} + execa@5.1.1: dependencies: cross-spawn: 7.0.3 get-stream: 6.0.1 @@ -2637,194 +4464,129 @@ packages: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 - dev: true - /external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} + external-editor@3.1.0: dependencies: chardet: 0.7.0 iconv-lite: 0.4.24 tmp: 0.0.33 - dev: true - /fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - dev: true + fast-deep-equal@3.1.3: {} - /fast-glob@3.3.2: - resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} - engines: {node: '>=8.6.0'} + fast-glob@3.3.1: 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 - dev: true - /fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - dev: true + fast-glob@3.3.2: + 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-levenshtein@2.0.6: - resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - dev: true + fast-json-stable-stringify@2.1.0: {} - /fastq@1.17.1: - resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + fast-levenshtein@2.0.6: {} + + fastq@1.17.1: dependencies: reusify: 1.0.4 - dev: true - /figures@3.2.0: - resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} - engines: {node: '>=8'} + figures@3.2.0: dependencies: escape-string-regexp: 1.0.5 - dev: true - /file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - dev: true - /fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - dev: true - /find-up@4.1.0: - resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} - engines: {node: '>=8'} + find-up@4.1.0: dependencies: locate-path: 5.0.0 path-exists: 4.0.0 - dev: true - /find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} + find-up@5.0.0: dependencies: locate-path: 6.0.0 path-exists: 4.0.0 - dev: true - /flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@3.2.0: dependencies: flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 - dev: true - /flatted@3.3.1: - resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - dev: true + flatted@3.3.1: {} - /for-each@0.3.3: - resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.3: dependencies: is-callable: 1.2.7 - dev: true - /foreground-child@3.3.0: - resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} - engines: {node: '>=14'} + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - dev: true + optional: true - /fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs-extra@11.2.0: - resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} - engines: {node: '>=14.14'} + fs-extra@11.2.0: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.1 - dev: true - /fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - dev: true + fs.realpath@1.0.0: {} - /function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - dev: true + function-bind@1.1.2: {} - /function.prototype.name@1.1.6: - resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} - engines: {node: '>= 0.4'} + function.prototype.name@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 functions-have-names: 1.2.3 - dev: true - /functions-have-names@1.2.3: - resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} - dev: true + functions-have-names@1.2.3: {} - /gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - dev: true + gensync@1.0.0-beta.2: {} - /get-intrinsic@1.2.4: - resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} - engines: {node: '>= 0.4'} + get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 function-bind: 1.1.2 has-proto: 1.0.3 has-symbols: 1.0.3 hasown: 2.0.2 - dev: true - /get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - dev: true + get-stdin@9.0.0: {} - /get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - dev: true + get-stream@6.0.1: {} - /get-symbol-description@1.0.2: - resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} - engines: {node: '>= 0.4'} + get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - dev: true - /get-tsconfig@4.8.1: - resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 - dev: true - /get-uri@6.0.3: - resolution: {integrity: sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==} - engines: {node: '>= 14'} + get-uri@6.0.3: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 @@ -2832,41 +4594,27 @@ packages: fs-extra: 11.2.0 transitivePeerDependencies: - supports-color - dev: true - /git-hooks-list@3.1.0: - resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} - dev: true + git-hooks-list@3.1.0: {} - /glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - dev: true - /glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} + glob-parent@6.0.2: dependencies: is-glob: 4.0.3 - dev: true - /glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true + glob@10.3.10: dependencies: foreground-child: 3.3.0 jackspeak: 2.3.6 minimatch: 9.0.5 minipass: 7.1.2 path-scurry: 1.11.1 - dev: true + optional: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - deprecated: Glob versions prior to v9 are no longer supported + glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -2874,31 +4622,19 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /globals@11.12.0: - resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} - engines: {node: '>=4'} - dev: true + globals@11.12.0: {} - /globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@13.24.0: dependencies: type-fest: 0.20.2 - dev: true - /globalthis@1.0.4: - resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} - engines: {node: '>= 0.4'} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 gopd: 1.0.1 - dev: true - /globby@10.0.2: - resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} - engines: {node: '>=8'} + globby@10.0.2: dependencies: '@types/glob': 7.2.0 array-union: 2.1.0 @@ -2908,11 +4644,8 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 @@ -2920,44 +4653,29 @@ packages: ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 - dev: true - /globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@13.2.2: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 - dev: true - /gopd@1.0.1: - resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.0.1: dependencies: get-intrinsic: 1.2.4 - dev: true - /graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + graceful-fs@4.2.11: {} - /gradient-string@2.0.2: - resolution: {integrity: sha512-rEDCuqUQ4tbD78TpzsMtt5OIf0cBCSDWSJtUDaF6JsAh+k0v9r++NzxNEG87oDZx9ZwGhD8DaezR2L/yrw0Jdw==} - engines: {node: '>=10'} + gradient-string@2.0.2: dependencies: chalk: 4.1.2 tinygradient: 1.1.5 - dev: true - /graphemer@1.4.0: - resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - dev: true + graphemer@1.4.0: {} - /handlebars@4.7.8: - resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} - engines: {node: '>=0.4.7'} - hasBin: true + handlebars@4.7.8: dependencies: minimist: 1.2.8 neo-async: 2.6.2 @@ -2965,141 +4683,79 @@ packages: wordwrap: 1.0.0 optionalDependencies: uglify-js: 3.19.3 - dev: true - /has-bigints@1.0.2: - resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - dev: true + has-bigints@1.0.2: {} - /has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - dev: true + has-flag@3.0.0: {} - /has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - dev: true + has-flag@4.0.0: {} - /has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 - dev: true - /has-proto@1.0.3: - resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} - engines: {node: '>= 0.4'} - dev: true + has-proto@1.0.3: {} - /has-symbols@1.0.3: - resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} - engines: {node: '>= 0.4'} - dev: true + has-symbols@1.0.3: {} - /has-tostringtag@1.0.2: - resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} - engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: dependencies: has-symbols: 1.0.3 - dev: true - /hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} + hasown@2.0.2: dependencies: function-bind: 1.1.2 - dev: true - /header-case@1.0.1: - resolution: {integrity: sha512-i0q9mkOeSuhXw6bGgiQCCBgY/jlZuV/7dZXyZ9c6LcBrqwvT8eT719E9uxE5LiZftdl+z81Ugbg/VvXV4OJOeQ==} + header-case@1.0.1: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /hosted-git-info@2.8.9: - resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} - dev: true + hosted-git-info@2.8.9: {} - /http-proxy-agent@7.0.2: - resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} - engines: {node: '>= 14'} + http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.1 debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /https-proxy-agent@7.0.5: - resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} - engines: {node: '>= 14'} + https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 debug: 4.3.7 transitivePeerDependencies: - supports-color - dev: true - /human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - dev: true + human-signals@2.1.0: {} - /iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 - dev: true - /ieee754@1.2.1: - resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - dev: true + ieee754@1.2.1: {} - /ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - dev: true + ignore@5.3.2: {} - /import-fresh@3.3.0: - resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} - engines: {node: '>=6'} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - dev: true - /imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - dev: true + imurmurhash@0.1.4: {} - /indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - dev: true + indent-string@4.0.0: {} - /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. + inflight@1.0.6: dependencies: once: 1.4.0 wrappy: 1.0.2 - dev: true - /inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true + inherits@2.0.4: {} - /ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - dev: true + ini@1.3.8: {} - /inquirer@7.3.3: - resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} - engines: {node: '>=8.0.0'} + inquirer@7.3.3: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3114,11 +4770,8 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 through: 2.3.8 - dev: true - /inquirer@8.2.6: - resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==} - engines: {node: '>=12.0.0'} + inquirer@8.2.6: dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 @@ -3135,619 +4788,349 @@ packages: strip-ansi: 6.0.1 through: 2.3.8 wrap-ansi: 6.2.0 - dev: true - /internal-slot@1.0.7: - resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} - engines: {node: '>= 0.4'} + internal-slot@1.0.7: dependencies: es-errors: 1.3.0 hasown: 2.0.2 side-channel: 1.0.6 - dev: true - /ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} - engines: {node: '>= 12'} + ip-address@9.0.5: dependencies: jsbn: 1.1.0 sprintf-js: 1.1.3 - dev: true - /is-arguments@1.1.1: - resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} - engines: {node: '>= 0.4'} + is-arguments@1.1.1: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-array-buffer@3.0.4: - resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} - engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - dev: true + is-arrayish@0.2.1: {} - /is-async-function@2.0.0: - resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} - engines: {node: '>= 0.4'} + is-arrayish@0.3.2: + optional: true + + is-async-function@2.0.0: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-bigint@1.0.4: - resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + is-bigint@1.0.4: dependencies: has-bigints: 1.0.2 - dev: true - /is-boolean-object@1.1.2: - resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} - engines: {node: '>= 0.4'} + is-boolean-object@1.1.2: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 - dev: true - /is-bun-module@1.2.1: - resolution: {integrity: sha512-AmidtEM6D6NmUiLOvvU7+IePxjEjOzra2h0pSrsfSAcXwl/83zLLXDByafUJy9k/rKK0pvXMLdwKwGHlX2Ke6Q==} + is-bun-module@1.2.1: dependencies: semver: 7.6.3 - dev: true - /is-callable@1.2.7: - resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} - engines: {node: '>= 0.4'} - dev: true + is-callable@1.2.7: {} - /is-core-module@2.15.1: - resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} - engines: {node: '>= 0.4'} + is-core-module@2.15.1: dependencies: hasown: 2.0.2 - dev: true - /is-data-view@1.0.1: - resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} - engines: {node: '>= 0.4'} + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 - dev: true - /is-date-object@1.0.5: - resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} - engines: {node: '>= 0.4'} + is-date-object@1.0.5: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - dev: true + is-extglob@2.1.1: {} - /is-finalizationregistry@1.0.2: - resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + is-finalizationregistry@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - dev: true + is-fullwidth-code-point@3.0.0: {} - /is-generator-function@1.0.10: - resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} - engines: {node: '>= 0.4'} + is-generator-function@1.0.10: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} + is-glob@4.0.3: dependencies: is-extglob: 2.1.1 - dev: true - /is-interactive@1.0.0: - resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} - engines: {node: '>=8'} - dev: true + is-interactive@1.0.0: {} - /is-lower-case@1.1.3: - resolution: {integrity: sha512-+5A1e/WJpLLXZEDlgz4G//WYSHyQBD32qa4Jd3Lw06qQlv3fJHnp3YIHjTQSGzHMgzmVKz2ZP3rBxTHkPw/lxA==} + is-lower-case@1.1.3: dependencies: lower-case: 1.1.4 - dev: true - /is-map@2.0.3: - resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} - engines: {node: '>= 0.4'} - dev: true + is-map@2.0.3: {} - /is-negative-zero@2.0.3: - resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} - engines: {node: '>= 0.4'} - dev: true + is-negative-zero@2.0.3: {} - /is-number-object@1.0.7: - resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} - engines: {node: '>= 0.4'} + is-number-object@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - - /is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - dev: true - /is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - dev: true + is-number@7.0.0: {} - /is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - dev: true + is-path-cwd@2.2.0: {} - /is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - dev: true + is-path-inside@3.0.3: {} - /is-regex@1.1.4: - resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} - engines: {node: '>= 0.4'} + is-plain-obj@4.1.0: {} + + is-regex@1.1.4: dependencies: call-bind: 1.0.7 has-tostringtag: 1.0.2 - dev: true - /is-set@2.0.3: - resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} - engines: {node: '>= 0.4'} - dev: true + is-set@2.0.3: {} - /is-shared-array-buffer@1.0.3: - resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} - engines: {node: '>= 0.4'} + is-shared-array-buffer@1.0.3: dependencies: call-bind: 1.0.7 - dev: true - /is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - dev: true + is-stream@2.0.1: {} - /is-string@1.0.7: - resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} - engines: {node: '>= 0.4'} + is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 - dev: true - /is-symbol@1.0.4: - resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} - engines: {node: '>= 0.4'} + is-symbol@1.0.4: dependencies: has-symbols: 1.0.3 - dev: true - /is-typed-array@1.1.13: - resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} - engines: {node: '>= 0.4'} + is-typed-array@1.1.13: dependencies: which-typed-array: 1.1.15 - dev: true - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true + is-unicode-supported@0.1.0: {} - /is-upper-case@1.1.2: - resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} + is-upper-case@1.1.2: dependencies: upper-case: 1.1.3 - dev: true - /is-weakmap@2.0.2: - resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} - engines: {node: '>= 0.4'} - dev: true + is-weakmap@2.0.2: {} - /is-weakref@1.0.2: - resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + is-weakref@1.0.2: dependencies: call-bind: 1.0.7 - dev: true - /is-weakset@2.0.3: - resolution: {integrity: sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==} - engines: {node: '>= 0.4'} + is-weakset@2.0.3: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 - dev: true - /isarray@2.0.5: - resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} - dev: true + isarray@2.0.5: {} - /isbinaryfile@4.0.10: - resolution: {integrity: sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==} - engines: {node: '>= 8.0.0'} - dev: true + isbinaryfile@4.0.10: {} - /isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - dev: true + isexe@2.0.0: {} - /iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + iterator.prototype@1.1.2: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 has-symbols: 1.0.3 reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - dev: true - /jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@2.3.6: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - dev: true + optional: true - /jju@1.4.0: - resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} - dev: true + jju@1.4.0: {} - /js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + js-tokens@4.0.0: {} - /js-yaml@4.1.0: - resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} - hasBin: true + js-yaml@4.1.0: dependencies: argparse: 2.0.1 - dev: true - /jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - dev: true + jsbn@1.1.0: {} - /jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - dev: true + jsesc@0.5.0: {} - /jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} - hasBin: true - dev: true + jsesc@2.5.2: {} - /jsesc@3.0.2: - resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} - engines: {node: '>=6'} - hasBin: true - dev: true + jsesc@3.0.2: {} - /json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - dev: true + json-buffer@3.0.1: {} - /json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - dev: true + json-parse-even-better-errors@2.3.1: {} - /json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - dev: true + json-schema-traverse@0.4.1: {} - /json-stable-stringify-without-jsonify@1.0.1: - resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - dev: true + json-stable-stringify-without-jsonify@1.0.1: {} - /json5@1.0.2: - resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} - hasBin: true + json5@1.0.2: dependencies: minimist: 1.2.8 - dev: true - /json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - dev: true + json5@2.2.3: {} - /jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.1.0: dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: true - /jsx-ast-utils@3.3.5: - resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} - engines: {node: '>=4.0'} + jsx-ast-utils@3.3.5: dependencies: array-includes: 3.1.8 array.prototype.flat: 1.3.2 object.assign: 4.1.5 object.values: 1.2.0 - dev: true - /keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + keyv@4.5.4: dependencies: json-buffer: 3.0.1 - dev: true - /language-subtag-registry@0.3.23: - resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==} - dev: true + language-subtag-registry@0.3.23: {} - /language-tags@1.0.9: - resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} - engines: {node: '>=0.10'} + language-tags@1.0.9: dependencies: language-subtag-registry: 0.3.23 - dev: true - /levn@0.4.1: - resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} - engines: {node: '>= 0.8.0'} + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - dev: true - /lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - dev: true + lines-and-columns@1.2.4: {} - /locate-path@5.0.0: - resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} - engines: {node: '>=8'} + locate-path@5.0.0: dependencies: p-locate: 4.1.0 - dev: true - /locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} + locate-path@6.0.0: dependencies: p-locate: 5.0.0 - dev: true - /lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - dev: true + lodash.get@4.4.2: {} - /lodash.merge@4.6.2: - resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - dev: true + lodash.merge@4.6.2: {} - /lodash@4.17.21: - resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - dev: true + lodash@4.17.21: {} - /log-symbols@3.0.0: - resolution: {integrity: sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==} - engines: {node: '>=8'} + log-symbols@3.0.0: dependencies: chalk: 2.4.2 - dev: true - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} + log-symbols@4.1.0: dependencies: chalk: 4.1.2 is-unicode-supported: 0.1.0 - dev: true - /loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - /lower-case-first@1.0.2: - resolution: {integrity: sha512-UuxaYakO7XeONbKrZf5FEgkantPf5DUqDayzP5VXZrtRPdH86s4kN47I8B3TW10S4QKiE3ziHNf3kRN//okHjA==} + lower-case-first@1.0.2: dependencies: lower-case: 1.1.4 - dev: true - /lower-case@1.1.4: - resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} - dev: true + lower-case@1.1.4: {} - /lru-cache@10.4.3: - resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - dev: true + lru-cache@10.4.3: + optional: true - /lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 - dev: true - /lru-cache@7.18.3: - resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} - engines: {node: '>=12'} - dev: true + lru-cache@7.18.3: {} - /make-error@1.3.6: - resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} - dev: true + make-error@1.3.6: {} - /merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - dev: true + merge-stream@2.0.0: {} - /merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - dev: true + merge2@1.4.1: {} - /micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 - dev: true - /mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - dev: true + mimic-fn@2.1.0: {} - /min-indent@1.0.1: - resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} - engines: {node: '>=4'} - dev: true + min-indent@1.0.1: {} - /minimatch@3.1.2: - resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 - dev: true - /minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.3: dependencies: brace-expansion: 2.0.1 - dev: true - /minimatch@9.0.5: - resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} - engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - dev: true - /minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - dev: true + minimist@1.2.8: {} - /minipass@7.1.2: - resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} - engines: {node: '>=16 || 14 >=14.17'} - dev: true + minipass@7.1.2: + optional: true - /mkdirp@0.5.6: - resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} - hasBin: true + mkdirp@0.5.6: dependencies: minimist: 1.2.8 - dev: true - /ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - dev: true + ms@2.1.3: {} - /mute-stream@0.0.8: - resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - dev: true + mute-stream@0.0.8: {} - /nanoid@3.3.7: - resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: false + nanoid@3.3.7: {} - /natural-compare@1.4.0: - resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - dev: true + natural-compare@1.4.0: {} - /neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: true + neo-async@2.6.2: {} - /netmask@2.0.2: - resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} - engines: {node: '>= 0.4.0'} - dev: true + netmask@2.0.2: {} - /next@14.2.6(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-57Su7RqXs5CBKKKOagt8gPhMM3CpjgbeQhrtei2KLAA1vTNm7jfKS+uDARkSW8ZETUflDCBIsUKGSyQdRs4U4g==} - engines: {node: '>=18.17.0'} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - react: ^18.2.0 - react-dom: ^18.2.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - sass: - optional: true + next@15.0.3(react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106))(react@19.0.0-rc-66855b96-20241106): dependencies: - '@next/env': 14.2.6 - '@swc/helpers': 0.5.5 + '@next/env': 15.0.3 + '@swc/counter': 0.1.3 + '@swc/helpers': 0.5.13 busboy: 1.6.0 caniuse-lite: 1.0.30001660 - graceful-fs: 4.2.11 postcss: 8.4.31 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - styled-jsx: 5.1.1(react@18.3.1) + react: 19.0.0-rc-66855b96-20241106 + react-dom: 19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106) + styled-jsx: 5.1.6(react@19.0.0-rc-66855b96-20241106) optionalDependencies: - '@next/swc-darwin-arm64': 14.2.6 - '@next/swc-darwin-x64': 14.2.6 - '@next/swc-linux-arm64-gnu': 14.2.6 - '@next/swc-linux-arm64-musl': 14.2.6 - '@next/swc-linux-x64-gnu': 14.2.6 - '@next/swc-linux-x64-musl': 14.2.6 - '@next/swc-win32-arm64-msvc': 14.2.6 - '@next/swc-win32-ia32-msvc': 14.2.6 - '@next/swc-win32-x64-msvc': 14.2.6 + '@next/swc-darwin-arm64': 15.0.3 + '@next/swc-darwin-x64': 15.0.3 + '@next/swc-linux-arm64-gnu': 15.0.3 + '@next/swc-linux-arm64-musl': 15.0.3 + '@next/swc-linux-x64-gnu': 15.0.3 + '@next/swc-linux-x64-musl': 15.0.3 + '@next/swc-win32-arm64-msvc': 15.0.3 + '@next/swc-win32-x64-msvc': 15.0.3 + sharp: 0.33.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros - dev: false - /no-case@2.3.2: - resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + no-case@2.3.2: dependencies: lower-case: 1.1.4 - dev: true - /node-plop@0.26.3: - resolution: {integrity: sha512-Cov028YhBZ5aB7MdMWJEmwyBig43aGL5WT4vdoB28Oitau1zZAcHUn8Sgfk9HM33TqhtLJ9PlM/O0Mv+QpV/4Q==} - engines: {node: '>=8.9.4'} + node-plop@0.26.3: dependencies: '@babel/runtime-corejs3': 7.25.6 '@types/inquirer': 6.5.0 @@ -3760,114 +5143,72 @@ packages: lodash.get: 4.4.2 mkdirp: 0.5.6 resolve: 1.22.8 - dev: true - /node-releases@2.0.18: - resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} - dev: true + node-releases@2.0.18: {} - /normalize-package-data@2.5.0: - resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 resolve: 1.22.8 semver: 5.7.2 validate-npm-package-license: 3.0.4 - dev: true - /npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} + npm-run-path@4.0.1: dependencies: path-key: 3.1.1 - dev: true - /object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - dev: true + object-assign@4.1.1: {} - /object-inspect@1.13.2: - resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} - engines: {node: '>= 0.4'} - dev: true + object-inspect@1.13.2: {} - /object-is@1.1.6: - resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} - engines: {node: '>= 0.4'} + object-is@1.1.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - dev: true - /object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - dev: true + object-keys@1.1.1: {} - /object.assign@4.1.5: - resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} - engines: {node: '>= 0.4'} + object.assign@4.1.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 - dev: true - /object.entries@1.1.8: - resolution: {integrity: sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==} - engines: {node: '>= 0.4'} + object.entries@1.1.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /object.fromentries@2.0.8: - resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} - engines: {node: '>= 0.4'} + object.fromentries@2.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /object.groupby@1.0.3: - resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} - engines: {node: '>= 0.4'} + object.groupby@1.0.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /object.values@1.2.0: - resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==} - engines: {node: '>= 0.4'} + object.values@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + once@1.4.0: dependencies: wrappy: 1.0.2 - dev: true - /onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 - dev: true - /optionator@0.9.4: - resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} - engines: {node: '>= 0.8.0'} + optionator@0.9.4: dependencies: deep-is: 0.1.4 fast-levenshtein: 2.0.6 @@ -3875,11 +5216,8 @@ packages: prelude-ls: 1.2.1 type-check: 0.4.0 word-wrap: 1.2.5 - dev: true - /ora@4.1.1: - resolution: {integrity: sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==} - engines: {node: '>=8'} + ora@4.1.1: dependencies: chalk: 3.0.0 cli-cursor: 3.1.0 @@ -3889,11 +5227,8 @@ packages: mute-stream: 0.0.8 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /ora@5.4.1: - resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} - engines: {node: '>=10'} + ora@5.4.1: dependencies: bl: 4.1.0 chalk: 4.1.2 @@ -3904,56 +5239,32 @@ packages: log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 - dev: true - /os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - dev: true + os-tmpdir@1.0.2: {} - /p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} + p-limit@2.3.0: dependencies: p-try: 2.2.0 - dev: true - /p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} + p-limit@3.1.0: dependencies: yocto-queue: 0.1.0 - dev: true - /p-locate@4.1.0: - resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} - engines: {node: '>=8'} + p-locate@4.1.0: dependencies: p-limit: 2.3.0 - dev: true - /p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} + p-locate@5.0.0: dependencies: p-limit: 3.1.0 - dev: true - /p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} + p-map@3.0.0: dependencies: aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - dev: true + p-try@2.2.0: {} - /pac-proxy-agent@7.0.2: - resolution: {integrity: sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==} - engines: {node: '>= 14'} + pac-proxy-agent@7.0.2: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 @@ -3965,146 +5276,84 @@ packages: socks-proxy-agent: 8.0.4 transitivePeerDependencies: - supports-color - dev: true - /pac-resolver@7.0.1: - resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} - engines: {node: '>= 14'} + pac-resolver@7.0.1: dependencies: degenerator: 5.0.1 netmask: 2.0.2 - dev: true - /param-case@2.1.1: - resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + param-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} + parent-module@1.0.1: dependencies: callsites: 3.1.0 - dev: true - /parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - dev: true - /pascal-case@2.0.1: - resolution: {integrity: sha512-qjS4s8rBOJa2Xm0jmxXiyh1+OFf6ekCWOvUaRgAQSktzlTbMotS0nmG9gyYAybCWBcuP4fsBeRCKNwGBnMe2OQ==} + pascal-case@2.0.1: dependencies: camel-case: 3.0.0 upper-case-first: 1.1.2 - dev: true - /path-case@2.1.1: - resolution: {integrity: sha512-Ou0N05MioItesaLr9q8TtHVWmJ6fxWdqKB2RohFmNWVyJ+2zeKIeDNWAN6B/Pe7wpzWChhZX6nONYmOnMeJQ/Q==} + path-case@2.1.1: dependencies: no-case: 2.3.2 - dev: true - /path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - dev: true + path-exists@4.0.0: {} - /path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - dev: true + path-is-absolute@1.0.1: {} - /path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - dev: true + path-key@3.1.1: {} - /path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - dev: true + path-parse@1.0.7: {} - /path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} + path-scurry@1.11.1: dependencies: lru-cache: 10.4.3 minipass: 7.1.2 - dev: true + optional: true - /path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - dev: true + path-type@4.0.0: {} - /picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.0: {} - /picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} - engines: {node: '>=8.6'} - dev: true + picomatch@2.3.1: {} - /pluralize@8.0.0: - resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} - engines: {node: '>=4'} - dev: true + pluralize@8.0.0: {} - /possible-typed-array-names@1.0.0: - resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} - engines: {node: '>= 0.4'} - dev: true + possible-typed-array-names@1.0.0: {} - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} - engines: {node: ^10 || ^12 || >=14} + postcss@8.4.31: dependencies: nanoid: 3.3.7 picocolors: 1.1.0 source-map-js: 1.2.1 - dev: false - /prelude-ls@1.2.1: - resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} - engines: {node: '>= 0.8.0'} - dev: true + prelude-ls@1.2.1: {} - /prettier-plugin-packagejson@2.5.2(prettier@3.3.3): - resolution: {integrity: sha512-w+TmoLv2pIa+siplW1cCj2ujEXQQS6z7wmWLOiLQK/2QVl7Wy6xh/ZUpqQw8tbKMXDodmSW4GONxlA33xpdNOg==} - peerDependencies: - prettier: '>= 1.16.0' - peerDependenciesMeta: - prettier: - optional: true + prettier-plugin-packagejson@2.5.2(prettier@3.3.3): dependencies: - prettier: 3.3.3 sort-package-json: 2.10.1 synckit: 0.9.1 - dev: true + optionalDependencies: + prettier: 3.3.3 - /prettier@3.3.3: - resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} - engines: {node: '>=14'} - hasBin: true - dev: true + prettier@3.3.3: {} - /prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - dev: true - /proxy-agent@6.4.0: - resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} - engines: {node: '>= 14'} + proxy-agent@6.4.0: dependencies: agent-base: 7.1.1 debug: 4.3.7 @@ -4116,83 +5365,56 @@ packages: socks-proxy-agent: 8.0.4 transitivePeerDependencies: - supports-color - dev: true - /proxy-from-env@1.1.0: - resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - dev: true + proxy-from-env@1.1.0: {} - /punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - dev: true + punycode@2.3.1: {} - /queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - dev: true + queue-microtask@1.2.3: {} - /rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true + rc@1.2.8: dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 - dev: true - /react-dom@18.3.1(react@18.3.1): - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 + react-dom@19.0.0-rc-5c56b873-20241107(react@19.0.0-rc-5c56b873-20241107): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - dev: false + react: 19.0.0-rc-5c56b873-20241107 + scheduler: 0.25.0-rc-5c56b873-20241107 - /react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - dev: true - - /react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react-dom@19.0.0-rc-66855b96-20241106(react@19.0.0-rc-66855b96-20241106): dependencies: - loose-envify: 1.4.0 - dev: false + react: 19.0.0-rc-66855b96-20241106 + scheduler: 0.25.0-rc-66855b96-20241106 - /read-pkg-up@7.0.1: - resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} - engines: {node: '>=8'} + react-is@16.13.1: {} + + react@19.0.0-rc-5c56b873-20241107: {} + + react@19.0.0-rc-66855b96-20241106: {} + + read-pkg-up@7.0.1: dependencies: find-up: 4.1.0 read-pkg: 5.2.0 type-fest: 0.8.1 - dev: true - /read-pkg@5.2.0: - resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} - engines: {node: '>=8'} + read-pkg@5.2.0: dependencies: '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 - dev: true - /readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} + readable-stream@3.6.2: dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 - dev: true - /reflect.getprototypeof@1.0.6: - resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} - engines: {node: '>= 0.4'} + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -4201,186 +5423,110 @@ packages: get-intrinsic: 1.2.4 globalthis: 1.0.4 which-builtin-type: 1.1.4 - dev: true - /regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - dev: true + regenerator-runtime@0.14.1: {} - /regexp-tree@0.1.27: - resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} - hasBin: true - dev: true + regexp-tree@0.1.27: {} - /regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} - engines: {node: '>= 0.4'} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - dev: true - /registry-auth-token@3.3.2: - resolution: {integrity: sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==} + registry-auth-token@3.3.2: dependencies: rc: 1.2.8 safe-buffer: 5.2.1 - dev: true - - /registry-url@3.1.0: - resolution: {integrity: sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==} - engines: {node: '>=0.10.0'} + + registry-url@3.1.0: dependencies: rc: 1.2.8 - dev: true - /regjsparser@0.10.0: - resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} - hasBin: true + regjsparser@0.10.0: dependencies: jsesc: 0.5.0 - dev: true - /resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - dev: true + resolve-from@4.0.0: {} - /resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - dev: true + resolve-pkg-maps@1.0.0: {} - /resolve@1.19.0: - resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==} + resolve@1.19.0: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 - dev: true - /resolve@1.22.8: - resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} - hasBin: true + resolve@1.22.8: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /resolve@2.0.0-next.5: - resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} - hasBin: true + resolve@2.0.0-next.5: dependencies: is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - dev: true - /restore-cursor@3.1.0: - resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} - engines: {node: '>=8'} + restore-cursor@3.1.0: dependencies: onetime: 5.1.2 signal-exit: 3.0.7 - dev: true - /reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - dev: true + reusify@1.0.4: {} - /rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true + rimraf@3.0.2: dependencies: glob: 7.2.3 - dev: true - /run-async@2.4.1: - resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} - engines: {node: '>=0.12.0'} - dev: true + run-async@2.4.1: {} - /run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 - dev: true - /rxjs@6.6.7: - resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} - engines: {npm: '>=2.0.0'} + rxjs@6.6.7: dependencies: tslib: 1.14.1 - dev: true - /rxjs@7.8.1: - resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + rxjs@7.8.1: dependencies: tslib: 2.7.0 - dev: true - /safe-array-concat@1.1.2: - resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} - engines: {node: '>=0.4'} + safe-array-concat@1.1.2: dependencies: call-bind: 1.0.7 get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 - dev: true - /safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - dev: true + safe-buffer@5.2.1: {} - /safe-regex-test@1.0.3: - resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} - engines: {node: '>= 0.4'} + safe-regex-test@1.0.3: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-regex: 1.1.4 - dev: true - /safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true + safer-buffer@2.1.2: {} - /scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - dependencies: - loose-envify: 1.4.0 - dev: false + scheduler@0.25.0-rc-5c56b873-20241107: {} - /semver@5.7.2: - resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} - hasBin: true - dev: true + scheduler@0.25.0-rc-66855b96-20241106: {} - /semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - dev: true + semver@5.7.2: {} - /semver@7.6.3: - resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} - engines: {node: '>=10'} - hasBin: true - dev: true + semver@6.3.1: {} - /sentence-case@2.1.1: - resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} + semver@7.6.3: {} + + sentence-case@2.1.1: dependencies: no-case: 2.3.2 upper-case-first: 1.1.2 - dev: true - /set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} + set-function-length@1.2.2: dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 @@ -4388,96 +5534,90 @@ packages: get-intrinsic: 1.2.4 gopd: 1.0.1 has-property-descriptors: 1.0.2 - dev: true - /set-function-name@2.0.2: - resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} - engines: {node: '>= 0.4'} + 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 - dev: true - /shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.3 + semver: 7.6.3 + 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 + optional: true + + shebang-command@2.0.0: dependencies: shebang-regex: 3.0.0 - dev: true - /shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - dev: true + shebang-regex@3.0.0: {} - /side-channel@1.0.6: - resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} - engines: {node: '>= 0.4'} + side-channel@1.0.6: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 object-inspect: 1.13.2 - dev: true - /signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - dev: true + signal-exit@3.0.7: {} - /signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - dev: true + signal-exit@4.1.0: + optional: true - /slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - dev: true + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + optional: true - /slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - dev: true + slash@3.0.0: {} - /smart-buffer@4.2.0: - resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} - engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} - dev: true + slash@4.0.0: {} - /snake-case@2.1.0: - resolution: {integrity: sha512-FMR5YoPFwOLuh4rRz92dywJjyKYZNLpMn1R5ujVpIYkbA9p01fq8RMg0FkO4M+Yobt4MjHeLTJVm5xFFBHSV2Q==} + smart-buffer@4.2.0: {} + + snake-case@2.1.0: dependencies: no-case: 2.3.2 - dev: true - /socks-proxy-agent@8.0.4: - resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==} - engines: {node: '>= 14'} + socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 debug: 4.3.7 socks: 2.8.3 transitivePeerDependencies: - supports-color - dev: true - /socks@2.8.3: - resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} - engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + socks@2.8.3: dependencies: ip-address: 9.0.5 smart-buffer: 4.2.0 - dev: true - /sort-object-keys@1.1.3: - resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - dev: true + sort-object-keys@1.1.3: {} - /sort-package-json@2.10.1: - resolution: {integrity: sha512-d76wfhgUuGypKqY72Unm5LFnMpACbdxXsLPcL27pOsSrmVqH3PztFp1uq+Z22suk15h7vXmTesuh2aEjdCqb5w==} - hasBin: true + sort-package-json@2.10.1: dependencies: detect-indent: 7.0.1 detect-newline: 4.0.1 @@ -4487,84 +5627,52 @@ packages: is-plain-obj: 4.1.0 semver: 7.6.3 sort-object-keys: 1.1.3 - dev: true - /source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - dev: false + source-map-js@1.2.1: {} - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true + source-map@0.6.1: {} - /spdx-correct@3.2.0: - resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 spdx-license-ids: 3.0.20 - dev: true - /spdx-exceptions@2.5.0: - resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} - dev: true + spdx-exceptions@2.5.0: {} - /spdx-expression-parse@3.0.1: - resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.20 - dev: true - /spdx-license-ids@3.0.20: - resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} - dev: true + spdx-license-ids@3.0.20: {} - /sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - dev: true + sprintf-js@1.1.3: {} - /stop-iteration-iterator@1.0.0: - resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==} - engines: {node: '>= 0.4'} + stop-iteration-iterator@1.0.0: dependencies: internal-slot: 1.0.7 - dev: true - /streamsearch@1.1.0: - resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} - engines: {node: '>=10.0.0'} - dev: false + streamsearch@1.1.0: {} - /string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - dev: true - /string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} + string-width@5.1.2: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 strip-ansi: 7.1.0 - dev: true + optional: true - /string.prototype.includes@2.0.0: - resolution: {integrity: sha512-E34CkBgyeqNDcrbU76cDjL5JLcVrtSdYq0MEh/B10r17pRP4ciHLwTgnuLV8Ay6cgEMLkcBkFCKyFZ43YldYzg==} + string.prototype.includes@2.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /string.prototype.matchall@4.0.11: - resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} - engines: {node: '>= 0.4'} + string.prototype.matchall@4.0.11: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -4578,212 +5686,114 @@ packages: regexp.prototype.flags: 1.5.2 set-function-name: 2.0.2 side-channel: 1.0.6 - dev: true - /string.prototype.repeat@1.0.0: - resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} + string.prototype.repeat@1.0.0: dependencies: define-properties: 1.2.1 es-abstract: 1.23.3 - dev: true - /string.prototype.trim@1.2.9: - resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} - engines: {node: '>= 0.4'} + string.prototype.trim@1.2.9: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimend@1.0.8: - resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} + string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string.prototype.trimstart@1.0.8: - resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} - engines: {node: '>= 0.4'} + string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - dev: true - /string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 - dev: true - /strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 - dev: true - /strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} + strip-ansi@7.1.0: dependencies: ansi-regex: 6.1.0 - dev: true + optional: true - /strip-bom@3.0.0: - resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} - engines: {node: '>=4'} - dev: true + strip-bom@3.0.0: {} - /strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - dev: true + strip-final-newline@2.0.0: {} - /strip-indent@3.0.0: - resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} - engines: {node: '>=8'} + strip-indent@3.0.0: dependencies: min-indent: 1.0.1 - dev: true - /strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - dev: true + strip-json-comments@2.0.1: {} - /strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - dev: true + strip-json-comments@3.1.1: {} - /styled-jsx@5.1.1(react@18.3.1): - resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==} - engines: {node: '>= 12.0.0'} - peerDependencies: - '@babel/core': '*' - babel-plugin-macros: '*' - react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' - peerDependenciesMeta: - '@babel/core': - optional: true - babel-plugin-macros: - optional: true + styled-jsx@5.1.6(react@19.0.0-rc-66855b96-20241106): dependencies: client-only: 0.0.1 - react: 18.3.1 - dev: false + react: 19.0.0-rc-66855b96-20241106 - /supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} + supports-color@5.5.0: dependencies: has-flag: 3.0.0 - dev: true - /supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} + supports-color@7.2.0: dependencies: has-flag: 4.0.0 - dev: true - /supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - dev: true + supports-preserve-symlinks-flag@1.0.0: {} - /swap-case@1.1.2: - resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} + swap-case@1.1.2: dependencies: lower-case: 1.1.4 upper-case: 1.1.3 - dev: true - /synckit@0.9.1: - resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} - engines: {node: ^14.18.0 || >=16.0.0} + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.7.0 - dev: true - /tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - dev: true + tapable@2.2.1: {} - /text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - dev: true + text-table@0.2.0: {} - /through@2.3.8: - resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} - dev: true + through@2.3.8: {} - /tinycolor2@1.6.0: - resolution: {integrity: sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==} - dev: true + tinycolor2@1.6.0: {} - /tinygradient@1.1.5: - resolution: {integrity: sha512-8nIfc2vgQ4TeLnk2lFj4tRLvvJwEfQuabdsmvDdQPT0xlk9TaNtpGd6nNRxXoK6vQhN6RSzj+Cnp5tTQmpxmbw==} + tinygradient@1.1.5: dependencies: '@types/tinycolor2': 1.4.6 tinycolor2: 1.6.0 - dev: true - /title-case@2.1.1: - resolution: {integrity: sha512-EkJoZ2O3zdCz3zJsYCsxyq2OC5hrxR9mfdd5I+w8h/tmFfeOxJ+vvkxsKxdmN0WtS9zLdHEgfgVOiMVgv+Po4Q==} + title-case@2.1.1: dependencies: no-case: 2.3.2 upper-case: 1.1.3 - dev: true - /tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 - dev: true - /to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - dev: true + to-fast-properties@2.0.0: {} - /to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - dev: true - /ts-api-utils@1.3.0(typescript@5.5.4): - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} - engines: {node: '>=16'} - peerDependencies: - typescript: '>=4.2.0' + ts-api-utils@1.3.0(typescript@5.5.4): dependencies: typescript: 5.5.4 - dev: true - /ts-node@10.9.2(@types/node@20.16.5)(typescript@5.5.4): - 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 + ts-node@10.9.2(@types/node@20.16.5)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -4800,144 +5810,77 @@ packages: typescript: 5.5.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - dev: true - /tsconfig-paths@3.15.0: - resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + tsconfig-paths@3.15.0: dependencies: '@types/json5': 0.0.29 json5: 1.0.2 minimist: 1.2.8 strip-bom: 3.0.0 - dev: true - /tslib@1.14.1: - resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - dev: true + tslib@1.14.1: {} - /tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.7.0: {} - /tsutils@3.21.0(typescript@5.5.4): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + tsutils@3.21.0(typescript@5.5.4): dependencies: tslib: 1.14.1 typescript: 5.5.4 - dev: true - /turbo-darwin-64@2.1.2: - resolution: {integrity: sha512-3TEBxHWh99h2yIzkuIigMEOXt/ItYQp0aPiJjPd1xN4oDcsKK5AxiFKPH9pdtfIBzYsY59kQhZiFj0ELnSP7Bw==} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-64@2.3.0: optional: true - /turbo-darwin-arm64@2.1.2: - resolution: {integrity: sha512-he0miWNq2WxJzsH82jS2Z4MXpnkzn9SH8a79iPXiJkq25QREImucscM4RPasXm8wARp91pyysJMq6aasD45CeA==} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true + turbo-darwin-arm64@2.3.0: optional: true - /turbo-linux-64@2.1.2: - resolution: {integrity: sha512-fKUBcc0rK8Vdqv5a/E3CSpMBLG1bzwv+Q0Q83F8fG2ZfNCNKGbcEYABdonNZkkx141Rj03cZQFCgxu3MVEGU+A==} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-64@2.3.0: optional: true - /turbo-linux-arm64@2.1.2: - resolution: {integrity: sha512-sV8Bpmm0WiuxgbhxymcC7wSsuxfBBieI98GegSwbr/bs1ANAgzCg93urIrdKdQ3/b31zZxQwcaP4FBF1wx1Qdg==} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true + turbo-linux-arm64@2.3.0: optional: true - /turbo-windows-64@2.1.2: - resolution: {integrity: sha512-wcmIJZI9ORT9ykHGliFE6kWRQrlH930QGSjSgWC8uFChFFuOyUlvC7ttcxuSvU9VqC7NF4C+GVAcFJQ8lTjN7g==} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-64@2.3.0: optional: true - /turbo-windows-arm64@2.1.2: - resolution: {integrity: sha512-zdnXjrhk7YO6CP+Q5wPueEvOCLH4lDa6C4rrwiakcWcPgcQGbVozJlo4uaQ6awo8HLWQEvOwu84RkWTdLAc/Hw==} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true + turbo-windows-arm64@2.3.0: optional: true - /turbo@2.1.2: - resolution: {integrity: sha512-Jb0rbU4iHEVQ18An/YfakdIv9rKnd3zUfSE117EngrfWXFHo3RndVH96US3GsT8VHpwTncPePDBT2t06PaFLrw==} - hasBin: true + turbo@2.3.0: optionalDependencies: - turbo-darwin-64: 2.1.2 - turbo-darwin-arm64: 2.1.2 - turbo-linux-64: 2.1.2 - turbo-linux-arm64: 2.1.2 - turbo-windows-64: 2.1.2 - turbo-windows-arm64: 2.1.2 - dev: true - - /type-check@0.4.0: - resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} - engines: {node: '>= 0.8.0'} + turbo-darwin-64: 2.3.0 + turbo-darwin-arm64: 2.3.0 + turbo-linux-64: 2.3.0 + turbo-linux-arm64: 2.3.0 + turbo-windows-64: 2.3.0 + turbo-windows-arm64: 2.3.0 + + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - dev: true - /type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - dev: true + type-fest@0.20.2: {} - /type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - dev: true + type-fest@0.21.3: {} - /type-fest@0.6.0: - resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} - engines: {node: '>=8'} - dev: true + type-fest@0.6.0: {} - /type-fest@0.8.1: - resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} - engines: {node: '>=8'} - dev: true + type-fest@0.8.1: {} - /typed-array-buffer@1.0.2: - resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} - engines: {node: '>= 0.4'} + typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-length@1.0.1: - resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} - engines: {node: '>= 0.4'} + typed-array-byte-length@1.0.1: dependencies: call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-byte-offset@1.0.2: - resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} - engines: {node: '>= 0.4'} + typed-array-byte-offset@1.0.2: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 @@ -4945,11 +5888,8 @@ packages: gopd: 1.0.1 has-proto: 1.0.3 is-typed-array: 1.1.13 - dev: true - /typed-array-length@1.0.6: - resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} - engines: {node: '>= 0.4'} + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -4957,113 +5897,68 @@ packages: has-proto: 1.0.3 is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - dev: true - /typescript@5.5.4: - resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} - engines: {node: '>=14.17'} - hasBin: true - dev: true + typescript@5.5.4: {} - /uglify-js@3.19.3: - resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} - engines: {node: '>=0.8.0'} - hasBin: true - requiresBuild: true - dev: true + uglify-js@3.19.3: optional: true - /unbox-primitive@1.0.2: - resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - dev: true - /undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - dev: true + undici-types@6.19.8: {} - /universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - dev: true + universalify@2.0.1: {} - /update-browserslist-db@1.1.0(browserslist@4.23.3): - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' + update-browserslist-db@1.1.0(browserslist@4.23.3): dependencies: browserslist: 4.23.3 escalade: 3.2.0 picocolors: 1.1.0 - dev: true - /update-check@1.5.4: - resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==} + update-check@1.5.4: dependencies: registry-auth-token: 3.3.2 registry-url: 3.1.0 - dev: true - /upper-case-first@1.1.2: - resolution: {integrity: sha512-wINKYvI3Db8dtjikdAqoBbZoP6Q+PZUyfMR7pmwHzjC2quzSkUq5DmPrTtPEqHaz8AGtmsB4TqwapMTM1QAQOQ==} + upper-case-first@1.1.2: dependencies: upper-case: 1.1.3 - dev: true - /upper-case@1.1.3: - resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} - dev: true + upper-case@1.1.3: {} - /uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + uri-js@4.4.1: dependencies: punycode: 2.3.1 - dev: true - /util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - dev: true + util-deprecate@1.0.2: {} - /v8-compile-cache-lib@3.0.1: - resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} - dev: true + v8-compile-cache-lib@3.0.1: {} - /validate-npm-package-license@3.0.4: - resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validate-npm-package-license@3.0.4: dependencies: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 - dev: true - /validate-npm-package-name@5.0.1: - resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - dev: true + validate-npm-package-name@5.0.1: {} - /wcwidth@1.0.1: - resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + wcwidth@1.0.1: dependencies: defaults: 1.0.4 - dev: true - /which-boxed-primitive@1.0.2: - resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 is-boolean-object: 1.1.2 is-number-object: 1.0.7 is-string: 1.0.7 is-symbol: 1.0.4 - dev: true - /which-builtin-type@1.1.4: - resolution: {integrity: sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==} - engines: {node: '>= 0.4'} + which-builtin-type@1.1.4: dependencies: function.prototype.name: 1.1.6 has-tostringtag: 1.0.2 @@ -5077,87 +5972,54 @@ packages: which-boxed-primitive: 1.0.2 which-collection: 1.0.2 which-typed-array: 1.1.15 - dev: true - /which-collection@1.0.2: - resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} - engines: {node: '>= 0.4'} + 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.3 - dev: true - /which-typed-array@1.1.15: - resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} - engines: {node: '>= 0.4'} + which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 has-tostringtag: 1.0.2 - dev: true - /which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true + which@2.0.2: dependencies: isexe: 2.0.0 - dev: true - /word-wrap@1.2.5: - resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} - engines: {node: '>=0.10.0'} - dev: true + word-wrap@1.2.5: {} - /wordwrap@1.0.0: - resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - dev: true + wordwrap@1.0.0: {} - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} - engines: {node: '>=8'} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true - /wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 string-width: 4.2.3 strip-ansi: 6.0.1 - dev: true + optional: true - /wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} + wrap-ansi@8.1.0: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 strip-ansi: 7.1.0 - dev: true + optional: true - /wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - dev: true + wrappy@1.0.2: {} - /yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - dev: true + yallist@3.1.1: {} - /yn@3.1.1: - resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} - engines: {node: '>=6'} - dev: true + yn@3.1.1: {} - /yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - dev: true + yocto-queue@0.1.0: {} diff --git a/examples/basic/turbo.json b/examples/basic/turbo.json index 807e324753413..d6a7fe0554393 100644 --- a/examples/basic/turbo.json +++ b/examples/basic/turbo.json @@ -10,6 +10,9 @@ "lint": { "dependsOn": ["^lint"] }, + "check-types": { + "dependsOn": ["^check-types"] + }, "dev": { "cache": false, "persistent": true From 386ea3f6d59e7966e2ca870872509dbcc7ceca9a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 16:24:26 -0500 Subject: [PATCH 191/218] release(turborepo): 2.3.1-canary.0 (#9448) Co-authored-by: Turbobot <turbobot@vercel.com> --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 55eeea3f03846..66f5b913078ec 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index a04f585664138..82d80b87e4b76 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index ee2cbba3b3906..9287b76ee3f5c 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index b373a11b84d5a..d10ebfafe1387 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 92f9d3480ca31..cd93b3b58014b 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index f5cad3904796e..919604bb3694e 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 162bc7fdd2139..5997a85ebeb11 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index bb84016b934a8..ceb6ff553b7c7 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index f8902ef579fbd..80ec7ac0f61c6 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.3.0", + "version": "2.3.1-canary.0", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.3.0", - "turbo-darwin-arm64": "2.3.0", - "turbo-linux-64": "2.3.0", - "turbo-linux-arm64": "2.3.0", - "turbo-windows-64": "2.3.0", - "turbo-windows-arm64": "2.3.0" + "turbo-darwin-64": "2.3.1-canary.0", + "turbo-darwin-arm64": "2.3.1-canary.0", + "turbo-linux-64": "2.3.1-canary.0", + "turbo-linux-arm64": "2.3.1-canary.0", + "turbo-windows-64": "2.3.1-canary.0", + "turbo-windows-arm64": "2.3.1-canary.0" } } diff --git a/version.txt b/version.txt index 89d1e6680d2a1..84d8cd78c3355 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.3.0 -latest +2.3.1-canary.0 +canary From 2881b1b9d408420afb3de529cf028f6ffa008617 Mon Sep 17 00:00:00 2001 From: Eng Zer Jun <engzerjun@gmail.com> Date: Sat, 16 Nov 2024 12:00:57 +0800 Subject: [PATCH 192/218] ci: update `upload-artifact` and `download-artifact` actions to v4 (#9447) ### Description v3 of `actions/upload-artifact` and `actions/download-artifact` will be fully deprecated by **5 December 2024**. Jobs that are scheduled to run during the brownout periods will also fail. See: 1. https://github.blog/changelog/2024-04-16-deprecation-notice-v3-of-the-artifact-actions/ 2. https://github.blog/changelog/2024-11-05-notice-of-breaking-changes-for-github-actions/ ### Testing Instructions Run the CI jobs Signed-off-by: Eng Zer Jun <engzerjun@gmail.com> --- .github/workflows/bench-turborepo.yml | 14 ++++++++------ .github/workflows/lsp.yml | 2 +- .github/workflows/turborepo-compare-cache-item.yml | 4 ++-- .github/workflows/turborepo-library-release.yml | 6 +++--- .github/workflows/turborepo-release.yml | 6 +++--- 5 files changed, 17 insertions(+), 15 deletions(-) diff --git a/.github/workflows/bench-turborepo.yml b/.github/workflows/bench-turborepo.yml index 0827c3a32e9f3..ef8172b3c8835 100644 --- a/.github/workflows/bench-turborepo.yml +++ b/.github/workflows/bench-turborepo.yml @@ -87,9 +87,9 @@ jobs: run: pnpm -F @turbo/benchmark ttft "${{ steps.filename.outputs.filename }}" - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: profiles # This name will be the folder each file gets downloaded to + name: profiles-${{ matrix.os.name }} # This name will be the folder each file gets downloaded to if-no-files-found: error # cwd is root of the repository, so we need the benchmark/ prefixed path path: | @@ -112,10 +112,11 @@ jobs: uses: ./.github/actions/setup-node - name: Download profiles - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: profiles path: packages/turbo-benchmark/profiles/ + pattern: profiles-* + merge-multiple: true - name: Display TTFT Data shell: bash @@ -146,10 +147,11 @@ jobs: uses: ./.github/actions/setup-node - name: Download profiles - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: profiles path: packages/turbo-benchmark/profiles/ + pattern: profiles-* + merge-multiple: true - name: Display TTFT Data shell: bash diff --git a/.github/workflows/lsp.yml b/.github/workflows/lsp.yml index 22567bcc1bdec..23d121ffdf153 100644 --- a/.github/workflows/lsp.yml +++ b/.github/workflows/lsp.yml @@ -73,7 +73,7 @@ jobs: run: ${{ matrix.settings.rust-build-env }} cargo build --profile release-turborepo-lsp -p turborepo-lsp --target ${{ matrix.settings.target }} - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: turborepo-lsp-${{ matrix.settings.target }} path: target/${{ matrix.settings.target }}/release-turborepo-lsp/turborepo-lsp* diff --git a/.github/workflows/turborepo-compare-cache-item.yml b/.github/workflows/turborepo-compare-cache-item.yml index becc939b2cea8..6e35b519c6ff6 100644 --- a/.github/workflows/turborepo-compare-cache-item.yml +++ b/.github/workflows/turborepo-compare-cache-item.yml @@ -32,7 +32,7 @@ jobs: turbo run build --filter=docs --filter=web --summarize --skip-infer -vvv - name: Grab Turborepo artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: cache-item-${{ matrix.os }}-${{ inputs.version }} path: | @@ -61,7 +61,7 @@ jobs: pnpm dlx create-turbo@${{ inputs.version }} my-turborepo pnpm - name: Download cache artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: cache-item-${{ matrix.cache_os }}-${{ inputs.version }} path: my-turborepo diff --git a/.github/workflows/turborepo-library-release.yml b/.github/workflows/turborepo-library-release.yml index 04008fc2dd047..fa5fef1f4ec04 100644 --- a/.github/workflows/turborepo-library-release.yml +++ b/.github/workflows/turborepo-library-release.yml @@ -117,7 +117,7 @@ jobs: ${{ matrix.settings.rust_env }} pnpm build:release --target=${{ matrix.settings.target }} - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: turbo-library-${{ matrix.settings.target }} path: packages/turbo-repository/native @@ -138,7 +138,7 @@ jobs: git config --global user.email 'turbobot@vercel.com' - name: Download Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: native-packages @@ -173,7 +173,7 @@ jobs: mv *.tgz tarballs/ - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: Upload Tarballs path: tarballs diff --git a/.github/workflows/turborepo-release.yml b/.github/workflows/turborepo-release.yml index c44315427cf82..1c0c60e223088 100644 --- a/.github/workflows/turborepo-release.yml +++ b/.github/workflows/turborepo-release.yml @@ -180,7 +180,7 @@ jobs: run: ${{ matrix.settings.rust-build-env }} cargo build --profile release-turborepo -p turbo --target ${{ matrix.settings.target }} - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: turbo-${{ matrix.settings.target }} path: target/${{ matrix.settings.target }}/release-turborepo/turbo* @@ -218,7 +218,7 @@ jobs: GORELEASER_KEY: ${{ secrets.GORELEASER_KEY }} - name: Download Rust artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: path: rust-artifacts @@ -239,7 +239,7 @@ jobs: # Upload published artifacts in case they are needed for debugging later - name: Upload Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: turbo-combined path: cli/dist From ac1eab9105534ac9c43fb6c403b651097375a3c3 Mon Sep 17 00:00:00 2001 From: Trivikram Kamat <16024985+trivikr@users.noreply.github.com> Date: Fri, 15 Nov 2024 20:32:19 -0800 Subject: [PATCH 193/218] chore: use node20 in cargo-sweep action (#9178) ### Description https://github.blog/changelog/2024-03-07-github-actions-all-actions-will-run-on-node20-instead-of-node16-by-default/ Co-authored-by: Anthony Shew <anthony.shew@vercel.com> --- .github/actions/cargo-sweep/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/cargo-sweep/action.yml b/.github/actions/cargo-sweep/action.yml index ddcdfa9ecfb3a..53b624b466a1d 100644 --- a/.github/actions/cargo-sweep/action.yml +++ b/.github/actions/cargo-sweep/action.yml @@ -1,6 +1,6 @@ name: "cargo-sweep" description: "Runs cargo-sweep to clean old build artifacts" runs: - using: "node16" + using: "node20" main: "dist/main/index.js" post: "dist/post/index.js" From 5e38be8d8ac070ba7ab7645233cd11bd85dbf471 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Sat, 16 Nov 2024 15:02:09 -0700 Subject: [PATCH 194/218] docs: Clarify output globs relativeness. (#9449) --- .../crafting-your-repository/configuring-tasks.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx b/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx index 341915773f50a..e265836f4b868 100644 --- a/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx +++ b/docs/repo-docs/crafting-your-repository/configuring-tasks.mdx @@ -213,7 +213,7 @@ Below are a few examples of outputs for common tools: </Tab> </Tabs> -For more on building globbing patterns for the `outputs` key, see [the globbing specification](/repo/docs/reference/globs). +Globs are relative to the package, so `dist/**` will handle the `dist` that is outputted for each package, respectively. For more on building globbing patterns for the `outputs` key, see [the globbing specification](/repo/docs/reference/globs). ### Specifying `inputs` @@ -367,8 +367,8 @@ To meet both requirements (correctness and parallelism), you can introduce [Tran }, "check-types": { "dependsOn": ["transit"] - }, - }, + } + } } ``` From 0ecfa3bd30f211909e7c6a89832c78fd6395c67e Mon Sep 17 00:00:00 2001 From: Chris Olszewski <chris.olszewski@vercel.com> Date: Mon, 18 Nov 2024 11:17:44 -0500 Subject: [PATCH 195/218] fix(cache): allow force to override any cache settings (#9454) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description As mentioned in #9453 if a user sets `--force` when `TURBO_CACHE` is set we currently error. `--force` should be applicable in this case an just remove any reads from the `TURBO_CACHE` setting. ### Testing Instructions Updated unit test, manual verification of behavior for other cases: ``` # Do not allow `--force` and `--cache` [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ turbo_dev @turbo/types#build --force --cache=local:rw WARNING No locally installed `turbo` found. Using version: 2.3.1-canary.0. ERROR the argument '--force [<FORCE>]' cannot be used with '--cache <CACHE>' Usage: turbo --force [<FORCE>] For more information, try '--help'. # Force should remove reads even if set from env var [1 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ TURBO_FORCE=1 turbo_dev @turbo/types#build --cache=local:rw WARNING No locally installed `turbo` found. Using version: 2.3.1-canary.0. turbo 2.3.1-canary.0 • Packages in scope: @turbo-internal/top-issues-gh-action, @turbo/benchmark, @turbo/codemod, @turbo/eslint-config, @turbo/exe-stub, @turbo/gen, @turbo/telemetry, @turbo/test-utils, @turbo/tsconfig, @turbo/types, @turbo/utils, @turbo/workspaces, @turborepo-examples-tests/basic, @turborepo-examples-tests/design-system, @turborepo-examples-tests/kitchen-sink, @turborepo-examples-tests/non-monorepo, @turborepo-examples-tests/with-berry, @turborepo-examples-tests/with-changesets, @turborepo-examples-tests/with-npm, @turborepo-examples-tests/with-react-native-web, @turborepo-examples-tests/with-rollup, @turborepo-examples-tests/with-svelte, @turborepo-examples-tests/with-tailwind, @turborepo-examples-tests/with-vite, @turborepo-examples-tests/with-yarn, cargo-sweep-action, cli, create-turbo, eslint-config-turbo, eslint-plugin-turbo, prysk, turbo-ignore, turbo-vsc, turborepo-examples, turborepo-repository, turborepo-tests-helpers, turborepo-tests-integration • Running @turbo/types#build in 37 packages • Remote caching disabled ┌ @turbo/types#build > cache bypass, force executing 378250748b4bc15b │ │ │ > @turbo/types@2.3.1-canary.0 build /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsc && pnpm generate-schema │ │ │ > @turbo/types@2.3.1-canary.0 generate-schema /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsx scripts/generate-schema.ts └────> Tasks: 1 successful, 1 total Cached: 0 cached, 1 total Time: 3.045s # `--force` removes reads from `TURBO_CACHE` settings [0 olszewski@chriss-mbp] /Users/olszewski/code/vercel/turborepo $ TURBO_CACHE=local:rw turbo_dev @turbo/types#build --force WARNING No locally installed `turbo` found. Using version: 2.3.1-canary.0. turbo 2.3.1-canary.0 • Packages in scope: @turbo-internal/top-issues-gh-action, @turbo/benchmark, @turbo/codemod, @turbo/eslint-config, @turbo/exe-stub, @turbo/gen, @turbo/telemetry, @turbo/test-utils, @turbo/tsconfig, @turbo/types, @turbo/utils, @turbo/workspaces, @turborepo-examples-tests/basic, @turborepo-examples-tests/design-system, @turborepo-examples-tests/kitchen-sink, @turborepo-examples-tests/non-monorepo, @turborepo-examples-tests/with-berry, @turborepo-examples-tests/with-changesets, @turborepo-examples-tests/with-npm, @turborepo-examples-tests/with-react-native-web, @turborepo-examples-tests/with-rollup, @turborepo-examples-tests/with-svelte, @turborepo-examples-tests/with-tailwind, @turborepo-examples-tests/with-vite, @turborepo-examples-tests/with-yarn, cargo-sweep-action, cli, create-turbo, eslint-config-turbo, eslint-plugin-turbo, prysk, turbo-ignore, turbo-vsc, turborepo-examples, turborepo-repository, turborepo-tests-helpers, turborepo-tests-integration • Running @turbo/types#build in 37 packages • Remote caching disabled ┌ @turbo/types#build > cache bypass, force executing 378250748b4bc15b │ │ │ > @turbo/types@2.3.1-canary.0 build /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsc && pnpm generate-schema │ │ │ > @turbo/types@2.3.1-canary.0 generate-schema /Users/olszewski/code/vercel/turborepo/packages/turbo-types │ > tsx scripts/generate-schema.ts └────> Tasks: 1 successful, 1 total Cached: 0 cached, 1 total Time: 2.284s ``` --- crates/turborepo-lib/src/opts.rs | 1 - ...epo_lib__opts__test__force_remote_r,local_r.snap | 13 +++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-lib/src/opts.rs b/crates/turborepo-lib/src/opts.rs index 91a659f680b98..4bcc4a58315d1 100644 --- a/crates/turborepo-lib/src/opts.rs +++ b/crates/turborepo-lib/src/opts.rs @@ -367,7 +367,6 @@ impl<'a> TryFrom<OptsInputs<'a>> for CacheOpts { let is_linked = turborepo_api_client::is_linked(inputs.api_auth); let cache = inputs.config.cache(); let has_old_cache_config = inputs.config.remote_only() - || inputs.config.force() || inputs.run_args.no_cache || inputs.config.remote_cache_read_only(); diff --git a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap index cbc9a96ee2d30..e37f22fd93182 100644 --- a/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap +++ b/crates/turborepo-lib/src/snapshots/turborepo_lib__opts__test__force_remote_r,local_r.snap @@ -2,6 +2,15 @@ source: crates/turborepo-lib/src/opts.rs expression: cache_opts --- -Err( - OverlappingCacheOptions, +Ok( + CacheConfig { + local: CacheActions { + read: false, + write: false, + }, + remote: CacheActions { + read: false, + write: false, + }, + }, ) From 85f9b7fa50436d21a56a3ab2bd76532e89916dd7 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Mon, 18 Nov 2024 12:34:31 -0700 Subject: [PATCH 196/218] docs: Add `TURBO_CACHE` to System Environment Variables. (#9450) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description Title! ### Testing Instructions 👀 --- docs/repo-docs/reference/system-environment-variables.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/repo-docs/reference/system-environment-variables.mdx b/docs/repo-docs/reference/system-environment-variables.mdx index 9eec6200cf085..f29a11cde5d9a 100644 --- a/docs/repo-docs/reference/system-environment-variables.mdx +++ b/docs/repo-docs/reference/system-environment-variables.mdx @@ -13,6 +13,7 @@ System environment variables are always overridden by flag values provided direc | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `TURBO_API` | Set the base URL for [Remote Cache](/repo/docs/core-concepts/remote-caching). | | `TURBO_BINARY_PATH` | Manually set the path to the `turbo` binary. By default, `turbo` will automatically discover the binary so you should only use this in rare circumstances. | +| `TURBO_CACHE` | Control reading and writing for cache sources. Uses the same syntax as [`--cache`](/repo/docs/reference/run#--cache-options). | | `TURBO_CACHE_DIR` | Sets the cache directory, similar to using [`--cache-dir`](/repo/docs/reference/run#--cache-dir-path) flag | | `TURBO_CI_VENDOR_ENV_KEY` | Set a prefix for environment variables that you want **excluded** from [Framework Inference](/repo/docs/crafting-your-repository/using-environment-variables#framework-inference). **NOTE**: This does not need to be set by the user and should be configured automatically by supported platforms. | | `TURBO_DANGEROUSLY_DISABLE_PACKAGE_MANAGER_CHECK` | Disable checking the `packageManager` field in `package.json`. You may run into [errors and unexpected caching behavior](/repo/docs/reference/run#--dangerously-disable-package-manager-check) when disabling this check. Use `true` or `1` to disable. | From fed3248d33b828229bca59b6b6669f3b621fc3a7 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Mon, 18 Nov 2024 21:42:11 -0700 Subject: [PATCH 197/218] chore: Require semantic comments on PR titles. (#9459) ### Description We're looking to use semantic titles for PRs so that they release notes look a little tidier. This action will enforce this for us. --- .github/workflows/semantic-release.yml | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 .github/workflows/semantic-release.yml diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/semantic-release.yml new file mode 100644 index 0000000000000..a3eacf59078db --- /dev/null +++ b/.github/workflows/semantic-release.yml @@ -0,0 +1,33 @@ +name: Lint pull request title + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + - reopened + +permissions: + pull-requests: read + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + # Configure that a scope must always be provided. + requireScope: false + # Configure additional validation for the subject based on a regex. + # Ensures that the subject doesn't start with an uppercase character. + subjectPattern: ^[A-Z].*$ + # If `subjectPattern` is configured, you can use this property to override + # the default error message that is shown when the pattern doesn't match. + # The variables `subject` and `title` can be used within the message. + subjectPatternError: | + The subject "{subject}" found in the pull request title "{title}" doesn't match the configured pattern. + Please ensure that the subject doesn't start with a lowercase character. From e0380d6a5d989479fa51c03d6ce51650bed4e640 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Mon, 18 Nov 2024 22:19:15 -0700 Subject: [PATCH 198/218] chore: Renaming conventional commits file. (#9461) --- .github/workflows/{semantic-release.yml => lint-pr-title.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{semantic-release.yml => lint-pr-title.yml} (100%) diff --git a/.github/workflows/semantic-release.yml b/.github/workflows/lint-pr-title.yml similarity index 100% rename from .github/workflows/semantic-release.yml rename to .github/workflows/lint-pr-title.yml From 7fb5b21fe3034c29affef8e35a8c90ee75c0cb67 Mon Sep 17 00:00:00 2001 From: Maksim Bondarenkov <119937608+ognevny@users.noreply.github.com> Date: Tue, 19 Nov 2024 17:48:17 +0300 Subject: [PATCH 199/218] deps: Update psm (#9443) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit psm@0.1.23 contains a bug which breaks build for gnullvm targets, with 0.1.24 it's fixed ### Description <!-- ✍️ Write a short summary of your work. If necessary, include relevant screenshots. --> ### Testing Instructions build for gnullvm targets fixed <!-- Give a quick description of steps to test your changes. --> --- Cargo.lock | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index eb3a70c080949..c5a658ed6f9d1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1036,12 +1036,13 @@ dependencies = [ [[package]] name = "cc" -version = "1.0.83" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" dependencies = [ "jobserver", "libc", + "shlex", ] [[package]] @@ -2802,9 +2803,9 @@ checksum = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130" [[package]] name = "jobserver" -version = "0.1.26" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "936cfd212a0155903bcbc060e316fb6cc7cbf2e1907329391ebadc1fe0ce77c2" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" dependencies = [ "libc", ] @@ -4109,9 +4110,9 @@ dependencies = [ [[package]] name = "psm" -version = "0.1.23" +version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa37f80ca58604976033fae9515a8a2989fc13797d953f7c04fb8fa36a11f205" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" dependencies = [ "cc", ] @@ -4880,6 +4881,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + [[package]] name = "signal-hook" version = "0.3.17" From 405ccc1251e348cb80af7dc69224c1170d6d3e05 Mon Sep 17 00:00:00 2001 From: Chris Olszewski <chris.olszewski@vercel.com> Date: Tue, 19 Nov 2024 12:58:29 -0500 Subject: [PATCH 200/218] chore(release): fix release by avoiding old glibc version (#9464) ### Description https://github.com/vercel/turborepo/pull/9447 bumped us to `upload-artifact` to v4 which uses Node 20. Node 20 required a newer glibc version than was available on our build that targeted AWS's Lambda2's glibc version. See [this job](https://github.com/vercel/turborepo/actions/runs/11897321603/job/33151832964#step:12:21) for an example failure. Requiring this glibc version isn't necessary for the musl builds since it uses musl instead of glibc for libc. I do not think this was intentional to have the musl binary building in this container as we changed this back when we were cross compiling: https://github.com/vercel/turborepo/commit/8ca67c3c0cd9601909730953b9d03699a01b1da8 Future work: This does not fix the `@turbo/repository` release. ### Testing Instructions Ran test release and x86 msul build now passes: [job](https://github.com/vercel/turborepo/actions/runs/11917567457/job/33214049836) --- .github/workflows/turborepo-release.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/turborepo-release.yml b/.github/workflows/turborepo-release.yml index 1c0c60e223088..7aad56e181af4 100644 --- a/.github/workflows/turborepo-release.yml +++ b/.github/workflows/turborepo-release.yml @@ -116,11 +116,9 @@ jobs: target: "aarch64-apple-darwin" container-options: "--rm" - host: ubuntu-latest - container: ubuntu:xenial container-options: "--platform=linux/amd64 --rm" - container-setup: "apt-get update && apt-get install -y curl musl-tools sudo unzip" target: "x86_64-unknown-linux-musl" - setup: "apt-get install -y build-essential clang-5.0 lldb-5.0 llvm-5.0-dev libclang-5.0-dev" + setup: "sudo apt-get update && sudo apt-get install -y build-essential clang lldb llvm libclang-dev curl musl-tools sudo unzip" - host: ubuntu-latest container-options: "--rm" target: "aarch64-unknown-linux-musl" From 316b94e45ffd2ef893f92407d4da52db5408293b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 13:47:30 -0500 Subject: [PATCH 201/218] release(turborepo): 2.3.1-canary.1 (#9465) Co-authored-by: Turbobot <turbobot@vercel.com> --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index 66f5b913078ec..cb294655a59ec 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 82d80b87e4b76..2cf72c53ee082 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 9287b76ee3f5c..82375a95f3448 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index d10ebfafe1387..27386914a7cbb 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index cd93b3b58014b..1e63bd43d64ae 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 919604bb3694e..31b80461d1e2d 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 5997a85ebeb11..c6d711b372be5 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index ceb6ff553b7c7..67768804b30c7 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 80ec7ac0f61c6..08ad168d08752 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.3.1-canary.0", + "version": "2.3.1-canary.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.3.1-canary.0", - "turbo-darwin-arm64": "2.3.1-canary.0", - "turbo-linux-64": "2.3.1-canary.0", - "turbo-linux-arm64": "2.3.1-canary.0", - "turbo-windows-64": "2.3.1-canary.0", - "turbo-windows-arm64": "2.3.1-canary.0" + "turbo-darwin-64": "2.3.1-canary.1", + "turbo-darwin-arm64": "2.3.1-canary.1", + "turbo-linux-64": "2.3.1-canary.1", + "turbo-linux-arm64": "2.3.1-canary.1", + "turbo-windows-64": "2.3.1-canary.1", + "turbo-windows-arm64": "2.3.1-canary.1" } } diff --git a/version.txt b/version.txt index 84d8cd78c3355..44d68e49edf88 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.3.1-canary.0 +2.3.1-canary.1 canary From ccf1c2fd62aa08a956bc2260a9bb7d0c71fed509 Mon Sep 17 00:00:00 2001 From: Nicholas Yang <nicholas.yang@vercel.com> Date: Tue, 19 Nov 2024 15:15:19 -0500 Subject: [PATCH 202/218] feat(link): add `--yes` and `--scope` flags to `link` (#9466) ### Description Adds `--yes` and `--scope` flags ### Testing Instructions Added tests for parsing those flags --- crates/turborepo-lib/src/cli/error.rs | 4 +- crates/turborepo-lib/src/cli/mod.rs | 106 +++++++++++++++++- crates/turborepo-lib/src/commands/link.rs | 20 +++- crates/turborepo-lib/src/diagnostics.rs | 9 +- docs/repo-docs/reference/link.mdx | 10 +- .../integration/tests/command-link.t | 8 ++ .../integration/tests/turbo-help.t | 8 +- 7 files changed, 152 insertions(+), 13 deletions(-) diff --git a/crates/turborepo-lib/src/cli/error.rs b/crates/turborepo-lib/src/cli/error.rs index a85e0103573f4..99631493ca74d 100644 --- a/crates/turborepo-lib/src/cli/error.rs +++ b/crates/turborepo-lib/src/cli/error.rs @@ -8,7 +8,7 @@ use turborepo_telemetry::events::command::CommandEventBuilder; use turborepo_ui::{color, BOLD, GREY}; use crate::{ - commands::{bin, generate, ls, prune, run::get_signal, CommandBase}, + commands::{bin, generate, link, ls, prune, run::get_signal, CommandBase}, daemon::DaemonError, query, rewrite_json::RewriteError, @@ -45,6 +45,8 @@ pub enum Error { #[diagnostic(transparent)] Ls(#[from] ls::Error), #[error(transparent)] + Link(#[from] link::Error), + #[error(transparent)] #[diagnostic(transparent)] Prune(#[from] prune::Error), #[error(transparent)] diff --git a/crates/turborepo-lib/src/cli/mod.rs b/crates/turborepo-lib/src/cli/mod.rs index b857bd34b8f6c..d4025503d2bf1 100644 --- a/crates/turborepo-lib/src/cli/mod.rs +++ b/crates/turborepo-lib/src/cli/mod.rs @@ -569,6 +569,13 @@ pub enum Command { #[clap(long)] no_gitignore: bool, + /// The scope, i.e. Vercel team, to which you are linking + #[clap(long)] + scope: Option<String>, + + /// Answer yes to all prompts (default false) + #[clap(long, short)] + yes: bool, /// Specify what should be linked (default "remote cache") #[clap(long, value_enum, default_value_t = LinkTarget::RemoteCache)] target: LinkTarget, @@ -1299,11 +1306,18 @@ pub async fn run( } Command::Link { no_gitignore, + scope, + yes, target, } => { CommandEventBuilder::new("link") .with_parent(&root_telemetry) .track_call(); + + if cli_args.team.is_some() { + warn!("team flag does not set the scope for linking. Use --scope instead."); + } + if cli_args.test_run { println!("Link test run successful"); return Ok(0); @@ -1311,11 +1325,11 @@ pub async fn run( let modify_gitignore = !*no_gitignore; let to = *target; + let yes = *yes; + let scope = scope.clone(); let mut base = CommandBase::new(cli_args, repo_root, version, color_config); - if let Err(err) = link::link(&mut base, modify_gitignore, to).await { - error!("error: {}", err.to_string()) - } + link::link(&mut base, scope, modify_gitignore, yes, to).await?; Ok(0) } @@ -1469,7 +1483,7 @@ mod test { use itertools::Itertools; use pretty_assertions::assert_eq; - use crate::cli::{ExecutionArgs, RunArgs}; + use crate::cli::{ExecutionArgs, LinkTarget, RunArgs}; struct CommandTestCase { command: &'static str, @@ -2300,6 +2314,90 @@ mod test { .test(); } + #[test] + fn test_parse_link() { + assert_eq!( + Args::try_parse_from(["turbo", "link"]).unwrap(), + Args { + command: Some(Command::Link { + no_gitignore: false, + scope: None, + yes: false, + target: LinkTarget::RemoteCache, + }), + ..Args::default() + } + ); + + CommandTestCase { + command: "link", + command_args: vec![], + global_args: vec![vec!["--cwd", "../examples/with-yarn"]], + expected_output: Args { + command: Some(Command::Link { + no_gitignore: false, + scope: None, + yes: false, + target: LinkTarget::RemoteCache, + }), + cwd: Some(Utf8PathBuf::from("../examples/with-yarn")), + ..Args::default() + }, + } + .test(); + + CommandTestCase { + command: "link", + command_args: vec![vec!["--yes"]], + global_args: vec![vec!["--cwd", "../examples/with-yarn"]], + expected_output: Args { + command: Some(Command::Link { + yes: true, + no_gitignore: false, + scope: None, + target: LinkTarget::RemoteCache, + }), + cwd: Some(Utf8PathBuf::from("../examples/with-yarn")), + ..Args::default() + }, + } + .test(); + + CommandTestCase { + command: "link", + command_args: vec![vec!["--scope", "foo"]], + global_args: vec![vec!["--cwd", "../examples/with-yarn"]], + expected_output: Args { + command: Some(Command::Link { + yes: false, + no_gitignore: false, + scope: Some("foo".to_string()), + target: LinkTarget::RemoteCache, + }), + cwd: Some(Utf8PathBuf::from("../examples/with-yarn")), + ..Args::default() + }, + } + .test(); + + CommandTestCase { + command: "link", + command_args: vec![vec!["--no-gitignore"]], + global_args: vec![vec!["--cwd", "../examples/with-yarn"]], + expected_output: Args { + command: Some(Command::Link { + yes: false, + no_gitignore: true, + scope: None, + target: LinkTarget::RemoteCache, + }), + cwd: Some(Utf8PathBuf::from("../examples/with-yarn")), + ..Args::default() + }, + } + .test(); + } + #[test] fn test_parse_login() { assert_eq!( diff --git a/crates/turborepo-lib/src/commands/link.rs b/crates/turborepo-lib/src/commands/link.rs index 721c3a07458a4..e52a42e653ea1 100644 --- a/crates/turborepo-lib/src/commands/link.rs +++ b/crates/turborepo-lib/src/commands/link.rs @@ -163,7 +163,9 @@ pub(crate) async fn verify_caching_enabled<'a>( pub async fn link( base: &mut CommandBase, + scope: Option<String>, modify_gitignore: bool, + yes: bool, target: LinkTarget, ) -> Result<(), Error> { let homedir_path = home_dir().ok_or_else(|| Error::HomeDirectoryNotFound)?; @@ -183,7 +185,7 @@ pub async fn link( REMOTE_CACHING_URL ); - if !should_link_remote_cache(base, &repo_root_with_tilde)? { + if !yes && !should_link_remote_cache(base, &repo_root_with_tilde)? { return Err(Error::NotLinking); } @@ -203,7 +205,17 @@ pub async fn link( .await .map_err(Error::TeamsRequest)?; - let selected_team = select_team(base, &teams_response.teams)?; + let selected_team = if let Some(team_slug) = scope { + SelectedTeam::Team( + teams_response + .teams + .iter() + .find(|team| team.slug == team_slug) + .ok_or_else(|| Error::TeamNotFound(team_slug.to_string()))?, + ) + } else { + select_team(base, &teams_response.teams)? + }; let team_id = match selected_team { SelectedTeam::User => user_response.user.id.as_str(), @@ -632,7 +644,7 @@ mod test { ) .unwrap(); - link::link(&mut base, false, LinkTarget::RemoteCache) + link::link(&mut base, None, false, false, LinkTarget::RemoteCache) .await .unwrap(); @@ -707,7 +719,7 @@ mod test { ) .unwrap(); - link::link(&mut base, false, LinkTarget::Spaces) + link::link(&mut base, None, false, false, LinkTarget::Spaces) .await .unwrap(); diff --git a/crates/turborepo-lib/src/diagnostics.rs b/crates/turborepo-lib/src/diagnostics.rs index 04f1c989b2c45..c8297f56f32d1 100644 --- a/crates/turborepo-lib/src/diagnostics.rs +++ b/crates/turborepo-lib/src/diagnostics.rs @@ -429,7 +429,14 @@ impl Diagnostic for RemoteCacheDiagnostic { return; }; stopped.await.unwrap(); - let link_res = link(&mut base, false, crate::cli::LinkTarget::RemoteCache).await; + let link_res = link( + &mut base, + None, + false, + false, + crate::cli::LinkTarget::RemoteCache, + ) + .await; resume.send(()).unwrap(); link_res }; diff --git a/docs/repo-docs/reference/link.mdx b/docs/repo-docs/reference/link.mdx index c9a2712182f15..a71997207f18e 100644 --- a/docs/repo-docs/reference/link.mdx +++ b/docs/repo-docs/reference/link.mdx @@ -13,6 +13,14 @@ The selected owner (either a user or an organization) will be able to share [cac Specifies the URL of your Remote Cache provider. +### `--yes` + +Answer yes to all prompts + +### `--scope <scope>` + +The scope, i.e. Vercel team, to which you are linking + ```bash title="Terminal" turbo link --api https://acme.com -``` \ No newline at end of file +``` diff --git a/turborepo-tests/integration/tests/command-link.t b/turborepo-tests/integration/tests/command-link.t index bd0e882f85f32..d3ba844b0b743 100644 --- a/turborepo-tests/integration/tests/command-link.t +++ b/turborepo-tests/integration/tests/command-link.t @@ -6,3 +6,11 @@ Link Test Run $ ${TURBO} link --__test-run Link test run successful + $ ${TURBO} link --__test-run --yes + Link test run successful + + $ ${TURBO} link --__test-run --team=my-team + WARNING team flag does not set the scope for linking. Use --scope instead. + Link test run successful + + diff --git a/turborepo-tests/integration/tests/turbo-help.t b/turborepo-tests/integration/tests/turbo-help.t index b9c7d73bc70af..c484db0230c7a 100644 --- a/turborepo-tests/integration/tests/turbo-help.t +++ b/turborepo-tests/integration/tests/turbo-help.t @@ -329,14 +329,18 @@ Test help flag for link command Do not create or modify .gitignore (default false) --version + --scope <SCOPE> + The scope, i.e. Vercel team, to which you are linking --skip-infer Skip any attempts to infer which version of Turbo the project is configured to use - --target <TARGET> - Specify what should be linked (default "remote cache") [default: remote-cache] [possible values: remote-cache, spaces] --no-update-notifier Disable the turbo update notification + -y, --yes + Answer yes to all prompts (default false) --api <API> Override the endpoint for API calls + --target <TARGET> + Specify what should be linked (default "remote cache") [default: remote-cache] [possible values: remote-cache, spaces] --color Force color usage in the terminal --cwd <CWD> From 3a494fe2e4dadba7b6d8f15f11b6e66047ad7f93 Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff <benjamin.woodruff@vercel.com> Date: Tue, 19 Nov 2024 15:23:22 -0800 Subject: [PATCH 203/218] docs(turbopack): Add incremental-computation page, intended to replace core-concepts page (#9456) ### Description This depends on some images (these are placeholders, I'll get the real assets from @anthonyshew) ### Testing Instructions ![Screenshot 2024-11-18 at 15-43-55 Incremental computation.png](https://graphite-user-uploaded-assets-prod.s3.amazonaws.com/HAZVitxRNnZz8QMiPn4a/527e54e5-5c71-4593-b06f-a339075a96b4.png) --------- Co-authored-by: Anthony Shew <anthonyshew@gmail.com> --- docs/pack-docs/features/dev-server.mdx | 2 +- docs/pack-docs/incremental-computation.mdx | 136 +++++++++++++++++++++ docs/pack-docs/meta.json | 2 +- docs/pack-docs/why-turbopack.mdx | 2 +- 4 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 docs/pack-docs/incremental-computation.mdx diff --git a/docs/pack-docs/features/dev-server.mdx b/docs/pack-docs/features/dev-server.mdx index 662af5a2b3a48..62d600b2f3b88 100644 --- a/docs/pack-docs/features/dev-server.mdx +++ b/docs/pack-docs/features/dev-server.mdx @@ -9,7 +9,7 @@ Turbopack is optimized to give you an extremely fast development server. We cons Hot Module Replacement (HMR) gives your dev server the ability to push file updates to the browser without triggering a full refresh. This works for most static assets (including JavaScript files) enabling a smooth and fast developer experience. -Turbopack supports Hot Module Replacement out of the box. Because of our [incremental architecture](/pack/docs/core-concepts), we are hyper-optimized for delivering fast updates. +Turbopack supports Hot Module Replacement out of the box. Because of our [incremental architecture](/pack/docs/incremental-computation), we are hyper-optimized for delivering fast updates. {/* Maybe link to benchmarks here? */} diff --git a/docs/pack-docs/incremental-computation.mdx b/docs/pack-docs/incremental-computation.mdx new file mode 100644 index 0000000000000..b40f14f9d1aac --- /dev/null +++ b/docs/pack-docs/incremental-computation.mdx @@ -0,0 +1,136 @@ +--- +title: Incremental computation +description: Learn about the innovative architecture that powers Turbopack's speed improvements. +--- + +import { ThemeAwareImage } from '#/components/theme-aware-image'; + +Turbopack uses an automatic demand-driven incremental computation architecture to provide [React Fast Refresh](https://nextjs.org/docs/architecture/fast-refresh) with massive Next.js and React applications. + +This architecture uses caching to remember what values functions were called with and what values they returned. Incremental builds scale by the size of your local changes, not the size of your application. + +<ThemeAwareImage + className="flex justify-center" + light={{ + alt: 'A formula with big-o notation showing a change in time spent from "your entire application" to "your changes"', + src: '/images/docs/pack/big-o-changes-equation-light.png', + props: { + width: 500, + height: 24, + }, + }} + dark={{ + alt: 'A formula with big-o notation showing a change in time spent from "your entire application" to "your changes"', + src: '/images/docs/pack/big-o-changes-equation-dark.png', + props: { + width: 500, + height: 24, + }, + }} +/> + +Turbopack’s architecture is based on over a decade of learnings and prior research. It draws inspiration from [webpack](https://webpack.js.org/), [Salsa](https://salsa-rs.netlify.app/overview) (which powers [Rust-Analyzer](https://rust-analyzer.github.io/) and [Ruff](https://docs.astral.sh/ruff/)), [Parcel](https://parceljs.org/), the [Rust compiler’s query system](https://rustc-dev-guide.rust-lang.org/query.html), [Adapton](http://adapton.org/), and many others. + +## Background: Manual incremental computation + +Many build systems include explicit dependency graphs that must be manually populated when evaluating build rules. Explicitly declaring your dependency graph can theoretically give optimal results, but in practice it leaves room for errors. + +The difficulty of specifying an explicit dependency graph means that usually caching is done at a coarse file-level granularity. This granularity does have some benefits: less incremental results means less data to cache, which might be worth it if you have limited disk space or memory. + +An example of such an architecture is [GNU Make](https://www.gnu.org/software/make/), where output targets and prerequisites are manually configured and represented as files. Systems like GNU Make miss caching opportunities due to their coarse granularity: they does not understand and cannot cache internal data structures within the compiler. + +## Function-level fine-grained automatic incremental computation + +In Turbopack, the relationship between input files and resulting build artifacts isn’t straightforward. Bundlers employ whole-program analysis for dead code elimination ("tree shaking") and clustering of common dependencies in the module graph. Consequently, the build artifacts—JavaScript files shared across multiple application routes—form complex many-to-many relationships with input files. + +Turbopack uses a very fine-grained caching architecture. Because manually declaring and adding dependencies to a graph is prone to human errors, Turbopack needs an automated solution that can scale. + +### Value cells + +To facilitate automatic caching and dependency tracking, Turbopack introduces a concept of “value cells” (`Vc<…>`). Each value cell represents a fine-grained piece of execution, like a cell in a spreadsheet. When reading a cell, it records the currently executing function and all of its cells as dependent on that cell. + +<ThemeAwareImage + className="flex justify-center" + light={{ + alt: 'Example Rust code annotated with a macro that says "turbo_tasks::function", along with arguments annotated as inputs. Those arguments are awaited in the function\'s body. The arguments become tracked when awaited.', + src: '/images/docs/pack/cell-storage-light.png', + props: { + width: 550, + height: 238, + }, + }} + dark={{ + alt: 'Example Rust code annotated with a macro that says "turbo_tasks::function", along with arguments annotated as inputs. Those arguments are awaited in the function\'s body. The arguments become tracked when awaited.', + src: '/images/docs/pack/cell-storage-dark.png', + props: { + width: 550, + height: 238, + }, + }} +/> + +By not marking cells as dependencies until they are read, Turbopack achieves finer-grained caching than [a traditional top-down memoization approach](https://en.wikipedia.org/wiki/Memoization) would provide. For example, an argument might be an object or mapping of _many_ value cells. Instead of needing to recompute our tracked function when _any part of_ the object or mapping changes, it only needs to recompute the tracked function when a cell that _it has actually read_ changes. + +Value cells represent nearly everything inside of Turbopack, such as a file on disk, an abstract syntax tree (AST), metadata about imports and exports of modules, or clustering information used for chunking and bundling. + +<ThemeAwareImage + className="flex justify-center" + light={{ + alt: 'Examples of types of data that could be stored inside a value cell.', + src: '/images/docs/pack/cell-contents-examples-light.png', + props: { + width: 800, + height: 136, + }, + }} + dark={{ + alt: 'Examples of types of data that could be stored inside a value cell.', + src: '/images/docs/pack/cell-contents-examples-dark.png', + props: { + width: 800, + height: 136, + }, + }} +/> + +### Marking dirty and propagating changes + +When a cell’s value changes, Turbopack must determine what work to recompute. It uses [Adapton’s](http://adapton.org/) two-phase dirty and propagate algorithms. + +<ThemeAwareImage + className="flex justify-center" + light={{ + alt: 'Three call trees representing an initial (cold) execution, the "mark dirty" phase when a file has been changed, and the propagation from the leaf up to the root.', + src: '/images/docs/pack/execution-graph-light.png', + props: { + width: 700, + height: 198, + }, + }} + dark={{ + alt: 'Three call trees representing an initial (cold) execution, the "mark dirty" phase when a file has been changed, and the propagation from the leaf up to the root.', + src: '/images/docs/pack/execution-graph-dark.png', + props: { + width: 700, + height: 198, + }, + }} +/> + +Typically, source code files are at the bottom of the dependency graph. When the incremental execution engine finds that a file’s contents have changed, it marks the function that read it and its associated value cells as “dirty”. To watch for filesystem changes, Turbopack uses `inotify` (Linux) or the equivalent platform API [via the `notify` crate](https://docs.rs/notify/). + +Next comes propagation, where the bundler is re-run from the bottom up, bubbling up any computations that yield new results. This propagation is "demand-driven," meaning the system only recomputes a dependent cell if it's part of an "active query". An active query could be a currently open webpage with hot reloading enabled, or even a request to build the full production app. + +If a cell isn't part of an active query, propagation of it’s dirty flag is deferred until either the dependency graph changes or a new active query is created. + +### Additional optimization: The aggregation tree + +The dependency graph can contain hundreds of thousands of unique invocations of small tracked functions, and the incremental execution engine must frequently traverse the graph to inspect and update dirty flags. + +Turbopack optimizes these operations using an “aggregation tree”. Each node of the aggregation tree represents a cluster of tracked function calls, reducing some of the memory overhead associated with dependency tracking, and reducing the number of nodes that must be traversed. + +## Parallel and async execution with Rust and Tokio + +To parallelize execution, Turbopack uses Rust with [the Tokio asynchronous runtime](https://tokio.rs/). Each tracked function is spawned into Tokio’s thread pool as [a Tokio task](https://tokio.rs/tokio/tutorial/spawning#tasks). That allows Turbopack to benefit from Rust’s low-overhead parallelism and [Tokio’s work-stealing scheduler](https://tokio.rs/blog/2019-10-scheduler). + +While bundling is CPU-bound in most scenarios, it can become IO-bound when building from slow hard drives, [a network drive](https://github.com/facebook/sapling/blob/main/eden/fs/docs/Overview.md), or when reading from or writing to persistent caches. Tokio allows Turbopack to more gracefully handle these degraded situations than we might otherwise be able to. diff --git a/docs/pack-docs/meta.json b/docs/pack-docs/meta.json index 5de589a068a61..2aa30d5113509 100644 --- a/docs/pack-docs/meta.json +++ b/docs/pack-docs/meta.json @@ -2,7 +2,7 @@ "pages": [ "index", "why-turbopack", - "core-concepts", + "incremental-computation", "roadmap", "features", "benchmarks", diff --git a/docs/pack-docs/why-turbopack.mdx b/docs/pack-docs/why-turbopack.mdx index 058c0d93f40ae..31ce87c599cd7 100644 --- a/docs/pack-docs/why-turbopack.mdx +++ b/docs/pack-docs/why-turbopack.mdx @@ -39,7 +39,7 @@ This more ‘lazy’ approach (only bundling assets when absolutely necessary) i esbuild doesn’t have a concept of ‘lazy’ bundling - it’s all-or-nothing, unless you specifically target only certain entry points. -Turbopack’s development mode builds a minimal graph of your app’s imports and exports based on received requests and only bundles the minimal code necessary. Learn more in the [core concepts docs](/pack/docs/core-concepts). +Turbopack’s development mode builds a minimal graph of your app’s imports and exports based on received requests and only bundles the minimal code necessary. Learn more in the [incremental computation docs](/pack/docs/incremental-computation). ## Summary From 8c297d29d76a3e03eabfad89b3954d3680a6b96e Mon Sep 17 00:00:00 2001 From: Benjamin Woodruff <benjamin.woodruff@vercel.com> Date: Tue, 19 Nov 2024 15:30:12 -0800 Subject: [PATCH 204/218] docs(turbopack): Remove old core-concepts page (#9457) ### Description This can merge after a redirect is added in https://github.com/vercel/front/pull/38987. ### Testing Instructions Try loading `/pack/docs/core-concepts` and see that the redirect happens --------- Co-authored-by: Anthony Shew <anthony.shew@vercel.com> --- docs/pack-docs/core-concepts.mdx | 42 -------------------------------- 1 file changed, 42 deletions(-) delete mode 100644 docs/pack-docs/core-concepts.mdx diff --git a/docs/pack-docs/core-concepts.mdx b/docs/pack-docs/core-concepts.mdx deleted file mode 100644 index 68f04d3fcc21e..0000000000000 --- a/docs/pack-docs/core-concepts.mdx +++ /dev/null @@ -1,42 +0,0 @@ ---- -title: Core Concepts -description: Learn about the innovative architecture that powers Turbopack's speed improvements. ---- - -Let’s dive deep into the internals of Turbopack to figure out why it’s so fast. - -## The Turbo engine - -Turbopack is so fast because it’s built on a reusable library for Rust which enables incremental computation known as the Turbo engine. Here’s how it works: - -### Function-level caching - -In a Turbo engine-powered program, you can mark certain functions as ‘to be remembered’. When these functions are called, the Turbo engine will remember **what they were called with**, and **what they returned**. It’ll then save it in an in-memory cache. - -Here’s a simplified example of what this might look like in a bundler: - -![](/images/docs/pack/turbo-engine-first-run.png) - -We start with calling `readFile` on two files, `api.ts` and `sdk.ts`. We then `bundle` those files, `concat` them together, and end up with the `fullBundle` at the end. The results of all of those function calls get saved in the cache for later. - -Let’s imagine that we’re running on a dev server. You save the `sdk.ts` file on your machine. Turbopack receives the file system event, and knows it needs to recompute `readFile("sdk.ts")`: - -![](/images/docs/pack/turbo-engine-second-run.png) - -Since the result of `sdk.ts` has changed, we need to `bundle` it again, which then needs to be concatenated again. - -Crucially, `api.ts` hasn’t changed. We read its result from the cache and pass that to `concat` instead. So we save time by not reading it and re-bundling it again. - -Now imagine this in a real bundler, with thousands of files to read and transformations to execute. The mental model is the same. You can save enormous amounts of work by remembering the result of function calls and not re-doing work that’s been done before. - -### The cache - -The Turbo engine currently stores its cache in memory. This means the cache will last as long as the process running it - which works well for a dev server. When you run `next dev --turbopack` in Next.js 13+, you’ll start a cache with the Turbo engine. When you cancel your dev server, the cache gets cleared. - -In the future, we’re planning to persist this cache - either to the filesystem, or to a remote cache like Turborepo’s. This will mean that Turbopack could remember work done _across runs and machines._ - -### How does it help? - -This approach makes Turbopack extremely fast at computing incremental updates to your apps. This optimizes Turbopack for handling updates in development, meaning your dev server will always respond snappily to changes. - -In the future, a persistent cache will open the door to much faster production builds. By remembering work done _across runs_, new production builds could only rebuild changed files - potentially leading to enormous time savings. From 13bfef4024b12fd7163c2d46b06fa962b5168bbd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 09:29:23 -0500 Subject: [PATCH 205/218] release(turborepo): 2.3.1-canary.2 (#9467) Co-authored-by: Turbobot <turbobot@vercel.com> --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 2 +- 10 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index cb294655a59ec..dac41e879917d 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 2cf72c53ee082..704153089630d 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index 82375a95f3448..a04a05e58fd9b 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index 27386914a7cbb..d2269d1359a57 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index 1e63bd43d64ae..e9d560f2a9b88 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 31b80461d1e2d..378f1d7601549 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index c6d711b372be5..9b7e7e045488b 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index 67768804b30c7..b8441c1ebbe10 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index 08ad168d08752..da52884844e31 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.3.1-canary.1", + "version": "2.3.1-canary.2", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.3.1-canary.1", - "turbo-darwin-arm64": "2.3.1-canary.1", - "turbo-linux-64": "2.3.1-canary.1", - "turbo-linux-arm64": "2.3.1-canary.1", - "turbo-windows-64": "2.3.1-canary.1", - "turbo-windows-arm64": "2.3.1-canary.1" + "turbo-darwin-64": "2.3.1-canary.2", + "turbo-darwin-arm64": "2.3.1-canary.2", + "turbo-linux-64": "2.3.1-canary.2", + "turbo-linux-arm64": "2.3.1-canary.2", + "turbo-windows-64": "2.3.1-canary.2", + "turbo-windows-arm64": "2.3.1-canary.2" } } diff --git a/version.txt b/version.txt index 44d68e49edf88..417c459d8e345 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.3.1-canary.1 +2.3.1-canary.2 canary From 698d5fa53c50b15094c3086f52c08ceed6b1adb9 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthony.shew@vercel.com> Date: Wed, 20 Nov 2024 13:37:35 -0700 Subject: [PATCH 206/218] docs: Small stylistic change for footnote. (#9451) ### Description The way the Markdown footnote attribution looked just felt a little out of place. Simplifying and localizing here. ### Testing Instructions Before ![CleanShot 2024-11-16 at 21 27 34@2x](https://github.com/user-attachments/assets/85ee00ee-c260-4850-8659-516be7ead949) ![CleanShot 2024-11-16 at 21 27 43@2x](https://github.com/user-attachments/assets/86a3c1e6-cffa-4b4f-a8bf-b9d7337fd1cd) After ![CleanShot 2024-11-16 at 21 27 13@2x](https://github.com/user-attachments/assets/2d63174a-d86a-4549-b7ca-0d0f0e2d2da5) --- docs/repo-docs/getting-started/support-policy.mdx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/docs/repo-docs/getting-started/support-policy.mdx b/docs/repo-docs/getting-started/support-policy.mdx index b22df415586c7..b1d6d16d03a25 100644 --- a/docs/repo-docs/getting-started/support-policy.mdx +++ b/docs/repo-docs/getting-started/support-policy.mdx @@ -33,10 +33,13 @@ the following binaries via npm: - `turbo-darwin-arm64` (macOS with Apple Silicon) - `turbo-linux-64` - `turbo-linux-arm64` -- `turbo-windows-64` [^1] -- `turbo-windows-arm64` [^1] +- `turbo-windows-64`\* +- `turbo-windows-arm64`\* -[^1]: Requires [Windows C Runtime Libraries](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) +<small> + \*: Requires [Windows C Runtime + Libraries](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist) +</small> ## Node.js From 52779f1d9c884b0ea421904ee7b886d7b7d1b01a Mon Sep 17 00:00:00 2001 From: Nicholas Yang <nicholas.yang@vercel.com> Date: Wed, 20 Nov 2024 15:57:04 -0500 Subject: [PATCH 207/218] feat(trace): more trace fixes (#9474) ### Description A couple small fixes for tracing: - Add more extensions for support - Add more files to look at for a main file (`module` is non-standard but common) - Try resolving `@types/<package>` if `<package>` fails to resolve ### Testing Instructions Added tests for new extensions, for module field, and for importing types from `foo` that really come from `@types/foo` <!-- Give a quick description of steps to test your changes. --> --- Cargo.lock | 7 ++--- crates/turbo-trace/Cargo.toml | 2 +- crates/turbo-trace/src/tracer.rs | 29 +++++++++++++++---- crates/turborepo-lib/src/query/file.rs | 3 ++ crates/turborepo/tests/query.rs | 2 +- ...ex.ts`_with_dependencies_(npm@10.5.0).snap | 11 ++++++- ...ndex.js`_with_dependents_(npm@10.5.0).snap | 2 +- ...ndex.ts`_with_dependents_(npm@10.5.0).snap | 2 +- .../turbo_trace_monorepo/apps/my-app/index.ts | 4 ++- .../apps/my-app/package.json | 3 +- .../turbo_trace_monorepo/apps/my-app/types.ts | 2 +- .../packages/another/{index.js => index.jsx} | 0 .../packages/module-package/my-module.mjs | 1 + .../packages/module-package/package.json | 4 +++ 14 files changed, 55 insertions(+), 17 deletions(-) rename turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/{index.js => index.jsx} (100%) create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/my-module.mjs create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/package.json diff --git a/Cargo.lock b/Cargo.lock index c5a658ed6f9d1..46054e239253e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3617,13 +3617,12 @@ dependencies = [ [[package]] name = "oxc_resolver" -version = "2.0.0" +version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf8bcda84674ae69228a823dcdb81eac9a398d99f1bbc1dbf00623009fc11c1" +checksum = "ff67bf7c8cb5f4ea7537faa849892d8e13a408d50d0903aa40889fd395c66993" dependencies = [ "cfg-if", "dashmap 6.1.0", - "dunce", "indexmap 2.2.6", "json-strip-comments", "once_cell", @@ -6117,7 +6116,7 @@ dependencies = [ "futures", "globwalk", "miette", - "oxc_resolver 2.0.0", + "oxc_resolver 2.1.0", "swc_common", "swc_ecma_ast", "swc_ecma_parser", diff --git a/crates/turbo-trace/Cargo.toml b/crates/turbo-trace/Cargo.toml index 8fb3ed3bd84c7..9d710c271d0b7 100644 --- a/crates/turbo-trace/Cargo.toml +++ b/crates/turbo-trace/Cargo.toml @@ -10,7 +10,7 @@ clap = { version = "4.5.17", features = ["derive"] } futures = { workspace = true } globwalk = { version = "0.1.0", path = "../turborepo-globwalk" } miette = { workspace = true, features = ["fancy"] } -oxc_resolver = { version = "2.0.0" } +oxc_resolver = { version = "2.1.0" } swc_common = { workspace = true, features = ["concurrent", "tty-emitter"] } swc_ecma_ast = { workspace = true } swc_ecma_parser = { workspace = true } diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 86efde5dbb211..3f34d54c86db2 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -59,13 +59,14 @@ pub enum TraceError { span: SourceSpan, #[source_code] text: String, + #[help] + reason: String, }, #[error("failed to walk files")] GlobError(Arc<globwalk::WalkError>), } impl TraceResult { - #[allow(dead_code)] pub fn emit_errors(&self) { let handler = Handler::with_tty_emitter( ColorConfig::Auto, @@ -152,8 +153,7 @@ impl Tracer { file_content.clone(), ); - let syntax = if file_path.extension() == Some("ts") || file_path.extension() == Some("tsx") - { + let syntax = if matches!(file_path.extension(), Some("ts") | Some("tsx")) { Syntax::Typescript(TsSyntax { tsx: file_path.extension() == Some("tsx"), decorators: true, @@ -211,6 +211,18 @@ impl Tracer { debug!("built in: {:?}", err); } Err(err) => { + // Try to resolve the import as a type import via `@/types/<import>` + let type_package = format!("@types/{}", import); + let resolved_type_import = resolver + .resolve(file_path, type_package.as_str()) + .ok() + .and_then(|resolved| resolved.into_path_buf().try_into().ok()); + + if let Some(resolved_type_import) = resolved_type_import { + files.push(resolved_type_import); + continue; + } + debug!("failed to resolve: {:?}", err); let (start, end) = source_map.span_to_char_offset(&source_file, *span); let start = start as usize; @@ -221,8 +233,8 @@ impl Tracer { file_path: file_path.to_string(), span: SourceSpan::new(start.into(), (end - start).into()), text: file_content.clone(), + reason: err.to_string(), }); - continue; } } } @@ -316,7 +328,14 @@ impl Tracer { .with_force_extension(EnforceExtension::Disabled) .with_extension(".ts") .with_extension(".tsx") - .with_module(self.cwd.join_component("node_modules").to_string()) + .with_extension(".jsx") + .with_extension(".d.ts") + .with_extension(".mjs") + .with_extension(".cjs") + // Some packages export a `module` field instead of `main`. This is non-standard, + // but was a proposal at some point. + .with_main_field("module") + .with_main_field("types") // Condition names are used to determine which export to use when importing a module. // We add a bunch so oxc_resolver can resolve all kinds of imports. .with_condition_names(&["import", "require", "node", "default"]); diff --git a/crates/turborepo-lib/src/query/file.rs b/crates/turborepo-lib/src/query/file.rs index d5f2f9f2c5884..77e78cf54fb21 100644 --- a/crates/turborepo-lib/src/query/file.rs +++ b/crates/turborepo-lib/src/query/file.rs @@ -76,6 +76,7 @@ impl File { #[derive(SimpleObject, Debug, Default)] pub struct TraceError { message: String, + reason: String, path: Option<String>, import: Option<String>, start: Option<usize>, @@ -113,6 +114,7 @@ impl From<turbo_trace::TraceError> for TraceError { span, text, file_path, + reason, .. } => { let import = text @@ -123,6 +125,7 @@ impl From<turbo_trace::TraceError> for TraceError { TraceError { message, import, + reason, path: Some(file_path), start: Some(span.offset()), end: Some(span.offset() + span.len()), diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 46818a5775092..1b981978189fe 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -78,7 +78,7 @@ fn test_trace_on_monorepo() -> Result<(), anyhow::Error> { "query", "get `apps/my-app/index.ts` with dependencies" => "query { file(path: \"apps/my-app/index.ts\") { path dependencies { files { items { path } } errors { items { message } } } } }", "get `packages/utils/index.ts` with dependents" => "query { file(path: \"packages/utils/index.ts\") { path dependents { files { items { path } } errors { items { message } } } } }", - "get `packages/another/index.js` with dependents" => "query { file(path: \"packages/another/index.js\") { path dependents { files { items { path } } errors { items { message } } } } }", + "get `packages/another/index.js` with dependents" => "query { file(path: \"packages/another/index.jsx\") { path dependents { files { items { path } } errors { items { message } } } } }", ); Ok(()) diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap index 62bfdc21cbe16..fe03645c20180 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap @@ -13,7 +13,16 @@ expression: query_output "path": "apps/my-app/types.ts" }, { - "path": "packages/another/index.js" + "path": "node_modules/@types/d3-scale/index.d.ts" + }, + { + "path": "node_modules/@types/d3-time/index.d.ts" + }, + { + "path": "packages/another/index.jsx" + }, + { + "path": "packages/module-package/my-module.mjs" }, { "path": "packages/utils/index.ts" diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap index d5fb69de4071c..2f3b09cc59c5f 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__another__index.js`_with_dependents_(npm@10.5.0).snap @@ -5,7 +5,7 @@ expression: query_output { "data": { "file": { - "path": "packages/another/index.js", + "path": "packages/another/index.jsx", "dependents": { "files": { "items": [ diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap index 4e6e7ed0e3329..963a95763e00e 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`packages__utils__index.ts`_with_dependents_(npm@10.5.0).snap @@ -13,7 +13,7 @@ expression: query_output "path": "apps/my-app/index.ts" }, { - "path": "packages/another/index.js" + "path": "packages/another/index.jsx" } ] }, diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts index 2b6c3821b3f30..96f84447bdb9d 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts @@ -1,4 +1,6 @@ import { useMyHook } from "utils/my-hook"; import ship from "utils"; -import { blackbeard } from "../../packages/another/index.js"; +import { blackbeard } from "../../packages/another/index.jsx"; import { Pirate } from "@/types.ts"; +import { walkThePlank } from "module-package"; +import type { ScalePoint } from "d3-scale"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json index cf17ebf161c4a..b1ac06f3367f5 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json @@ -5,6 +5,7 @@ "maybefails": "exit 4" }, "dependencies": { - "utils": "*" + "utils": "*", + "@types/d3-scale": "^4.0.2" } } diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts index b20bb0af42f65..8617784efc920 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/types.ts @@ -1,4 +1,4 @@ -import { blackbeard } from "@/../../packages/another/index.js"; +import { blackbeard } from "@/../../packages/another/index.jsx"; export interface Pirate { ship: string; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.jsx similarity index 100% rename from turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.js rename to turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/another/index.jsx diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/my-module.mjs b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/my-module.mjs new file mode 100644 index 0000000000000..5300c6eb7abe2 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/my-module.mjs @@ -0,0 +1 @@ +export const walkThePlank = "walk the plank matey"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/package.json new file mode 100644 index 0000000000000..79b674031cb6b --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/module-package/package.json @@ -0,0 +1,4 @@ +{ + "name": "module-package", + "module": "my-module.mjs" +} \ No newline at end of file From 0a872d7361832611fb8f4f115b67f153f2642cc1 Mon Sep 17 00:00:00 2001 From: Jorge Celaya <jcelaya775@gmail.com> Date: Wed, 20 Nov 2024 22:18:39 -0600 Subject: [PATCH 208/218] docs(turbopack): fix typo in incremental-computation page (#9476) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ### Description <!-- ✍️ Write a short summary of your work. If necessary, include relevant screenshots. --> Fix a small typo in the turbopack docs. --- docs/pack-docs/incremental-computation.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pack-docs/incremental-computation.mdx b/docs/pack-docs/incremental-computation.mdx index b40f14f9d1aac..58d225fde9f96 100644 --- a/docs/pack-docs/incremental-computation.mdx +++ b/docs/pack-docs/incremental-computation.mdx @@ -37,7 +37,7 @@ Many build systems include explicit dependency graphs that must be manually popu The difficulty of specifying an explicit dependency graph means that usually caching is done at a coarse file-level granularity. This granularity does have some benefits: less incremental results means less data to cache, which might be worth it if you have limited disk space or memory. -An example of such an architecture is [GNU Make](https://www.gnu.org/software/make/), where output targets and prerequisites are manually configured and represented as files. Systems like GNU Make miss caching opportunities due to their coarse granularity: they does not understand and cannot cache internal data structures within the compiler. +An example of such an architecture is [GNU Make](https://www.gnu.org/software/make/), where output targets and prerequisites are manually configured and represented as files. Systems like GNU Make miss caching opportunities due to their coarse granularity: they do not understand and cannot cache internal data structures within the compiler. ## Function-level fine-grained automatic incremental computation From 54916959b1bdb32a3c6f22dc7ed373bec1a30084 Mon Sep 17 00:00:00 2001 From: Aaron Casanova <32409546+aaronccasanova@users.noreply.github.com> Date: Wed, 20 Nov 2024 22:31:25 -0800 Subject: [PATCH 209/218] chore(examples): fix `$TURBO_DEFAULT$` inputs (#9452) --- examples/with-changesets/turbo.json | 2 +- examples/with-prisma/turbo.json | 2 +- examples/with-rollup/turbo.json | 2 +- examples/with-svelte/turbo.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/with-changesets/turbo.json b/examples/with-changesets/turbo.json index 11a217273c68d..68899f25f65fe 100644 --- a/examples/with-changesets/turbo.json +++ b/examples/with-changesets/turbo.json @@ -2,7 +2,7 @@ "$schema": "https://turbo.build/schema.json", "tasks": { "build": { - "inputs": ["$TURBO_DEFAULT", ".env*"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], "outputs": ["dist/**", ".next/**", "!.next/cache/**"], "dependsOn": ["^build"] }, diff --git a/examples/with-prisma/turbo.json b/examples/with-prisma/turbo.json index ba60851e99ef8..d1838a09fae5b 100644 --- a/examples/with-prisma/turbo.json +++ b/examples/with-prisma/turbo.json @@ -3,7 +3,7 @@ "tasks": { "build": { "dependsOn": ["^build"], - "inputs": ["$TURBO_DEFAULT", ".env*"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], "outputs": ["dist/**", ".next/**", "!.next/cache/**"] }, "db:migrate:deploy": {}, diff --git a/examples/with-rollup/turbo.json b/examples/with-rollup/turbo.json index a0547fd0d3246..e1da2539207a5 100644 --- a/examples/with-rollup/turbo.json +++ b/examples/with-rollup/turbo.json @@ -3,7 +3,7 @@ "tasks": { "build": { "dependsOn": ["^build"], - "inputs": ["$TURBO_DEFAULT", ".env*"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], "outputs": ["dist/**", ".next/**", "!.next/cache/**"] }, "lint": { diff --git a/examples/with-svelte/turbo.json b/examples/with-svelte/turbo.json index 5bbc59d0b5eae..ee8554760bf7d 100644 --- a/examples/with-svelte/turbo.json +++ b/examples/with-svelte/turbo.json @@ -3,7 +3,7 @@ "tasks": { "build": { "dependsOn": ["^build"], - "inputs": ["$TURBO_DEFAULT", ".env*"], + "inputs": ["$TURBO_DEFAULT$", ".env*"], "outputs": [".svelte-kit/**", ".vercel/**"] }, "lint": {}, From 81b9260b3c09289c0f3881a888b7db4bf0acdc85 Mon Sep 17 00:00:00 2001 From: Chris Olszewski <chris.olszewski@vercel.com> Date: Thu, 21 Nov 2024 09:38:10 -0500 Subject: [PATCH 210/218] fix(affected): consider both source and destination as changed (#9422) ### Description Previously we would only consider the destination file moved as changed and not the source. We use `diff-tree` instead of `diff` to track these moves. This PR also fixes an issue where `include_uncommitted: false` was not respected if `to_commit` wasn't present i.e. we would always return uncommitted changes. This did not affect users since this API isn't exposed to users and there's no way to set `include_uncommitted: false` without setting a `to_commit`. ### Testing Instructions Added unit test where a file is moved between packages. Also added additional checks for our `changed_files` tests --- crates/turborepo-scm/src/git.rs | 116 +++++++++++++++++++++++++++++--- 1 file changed, 107 insertions(+), 9 deletions(-) diff --git a/crates/turborepo-scm/src/git.rs b/crates/turborepo-scm/src/git.rs index 1f8248a07e5ac..c9f57e454f4d8 100644 --- a/crates/turborepo-scm/src/git.rs +++ b/crates/turborepo-scm/src/git.rs @@ -285,11 +285,17 @@ impl Git { let valid_from = self.resolve_base(from_commit, CIEnv::new())?; - let mut args = if let Some(to_commit) = to_commit { - vec!["diff", "--name-only", &valid_from, to_commit] - } else { - vec!["diff", "--name-only", &valid_from] - }; + // If a to commit is not specified for `diff-tree` it will change the comparison + // to be between the provided commit and it's parent + let to_commit = to_commit.unwrap_or("HEAD"); + let mut args = vec![ + "diff-tree", + "-r", + "--name-only", + "--no-commit-id", + &valid_from, + to_commit, + ]; if merge_base { args.push("--merge-base"); @@ -301,10 +307,17 @@ impl Git { // We only care about non-tracked files if we haven't specified both ends up the // comparison if include_uncommitted { - // Add untracked files, i.e. files that are not in git at all - let output = self - .execute_git_command(&["ls-files", "--others", "--exclude-standard"], pathspec)?; - self.add_files_from_stdout(&mut files, turbo_root, output); + // Add untracked files or unstaged changes, i.e. files that are not in git at + // all + let ls_files_output = self.execute_git_command( + &["ls-files", "--others", "--modified", "--exclude-standard"], + pathspec, + )?; + self.add_files_from_stdout(&mut files, turbo_root, ls_files_output); + // Include any files that have been staged, but not committed + let diff_output = + self.execute_git_command(&["diff", "--name-only", "--cached"], pathspec)?; + self.add_files_from_stdout(&mut files, turbo_root, diff_output); } Ok(files) @@ -514,6 +527,26 @@ mod tests { .unwrap() } + fn commit_rename(repo: &Repository, source: &Path, dest: &Path, previous_commit: Oid) -> Oid { + let mut index = repo.index().unwrap(); + index.remove_path(source).unwrap(); + index.add_path(dest).unwrap(); + let tree_oid = index.write_tree().unwrap(); + index.write().unwrap(); + let tree = repo.find_tree(tree_oid).unwrap(); + let previous_commit = repo.find_commit(previous_commit).unwrap(); + + repo.commit( + Some("HEAD"), + &repo.signature().unwrap(), + &repo.signature().unwrap(), + "Commit", + &tree, + std::slice::from_ref(&&previous_commit), + ) + .unwrap() + } + #[test] fn test_shallow_clone() -> Result<(), Error> { let tmp_dir = tempfile::tempdir()?; @@ -579,6 +612,38 @@ mod tests { Ok(()) } + #[test] + fn test_renamed_files() -> Result<(), Error> { + let (repo_root, repo) = setup_repository(None)?; + + let file = repo_root.path().join("foo.js"); + let file_path = Path::new("foo.js"); + fs::write(&file, "let z = 0;")?; + + let first_commit_oid = commit_file(&repo, file_path, None); + + fs::rename(file, repo_root.path().join("bar.js")).unwrap(); + + let new_file_path = Path::new("bar.js"); + let _second_commit_oid = commit_rename(&repo, file_path, new_file_path, first_commit_oid); + + let first_commit_sha = first_commit_oid.to_string(); + let git_root = repo_root.path().to_owned(); + let turborepo_root = repo_root.path().to_owned(); + let files = changed_files( + git_root, + turborepo_root, + Some(&first_commit_sha), + Some("HEAD"), + false, + )?; + + assert_eq!( + files, + HashSet::from(["foo.js".to_string(), "bar.js".to_string()]) + ); + Ok(()) + } #[test] fn test_merge_base() -> Result<(), Error> { let (repo_root, repo) = setup_repository(None)?; @@ -652,10 +717,43 @@ mod tests { )?; assert_eq!(files, HashSet::from(["bar.js".to_string()])); + // Test that uncommitted file in index is not marked as changed when not + // checking uncommitted + let files = changed_files( + repo_root.path().to_path_buf(), + turbo_root.to_path_buf(), + Some("HEAD"), + None, + false, + )?; + assert_eq!(files, HashSet::new()); + + // Test that uncommitted file in index is marked as changed when + // checking uncommitted + let files = changed_files( + repo_root.path().to_path_buf(), + turbo_root.to_path_buf(), + Some("HEAD"), + None, + true, + )?; + assert_eq!(files, HashSet::from(["bar.js".to_string()])); + // Add file to index index.add_path(Path::new("bar.js")).unwrap(); index.write().unwrap(); + // Test that uncommitted file in index is not marked as changed when not + // checking uncommitted + let files = changed_files( + repo_root.path().to_path_buf(), + turbo_root.to_path_buf(), + Some("HEAD"), + None, + false, + )?; + assert_eq!(files, HashSet::new()); + // Test that uncommitted file in index is still marked as changed let files = changed_files( repo_root.path().to_path_buf(), From ac4435a201afd938d5a98d0092d1f3f6ee474197 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 21 Nov 2024 09:48:52 -0500 Subject: [PATCH 211/218] release(turborepo): 2.3.1 (#9482) Co-authored-by: Turbobot <turbobot@vercel.com> --- packages/create-turbo/package.json | 2 +- packages/eslint-config-turbo/package.json | 2 +- packages/eslint-plugin-turbo/package.json | 2 +- packages/turbo-codemod/package.json | 2 +- packages/turbo-gen/package.json | 2 +- packages/turbo-ignore/package.json | 2 +- packages/turbo-types/package.json | 2 +- packages/turbo-workspaces/package.json | 2 +- packages/turbo/package.json | 14 +++++++------- version.txt | 4 ++-- 10 files changed, 17 insertions(+), 17 deletions(-) diff --git a/packages/create-turbo/package.json b/packages/create-turbo/package.json index dac41e879917d..d4d5993165bec 100644 --- a/packages/create-turbo/package.json +++ b/packages/create-turbo/package.json @@ -1,6 +1,6 @@ { "name": "create-turbo", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Create a new Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/eslint-config-turbo/package.json b/packages/eslint-config-turbo/package.json index 704153089630d..02bc58708b34d 100644 --- a/packages/eslint-config-turbo/package.json +++ b/packages/eslint-config-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-turbo", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "ESLint config for Turborepo", "repository": { "type": "git", diff --git a/packages/eslint-plugin-turbo/package.json b/packages/eslint-plugin-turbo/package.json index a04a05e58fd9b..f2473b84663b8 100644 --- a/packages/eslint-plugin-turbo/package.json +++ b/packages/eslint-plugin-turbo/package.json @@ -1,6 +1,6 @@ { "name": "eslint-plugin-turbo", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "ESLint plugin for Turborepo", "keywords": [ "turbo", diff --git a/packages/turbo-codemod/package.json b/packages/turbo-codemod/package.json index d2269d1359a57..4ccf7a96abda6 100644 --- a/packages/turbo-codemod/package.json +++ b/packages/turbo-codemod/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/codemod", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Provides Codemod transformations to help upgrade your Turborepo codebase when a feature is deprecated.", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-gen/package.json b/packages/turbo-gen/package.json index e9d560f2a9b88..760e920d531df 100644 --- a/packages/turbo-gen/package.json +++ b/packages/turbo-gen/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/gen", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Extend a Turborepo", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-ignore/package.json b/packages/turbo-ignore/package.json index 378f1d7601549..267697c6a567e 100644 --- a/packages/turbo-ignore/package.json +++ b/packages/turbo-ignore/package.json @@ -1,6 +1,6 @@ { "name": "turbo-ignore", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "", "homepage": "https://turbo.build/repo", "keywords": [], diff --git a/packages/turbo-types/package.json b/packages/turbo-types/package.json index 9b7e7e045488b..1935fa56b6d8a 100644 --- a/packages/turbo-types/package.json +++ b/packages/turbo-types/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/types", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Turborepo types", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo-workspaces/package.json b/packages/turbo-workspaces/package.json index b8441c1ebbe10..8965667c4f898 100644 --- a/packages/turbo-workspaces/package.json +++ b/packages/turbo-workspaces/package.json @@ -1,6 +1,6 @@ { "name": "@turbo/workspaces", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Tools for working with package managers", "homepage": "https://turbo.build/repo", "license": "MIT", diff --git a/packages/turbo/package.json b/packages/turbo/package.json index da52884844e31..e86d7f066439e 100644 --- a/packages/turbo/package.json +++ b/packages/turbo/package.json @@ -1,6 +1,6 @@ { "name": "turbo", - "version": "2.3.1-canary.2", + "version": "2.3.1", "description": "Turborepo is a high-performance build system for JavaScript and TypeScript codebases.", "repository": "https://github.com/vercel/turborepo", "bugs": "https://github.com/vercel/turborepo/issues", @@ -17,11 +17,11 @@ "bin" ], "optionalDependencies": { - "turbo-darwin-64": "2.3.1-canary.2", - "turbo-darwin-arm64": "2.3.1-canary.2", - "turbo-linux-64": "2.3.1-canary.2", - "turbo-linux-arm64": "2.3.1-canary.2", - "turbo-windows-64": "2.3.1-canary.2", - "turbo-windows-arm64": "2.3.1-canary.2" + "turbo-darwin-64": "2.3.1", + "turbo-darwin-arm64": "2.3.1", + "turbo-linux-64": "2.3.1", + "turbo-linux-arm64": "2.3.1", + "turbo-windows-64": "2.3.1", + "turbo-windows-arm64": "2.3.1" } } diff --git a/version.txt b/version.txt index 417c459d8e345..90ba00e598856 100644 --- a/version.txt +++ b/version.txt @@ -1,2 +1,2 @@ -2.3.1-canary.2 -canary +2.3.1 +latest From 82ae03c597678555cc50b0109e358fe07834d246 Mon Sep 17 00:00:00 2001 From: Nicholas Yang <nicholas.yang@vercel.com> Date: Thu, 21 Nov 2024 10:59:28 -0500 Subject: [PATCH 212/218] chore: use mocked package in test (#9475) ### Description Use a mocked `@types` package instead of a real one in test so we don't hit the npm registry. ### Testing Instructions <!-- Give a quick description of steps to test your changes. --> --- ...my-app__index.ts`_with_dependencies_(npm@10.5.0).snap | 9 +++------ .../fixtures/turbo_trace_monorepo/apps/my-app/index.ts | 2 +- .../turbo_trace_monorepo/apps/my-app/package.json | 2 +- .../turbo_trace_monorepo/packages/ship-types/index.ts | 1 + .../packages/ship-types/package.json | 4 ++++ 5 files changed, 10 insertions(+), 8 deletions(-) create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/index.ts create mode 100644 turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/package.json diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap index fe03645c20180..2c7e1175a20c9 100644 --- a/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_monorepo_get_`apps__my-app__index.ts`_with_dependencies_(npm@10.5.0).snap @@ -12,18 +12,15 @@ expression: query_output { "path": "apps/my-app/types.ts" }, - { - "path": "node_modules/@types/d3-scale/index.d.ts" - }, - { - "path": "node_modules/@types/d3-time/index.d.ts" - }, { "path": "packages/another/index.jsx" }, { "path": "packages/module-package/my-module.mjs" }, + { + "path": "packages/ship-types/index.ts" + }, { "path": "packages/utils/index.ts" }, diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts index 96f84447bdb9d..1e2dc77fa5fa3 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/index.ts @@ -3,4 +3,4 @@ import ship from "utils"; import { blackbeard } from "../../packages/another/index.jsx"; import { Pirate } from "@/types.ts"; import { walkThePlank } from "module-package"; -import type { ScalePoint } from "d3-scale"; +import type { Ship } from "ship"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json index b1ac06f3367f5..568ed85ca3eb3 100644 --- a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/apps/my-app/package.json @@ -6,6 +6,6 @@ }, "dependencies": { "utils": "*", - "@types/d3-scale": "^4.0.2" + "@types/ship": "*" } } diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/index.ts b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/index.ts new file mode 100644 index 0000000000000..c91206a0e0056 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/index.ts @@ -0,0 +1 @@ +export type Ship = "pirate" | "privateer" | "corvette"; diff --git a/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/package.json b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/package.json new file mode 100644 index 0000000000000..c19c2c74a2b30 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace_monorepo/packages/ship-types/package.json @@ -0,0 +1,4 @@ +{ + "name": "@types/ship", + "types": "index.ts" +} \ No newline at end of file From c84926fdf7c6a20e34a674c7510f0249c62480de Mon Sep 17 00:00:00 2001 From: Chris Olszewski <chris.olszewski@vercel.com> Date: Thu, 21 Nov 2024 12:41:50 -0500 Subject: [PATCH 213/218] chore(ci): upgrade GitHub Actions to Node 20 (#9483) ### Description Upgrade all of our various actions to versions that use Node 20 since Node 16 is getting shut down December 5 Note this does not switch us off of [get-diff-action](https://github.com/technote-space/get-diff-action/) which has been deprecated so we will need to find a new solution. ### Testing Instructions CI on this PR Test Release: [workflow](https://github.com/vercel/turborepo/actions/runs/11955946798) <- failed because I wrote `actions/checkout@4` instead of `actions/checkout@v4` on the last step [workflow with fix](https://github.com/vercel/turborepo/actions/runs/11956800941) You should notice the lack of Node 16 warnings on the workflow summary page: https://github.com/vercel/turborepo/actions/runs/11954973491 --- .github/actions/setup-node/action.yml | 2 +- .github/actions/setup-rust/action.yml | 4 ++-- .github/workflows/bench-turborepo.yml | 8 ++++---- .github/workflows/lsp.yml | 5 +++-- .github/workflows/test-js-packages.yml | 4 ++-- .../turborepo-compare-cache-item.yml | 4 ++-- .../workflows/turborepo-native-lib-test.yml | 2 +- .github/workflows/turborepo-release.yml | 19 ++++++++----------- .github/workflows/turborepo-test.yml | 18 +++++++++--------- 9 files changed, 32 insertions(+), 34 deletions(-) diff --git a/.github/actions/setup-node/action.yml b/.github/actions/setup-node/action.yml index e4be4981f6407..b117d02b0ea53 100644 --- a/.github/actions/setup-node/action.yml +++ b/.github/actions/setup-node/action.yml @@ -25,7 +25,7 @@ runs: uses: pnpm/action-setup@v4 - name: Setup Node.js - uses: actions/setup-node@v3.6.0 + uses: actions/setup-node@v4 with: node-version: ${{ inputs.node-version }} cache: pnpm diff --git a/.github/actions/setup-rust/action.yml b/.github/actions/setup-rust/action.yml index e31772416a302..91b926b0daabe 100644 --- a/.github/actions/setup-rust/action.yml +++ b/.github/actions/setup-rust/action.yml @@ -38,14 +38,14 @@ runs: - name: Set Up Protoc id: set-up-protoc continue-on-error: true - uses: arduino/setup-protoc@v2.1.0 + uses: arduino/setup-protoc@v3 with: version: "26.x" repo-token: ${{ inputs.github-token }} - name: Set Up Protoc (second try) if: steps.set-up-protoc.outcome == 'failure' - uses: arduino/setup-protoc@v2.1.0 + uses: arduino/setup-protoc@v3 with: version: "26.x" repo-token: ${{ inputs.github-token }} diff --git a/.github/workflows/bench-turborepo.yml b/.github/workflows/bench-turborepo.yml index ef8172b3c8835..c200b9041070a 100644 --- a/.github/workflows/bench-turborepo.yml +++ b/.github/workflows/bench-turborepo.yml @@ -22,7 +22,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node - name: Setup Turborepo Environment @@ -61,7 +61,7 @@ jobs: runner: windows-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set filename for profile id: filename shell: bash @@ -106,7 +106,7 @@ jobs: TINYBIRD_TOKEN: ${{secrets.TINYBIRD_TOKEN}} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Node uses: ./.github/actions/setup-node @@ -141,7 +141,7 @@ jobs: needs: [send-to-tinybird] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Node uses: ./.github/actions/setup-node diff --git a/.github/workflows/lsp.yml b/.github/workflows/lsp.yml index 23d121ffdf153..d58abcf1ef177 100644 --- a/.github/workflows/lsp.yml +++ b/.github/workflows/lsp.yml @@ -45,14 +45,15 @@ jobs: options: ${{ matrix.settings.container-options }} steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Container if: ${{ matrix.settings.container-setup }} run: ${{ matrix.settings.container-setup }} - name: Setup Protoc - uses: arduino/setup-protoc@v1.2.0 + uses: arduino/setup-protoc@v3 with: + version: "26.x" repo-token: ${{ secrets.GITHUB_TOKEN }} - name: Setup capnproto diff --git a/.github/workflows/test-js-packages.yml b/.github/workflows/test-js-packages.yml index 47202a6eed8c6..1ff4fb2f837b9 100644 --- a/.github/workflows/test-js-packages.yml +++ b/.github/workflows/test-js-packages.yml @@ -22,7 +22,7 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: CI related changes id: ci @@ -78,7 +78,7 @@ jobs: echo "depth=$(( ${{ github.event.pull_request.commits || 1 }} + 1 ))" >> $GITHUB_OUTPUT - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.ref }} fetch-depth: ${{ steps.fetch-depth.outputs.depth }} diff --git a/.github/workflows/turborepo-compare-cache-item.yml b/.github/workflows/turborepo-compare-cache-item.yml index 6e35b519c6ff6..11bc540d5ab71 100644 --- a/.github/workflows/turborepo-compare-cache-item.yml +++ b/.github/workflows/turborepo-compare-cache-item.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 @@ -51,7 +51,7 @@ jobs: steps: - name: Setup Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 18 diff --git a/.github/workflows/turborepo-native-lib-test.yml b/.github/workflows/turborepo-native-lib-test.yml index 8368d2a55669d..ff971e4d7c3f8 100644 --- a/.github/workflows/turborepo-native-lib-test.yml +++ b/.github/workflows/turborepo-native-lib-test.yml @@ -43,7 +43,7 @@ jobs: echo "depth=$(( ${{ github.event.pull_request.commits || 1 }} + 1 ))" >> $GITHUB_OUTPUT - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: ${{ github.ref }} fetch-depth: ${{ steps.fetch-depth.outputs.depth }} diff --git a/.github/workflows/turborepo-release.yml b/.github/workflows/turborepo-release.yml index 7aad56e181af4..4e627e9c3df5b 100644 --- a/.github/workflows/turborepo-release.yml +++ b/.github/workflows/turborepo-release.yml @@ -16,9 +16,6 @@ env: CARGO_PROFILE_RELEASE_LTO: true NPM_TOKEN: ${{ secrets.NPM_TOKEN }} RELEASE_TURBO_CLI: true # TODO: do we need this? - # Needed since we need to build on Xenial which doesn't have a new enough - # GLIBC to use Node 20. - ACTIONS_ALLOW_USE_UNSECURE_NODE_VERSION: true on: workflow_dispatch: @@ -44,7 +41,7 @@ jobs: stage: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-node with: enable-corepack: false @@ -71,7 +68,7 @@ jobs: steps: - name: Show Stage Commit run: echo "${{ needs.stage.outputs.stage-branch }}" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ needs.stage.outputs.stage-branch }} - name: Setup Turborepo Environment @@ -89,7 +86,7 @@ jobs: steps: - name: Show Stage Commit run: echo "${{ needs.stage.outputs.stage-branch }}" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: ${{ needs.stage.outputs.stage-branch }} - name: Setup Turborepo Environment @@ -135,7 +132,7 @@ jobs: - name: Show Stage Commit run: echo "${{ needs.stage.outputs.stage-branch }}" - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: ref: "${{ needs.stage.outputs.stage-branch }}" @@ -144,7 +141,7 @@ jobs: run: ${{ matrix.settings.container-setup }} - name: Setup Protoc - uses: arduino/setup-protoc@v2.1.0 + uses: arduino/setup-protoc@v3 with: version: "26.x" repo-token: ${{ secrets.GITHUB_TOKEN }} @@ -190,7 +187,7 @@ jobs: steps: - name: Show Stage Commit run: echo "${{ needs.stage.outputs.stage-branch }}" - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: ref: "${{ needs.stage.outputs.stage-branch }}" - run: git fetch origin --tags @@ -207,7 +204,7 @@ jobs: git config --global user.email 'turbobot@vercel.com' - name: Install GoReleaser - uses: goreleaser/goreleaser-action@v3 + uses: goreleaser/goreleaser-action@v6 with: distribution: goreleaser-pro version: v1.18.2 @@ -249,7 +246,7 @@ jobs: steps: - name: Show Stage Commit run: echo "${{ needs.stage.outputs.stage-branch }}" - - uses: actions/checkout@1.0.0 + - uses: actions/checkout@v4 with: ref: ${{ needs.stage.outputs.stage-branch }} - name: Get version diff --git a/.github/workflows/turborepo-test.yml b/.github/workflows/turborepo-test.yml index f505d66eddf44..e6b982cf0c35a 100644 --- a/.github/workflows/turborepo-test.yml +++ b/.github/workflows/turborepo-test.yml @@ -22,7 +22,7 @@ jobs: pull-requests: write steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: CI related changes id: ci @@ -129,7 +129,7 @@ jobs: if: matrix.os.runner == 'windows-latest' shell: bash run: git config --global core.autocrlf input - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Setup Turborepo Environment uses: ./.github/actions/setup-turborepo-environment @@ -141,7 +141,7 @@ jobs: uses: ./.github/actions/install-global-turbo - name: Setup Graphviz - uses: ts-graphviz/setup-graphviz@v1 + uses: ts-graphviz/setup-graphviz@v2 with: macos-skip-brew-update: "true" env: @@ -149,7 +149,7 @@ jobs: - name: Cache Prysk id: cache-prysk - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: cli/.cram_env key: prysk-venv-${{ matrix.os.runner }} @@ -166,7 +166,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Disable corepack. actions/setup-node invokes other package managers and # that causes corepack to throw an error, so we disable it first. @@ -208,7 +208,7 @@ jobs: - "metal" steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Rust uses: ./.github/actions/setup-rust @@ -250,7 +250,7 @@ jobs: - "metal" steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Turborepo Environment uses: ./.github/actions/setup-turborepo-environment @@ -291,7 +291,7 @@ jobs: if: matrix.os.name == 'windows' - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Turborepo Environment uses: ./.github/actions/setup-turborepo-environment @@ -300,7 +300,7 @@ jobs: node-version: "18.20.2" - name: Run sccache-cache - uses: mozilla-actions/sccache-action@v0.0.3 + uses: mozilla-actions/sccache-action@v0.0.6 - name: Run tests timeout-minutes: 120 From 6bef9e01083f31423f9b5bb7f6d10f2883c91aa3 Mon Sep 17 00:00:00 2001 From: Thomas Knickman <tknickman@gmail.com> Date: Thu, 21 Nov 2024 13:08:00 -0500 Subject: [PATCH 214/218] fix(ci): add missing version to pr title workflow (#9487) ### Description Add missing version to workflow ### Testing Instructions <!-- Give a quick description of steps to test your changes. --> --- .github/workflows/lint-pr-title.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint-pr-title.yml b/.github/workflows/lint-pr-title.yml index a3eacf59078db..d6fda33e1b663 100644 --- a/.github/workflows/lint-pr-title.yml +++ b/.github/workflows/lint-pr-title.yml @@ -16,7 +16,7 @@ jobs: name: Validate PR title runs-on: ubuntu-latest steps: - - uses: amannn/action-semantic-pull-request + - uses: amannn/action-semantic-pull-request@v5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: From f352346a70e0e278df198ef52703d0045731c5d7 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthonyshew@gmail.com> Date: Thu, 21 Nov 2024 11:18:37 -0700 Subject: [PATCH 215/218] feat(tui): Enter interactive with `i` key. (#9479) ### Description We've begun to embrace the letters on the keyboard a bit more for manipulating the TUI. This PR allows you to enter into interacting with a task using the `i` key. Notably, it leaves `Enter` in place, despite the helper text changing. This is to let muscle memory for existing users keep at it - until we remove it in 3.0. Hopefully they see the helper text by then. ### Testing Instructions Try it out! --------- Co-authored-by: Chris Olszewski <chris.olszewski@vercel.com> --- crates/turborepo-ui/src/tui/input.rs | 2 +- crates/turborepo-ui/src/tui/pane.rs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/turborepo-ui/src/tui/input.rs b/crates/turborepo-ui/src/tui/input.rs index fb17dc5b19b8d..c23cb9025b7f9 100644 --- a/crates/turborepo-ui/src/tui/input.rs +++ b/crates/turborepo-ui/src/tui/input.rs @@ -114,7 +114,7 @@ fn translate_key_event(options: InputOptions, key_event: KeyEvent) -> Option<Eve } KeyCode::Up => Some(Event::Up), KeyCode::Down => Some(Event::Down), - KeyCode::Enter => Some(Event::EnterInteractive), + KeyCode::Enter | KeyCode::Char('i') => Some(Event::EnterInteractive), _ => None, } } diff --git a/crates/turborepo-ui/src/tui/pane.rs b/crates/turborepo-ui/src/tui/pane.rs index 361743c7f4567..e33a89a52d029 100644 --- a/crates/turborepo-ui/src/tui/pane.rs +++ b/crates/turborepo-ui/src/tui/pane.rs @@ -7,8 +7,8 @@ use tui_term::widget::PseudoTerminal; use super::{app::LayoutSections, TerminalOutput}; -const FOOTER_TEXT_ACTIVE: &str = "Press`Ctrl-Z` to stop interacting."; -const FOOTER_TEXT_INACTIVE: &str = "Press `Enter` to interact."; +const FOOTER_TEXT_ACTIVE: &str = "Press `Ctrl-Z` to stop interacting."; +const FOOTER_TEXT_INACTIVE: &str = "Press `i` to interact."; const HAS_SELECTION: &str = "Press `c` to copy selection"; const TASK_LIST_HIDDEN: &str = "Press `h` to show task list."; From b6ddde3f11d3b0bef2e7621b95e25be6df7fa37f Mon Sep 17 00:00:00 2001 From: Adrien Foulon <6115458+Tofandel@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:41:44 +0100 Subject: [PATCH 216/218] perf: Exclude network while doing getReport (#9351) This will speed up the report generation and avoid unwanted DNS queries during the report See https://github.com/lovell/detect-libc/pull/21 --- packages/turbo-repository/js/index.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/turbo-repository/js/index.js b/packages/turbo-repository/js/index.js index 36cb0cf9f67bb..98ee1e2e64141 100644 --- a/packages/turbo-repository/js/index.js +++ b/packages/turbo-repository/js/index.js @@ -26,7 +26,10 @@ function isMusl() { return true; } } else { + const orig = process.report.excludeNetwork; + process.report.excludeNetwork = true; const { glibcVersionRuntime } = process.report.getReport().header; + process.report.excludeNetwork = orig; if (typeof glibcVersionRuntime === "string") { try { // We support glibc v2.26+ From 0a2ef1791d4f7749d5ce32d59e6d35e2f7e8e069 Mon Sep 17 00:00:00 2001 From: Nicholas Yang <nicholas.yang@vercel.com> Date: Thu, 21 Nov 2024 13:53:25 -0500 Subject: [PATCH 217/218] feat(trace): resolve incorrect extension (#9486) ### Description Invalid extensions are unfortunately too common in imports. Therefore if we can't resolve with the extension, we strip it and try again. ### Testing Instructions Added a test where we try to import with the wrong extension --- crates/turbo-trace/src/tracer.rs | 35 +++++++++++++++---- crates/turborepo/tests/query.rs | 1 + ...n.mjs`_with_dependencies_(npm@10.5.0).snap | 20 +++++++++++ .../turbo_trace/incorrect_extension.mjs | 1 + 4 files changed, 50 insertions(+), 7 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__turbo_trace_get_`incorrect_extension.mjs`_with_dependencies_(npm@10.5.0).snap create mode 100644 turborepo-tests/integration/fixtures/turbo_trace/incorrect_extension.mjs diff --git a/crates/turbo-trace/src/tracer.rs b/crates/turbo-trace/src/tracer.rs index 3f34d54c86db2..acdd69c0e29d2 100644 --- a/crates/turbo-trace/src/tracer.rs +++ b/crates/turbo-trace/src/tracer.rs @@ -1,6 +1,6 @@ use std::{collections::HashMap, sync::Arc}; -use camino::Utf8PathBuf; +use camino::{Utf8Path, Utf8PathBuf}; use globwalk::WalkType; use miette::{Diagnostic, Report, SourceSpan}; use oxc_resolver::{ @@ -211,15 +211,36 @@ impl Tracer { debug!("built in: {:?}", err); } Err(err) => { - // Try to resolve the import as a type import via `@/types/<import>` - let type_package = format!("@types/{}", import); - let resolved_type_import = resolver - .resolve(file_path, type_package.as_str()) + if !import.starts_with(".") { + // Try to resolve the import as a type import via `@/types/<import>` + let type_package = format!("@types/{}", import); + debug!("trying to resolve type import: {}", type_package); + let resolved_type_import = resolver + .resolve(file_dir, type_package.as_str()) + .ok() + .and_then(|resolved| resolved.into_path_buf().try_into().ok()); + + if let Some(resolved_type_import) = resolved_type_import { + debug!("resolved type import succeeded"); + files.push(resolved_type_import); + continue; + } + } + + // Also try without the extension just in case the wrong extension is used + let without_extension = Utf8Path::new(import).with_extension(""); + debug!( + "trying to resolve extensionless import: {}", + without_extension + ); + let resolved_extensionless_import = resolver + .resolve(file_dir, without_extension.as_str()) .ok() .and_then(|resolved| resolved.into_path_buf().try_into().ok()); - if let Some(resolved_type_import) = resolved_type_import { - files.push(resolved_type_import); + if let Some(resolved_extensionless_import) = resolved_extensionless_import { + debug!("resolved extensionless import succeeded"); + files.push(resolved_extensionless_import); continue; } diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index 1b981978189fe..09dfa06c8ec25 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -63,6 +63,7 @@ fn test_trace() -> Result<(), anyhow::Error> { "get `import_value_and_type.ts` with type dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: TYPES) { files { items { path } } } } }", "get `import_value_and_type.ts` with value dependencies" => "query { file(path: \"import_value_and_type.ts\") { path dependencies(importType: VALUES) { files { items { path } } } } }", "get `export_conditions` with dependencies" => "query { file(path: \"export_conditions.js\") { path dependencies(depth: 1) { files { items { path } } } } }", + "get `incorrect_extension.mjs` with dependencies" => "query { file(path: \"incorrect_extension.mjs\") { path dependencies(depth: 1) { files { items { path } } } } }", ); Ok(()) diff --git a/crates/turborepo/tests/snapshots/query__turbo_trace_get_`incorrect_extension.mjs`_with_dependencies_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`incorrect_extension.mjs`_with_dependencies_(npm@10.5.0).snap new file mode 100644 index 0000000000000..ba1409b9dd8a2 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__turbo_trace_get_`incorrect_extension.mjs`_with_dependencies_(npm@10.5.0).snap @@ -0,0 +1,20 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "file": { + "path": "incorrect_extension.mjs", + "dependencies": { + "files": { + "items": [ + { + "path": "bar.js" + } + ] + } + } + } + } +} diff --git a/turborepo-tests/integration/fixtures/turbo_trace/incorrect_extension.mjs b/turborepo-tests/integration/fixtures/turbo_trace/incorrect_extension.mjs new file mode 100644 index 0000000000000..c3029bd8ac3a7 --- /dev/null +++ b/turborepo-tests/integration/fixtures/turbo_trace/incorrect_extension.mjs @@ -0,0 +1 @@ +import { bar } from "./bar.cjs"; From 2895ae24efd4b7cbc305ba06e931bba09986c2b4 Mon Sep 17 00:00:00 2001 From: Anthony Shew <anthonyshew@gmail.com> Date: Thu, 21 Nov 2024 13:38:41 -0700 Subject: [PATCH 218/218] refactor(tui): Gain better aesthetic for helper text. (#9478) ### Description Just wanting to spruce things up a bit. - Left-aligned the text so that it bounces around less when changing states. This is considered a generally good practice in UI design. - Re-writing text chunks for simplicity In the process of adjusting the text with a comma as a separator, I realized I could refactor the logic for which text to render to be a little easier to read. Isn't it great when the simplicity of the visual design is reflected in the code?! ### Testing Instructions You'll want to put the TUI into different states to see them all. Matrix is: - Task list open/closed - Text selected/not selected - Task being interacted with/ not interacted with A sample of the spirit of the changes is below. Before ![CleanShot 2024-11-20 at 23 05 58@2x](https://github.com/user-attachments/assets/e5ba1e5b-54e1-4cc6-9dee-20ac2e17d303) After ![CleanShot 2024-11-20 at 23 06 38@2x](https://github.com/user-attachments/assets/50be8c06-fbfb-4e46-bce7-d50da8f83f9e) --------- Co-authored-by: Chris Olszewski <chris.olszewski@vercel.com> --- crates/turborepo-ui/src/tui/pane.rs | 41 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/crates/turborepo-ui/src/tui/pane.rs b/crates/turborepo-ui/src/tui/pane.rs index e33a89a52d029..d0ca9d61f7688 100644 --- a/crates/turborepo-ui/src/tui/pane.rs +++ b/crates/turborepo-ui/src/tui/pane.rs @@ -7,10 +7,10 @@ use tui_term::widget::PseudoTerminal; use super::{app::LayoutSections, TerminalOutput}; -const FOOTER_TEXT_ACTIVE: &str = "Press `Ctrl-Z` to stop interacting."; -const FOOTER_TEXT_INACTIVE: &str = "Press `i` to interact."; -const HAS_SELECTION: &str = "Press `c` to copy selection"; -const TASK_LIST_HIDDEN: &str = "Press `h` to show task list."; +const FOOTER_TEXT_ACTIVE: &str = "Ctrl-z - Stop interacting"; +const FOOTER_TEXT_INACTIVE: &str = "i - Interact"; +const HAS_SELECTION: &str = "c - Copy selection"; +const TASK_LIST_HIDDEN: &str = "h - Show task list"; pub struct TerminalPane<'a, W> { terminal_output: &'a TerminalOutput<W>, @@ -39,24 +39,29 @@ impl<'a, W> TerminalPane<'a, W> { } fn footer(&self) -> Line { - let task_list_message = if !self.has_sidebar { - TASK_LIST_HIDDEN - } else { - "" + let build_message_vec = |footer_text: &str| -> String { + let mut messages = vec![footer_text]; + + if !self.has_sidebar { + messages.push(TASK_LIST_HIDDEN); + } + + if self.terminal_output.has_selection() { + messages.push(HAS_SELECTION); + } + + // Spaces are used to pad the footer text for aesthetics + format!(" {}", messages.join(", ")) }; match self.section { - LayoutSections::Pane if self.terminal_output.has_selection() => Line::from(format!( - "{FOOTER_TEXT_ACTIVE} {task_list_message} {HAS_SELECTION}" - )) - .centered(), - LayoutSections::Pane => Line::from(FOOTER_TEXT_ACTIVE.to_owned()).centered(), - LayoutSections::TaskList if self.terminal_output.has_selection() => Line::from( - format!("{FOOTER_TEXT_INACTIVE} {task_list_message} {HAS_SELECTION}"), - ) - .centered(), + LayoutSections::Pane => { + let messages = build_message_vec(FOOTER_TEXT_ACTIVE); + Line::from(messages).left_aligned() + } LayoutSections::TaskList => { - Line::from(format!("{FOOTER_TEXT_INACTIVE} {task_list_message}")).centered() + let messages = build_message_vec(FOOTER_TEXT_INACTIVE); + Line::from(messages).left_aligned() } LayoutSections::Search { results, .. } => { Line::from(format!("/ {}", results.query())).left_aligned()