Auto merge of #154668 - jhpratt:rollup-ePnl7Di, r=jhpratt

Rollup of 4 pull requests

Successful merges:

 - rust-lang/rust#154356 (    Add integer truncation and extension methods)
 - rust-lang/rust#154641 (build_helper: fix yarn locking, add check, and bump lockfile)
 - rust-lang/rust#154647 (change `c_double` to `f32` on `avr` targets)
 - rust-lang/rust#154655 (Fix associated type bound suggestion span issue)
This commit is contained in:
bors
2026-04-01 08:58:47 +00:00
16 changed files with 535 additions and 115 deletions
@@ -105,7 +105,13 @@ pub fn note_and_explain_type_err(
if !sp.contains(p_span) {
diag.span_label(p_span, format!("{expected}this type parameter"));
}
let parent = p_def_id.as_local().and_then(|id| {
let param_def_id = match *proj.self_ty().kind() {
ty::Param(param) => {
tcx.generics_of(body_owner_def_id).type_param(param, tcx).def_id
}
_ => p_def_id,
};
let parent = param_def_id.as_local().and_then(|id| {
let local_id = tcx.local_def_id_to_hir_id(id);
let generics = tcx.parent_hir_node(local_id).generics()?;
Some((id, generics))
+1 -1
View File
@@ -1,6 +1,6 @@
Equivalent to C's `double` type.
This type will almost always be [`f64`], which is guaranteed to be an [IEEE 754 double-precision float] in Rust. That said, the standard technically only guarantees that it be a floating-point number with at least the precision of a [`float`], and it may be `f32` or something entirely different from the IEEE-754 standard.
This type will almost always be [`f64`], which is guaranteed to be an [IEEE 754 double-precision float] in Rust. That said, the standard technically only guarantees that it be a floating-point number with at least the precision of a [`float`]; some 16-bit systems use [`f32`], for example. Esoteric systems could use something entirely different from the IEEE-754 standard.
[IEEE 754 double-precision float]: https://en.wikipedia.org/wiki/IEEE_754
[`float`]: c_float
+24 -6
View File
@@ -15,24 +15,27 @@ macro_rules! type_alias {
}
}
type_alias! { "c_char.md", c_char = c_char_definition::c_char; #[doc(cfg(all()))] }
// `#[doc(cfg(true))]` is used to prevent rustdoc from displaying a "Available on ..." box.
// The implementation of these constants is target-specific, but every target does define them.
type_alias! { "c_char.md", c_char = c_char_definition::c_char; #[doc(cfg(true))] }
type_alias! { "c_schar.md", c_schar = i8; }
type_alias! { "c_uchar.md", c_uchar = u8; }
type_alias! { "c_short.md", c_short = i16; }
type_alias! { "c_ushort.md", c_ushort = u16; }
type_alias! { "c_int.md", c_int = c_int_definition::c_int; #[doc(cfg(all()))] }
type_alias! { "c_uint.md", c_uint = c_int_definition::c_uint; #[doc(cfg(all()))] }
type_alias! { "c_int.md", c_int = c_int_definition::c_int; #[doc(cfg(true))] }
type_alias! { "c_uint.md", c_uint = c_int_definition::c_uint; #[doc(cfg(true))] }
type_alias! { "c_long.md", c_long = c_long_definition::c_long; #[doc(cfg(all()))] }
type_alias! { "c_ulong.md", c_ulong = c_long_definition::c_ulong; #[doc(cfg(all()))] }
type_alias! { "c_long.md", c_long = c_long_definition::c_long; #[doc(cfg(true))] }
type_alias! { "c_ulong.md", c_ulong = c_long_definition::c_ulong; #[doc(cfg(true))] }
type_alias! { "c_longlong.md", c_longlong = i64; }
type_alias! { "c_ulonglong.md", c_ulonglong = u64; }
type_alias! { "c_float.md", c_float = f32; }
type_alias! { "c_double.md", c_double = f64; }
type_alias! { "c_double.md", c_double= c_double_definition::c_double; #[doc(cfg(true))] }
mod c_char_definition {
crate::cfg_select! {
@@ -183,3 +186,18 @@ mod c_int_definition {
}
}
}
mod c_double_definition {
crate::cfg_select! {
target_arch = "avr" => {
// avr:
// Per https://gcc.gnu.org/wiki/avr-gcc#Type_Layout. The table says `4,8` because
// in C the width of `double` can be changed with the `-mdouble=32/64` setting. But
// 32-bits is the default for the rust avr target.
pub(super) type c_double = f32;
}
_ => {
pub(super) type c_double = f64;
}
}
}
+9
View File
@@ -110,6 +110,7 @@
#![feature(offset_of_enum)]
#![feature(panic_internals)]
#![feature(pattern_type_macro)]
#![feature(sealed)]
#![feature(ub_checks)]
// tidy-alphabetical-end
//
@@ -216,6 +217,14 @@ pub mod from {
pub use crate::macros::builtin::From;
}
mod sealed {
/// This trait being unreachable from outside the crate
/// prevents outside implementations of our extension traits.
/// This allows adding more trait methods in the future.
#[unstable(feature = "sealed", issue = "none")]
pub trait Sealed {}
}
// We don't export this through #[macro_export] for now, to avoid breakage.
#[unstable(feature = "autodiff", issue = "124509")]
/// Unstable module containing the unstable `autodiff` macro.
+84
View File
@@ -3944,5 +3944,89 @@ pub fn clamp_magnitude(self, limit: $UnsignedT) -> Self {
self
}
}
/// Truncate an integer to an integer of the same size or smaller, preserving the least
/// significant bits.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120i8, 120", stringify!($SelfT), ".truncate());")]
#[doc = concat!("assert_eq!(-120i8, (-120", stringify!($SelfT), ").truncate());")]
/// assert_eq!(120i8, 376i32.truncate());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn truncate<Target>(self) -> Target
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_truncate(self)
}
/// Truncate an integer to an integer of the same size or smaller, saturating at numeric bounds
/// instead of truncating.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120i8, 120", stringify!($SelfT), ".saturating_truncate());")]
#[doc = concat!("assert_eq!(-120i8, (-120", stringify!($SelfT), ").saturating_truncate());")]
/// assert_eq!(127i8, 376i32.saturating_truncate());
/// assert_eq!(-128i8, (-1000i32).saturating_truncate());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn saturating_truncate<Target>(self) -> Target
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_saturating_truncate(self)
}
/// Truncate an integer to an integer of the same size or smaller, returning `None` if the value
/// is outside the bounds of the smaller type.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(Some(120i8), 120", stringify!($SelfT), ".checked_truncate());")]
#[doc = concat!("assert_eq!(Some(-120i8), (-120", stringify!($SelfT), ").checked_truncate());")]
/// assert_eq!(None, 376i32.checked_truncate::<i8>());
/// assert_eq!(None, (-1000i32).checked_truncate::<i8>());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn checked_truncate<Target>(self) -> Option<Target>
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_checked_truncate(self)
}
/// Extend to an integer of the same size or larger, preserving its value.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120i128, 120i8.extend());")]
#[doc = concat!("assert_eq!(-120i128, (-120i8).extend());")]
/// ```
#[must_use = "this returns the extended value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn extend<Target>(self) -> Target
where Self: [const] traits::ExtendTarget<Target>
{
traits::ExtendTarget::internal_extend(self)
}
}
}
+10
View File
@@ -46,6 +46,7 @@ macro_rules! sign_dependent_expr {
mod float_parse;
mod nonzero;
mod saturating;
mod traits;
mod wrapping;
/// 100% perma-unstable
@@ -1795,3 +1796,12 @@ macro_rules! run_checked_loop {
from_str_int_impl! { signed isize i8 i16 i32 i64 i128 }
from_str_int_impl! { unsigned usize u8 u16 u32 u64 u128 }
macro_rules! impl_sealed {
($($t:ty)*) => {$(
/// Allows extension traits within `core`.
#[unstable(feature = "sealed", issue = "none")]
impl crate::sealed::Sealed for $t {}
)*}
}
impl_sealed! { isize i8 i16 i32 i64 i128 usize u8 u16 u32 u64 u128 }
+129
View File
@@ -0,0 +1,129 @@
/// Definitions of traits for numeric types
// Implementation based on `num_conv` by jhpratt, under (MIT OR Apache-2.0).
/// Trait for types that this type can be truncated to
#[unstable(feature = "num_internals", reason = "internal implementation detail", issue = "none")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
pub const trait TruncateTarget<Target>: crate::sealed::Sealed {
#[doc(hidden)]
fn internal_truncate(self) -> Target;
#[doc(hidden)]
fn internal_saturating_truncate(self) -> Target;
#[doc(hidden)]
fn internal_checked_truncate(self) -> Option<Target>;
}
/// Trait for types that this type can be truncated to
#[unstable(feature = "num_internals", reason = "internal implementation detail", issue = "none")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
pub const trait ExtendTarget<Target>: crate::sealed::Sealed {
#[doc(hidden)]
fn internal_extend(self) -> Target;
}
macro_rules! impl_truncate {
($($from:ty => $($to:ty),+;)*) => {$($(
const _: () = assert!(
size_of::<$from>() >= size_of::<$to>(),
concat!(
"cannot truncate ",
stringify!($from),
" to ",
stringify!($to),
" because ",
stringify!($from),
" is smaller than ",
stringify!($to)
)
);
#[unstable(feature = "num_internals", reason = "internal implementation detail", issue = "none")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
impl const TruncateTarget<$to> for $from {
#[inline]
fn internal_truncate(self) -> $to {
self as _
}
#[inline]
fn internal_saturating_truncate(self) -> $to {
if self > <$to>::MAX as Self {
<$to>::MAX
} else if self < <$to>::MIN as Self {
<$to>::MIN
} else {
self as _
}
}
#[inline]
fn internal_checked_truncate(self) -> Option<$to> {
if self > <$to>::MAX as Self || self < <$to>::MIN as Self {
None
} else {
Some(self as _)
}
}
}
)+)*};
}
macro_rules! impl_extend {
($($from:ty => $($to:ty),+;)*) => {$($(
const _: () = assert!(
size_of::<$from>() <= size_of::<$to>(),
concat!(
"cannot extend ",
stringify!($from),
" to ",
stringify!($to),
" because ",
stringify!($from),
" is larger than ",
stringify!($to)
)
);
#[unstable(feature = "num_internals", reason = "internal implementation detail", issue = "none")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
impl const ExtendTarget<$to> for $from {
fn internal_extend(self) -> $to {
self as _
}
}
)+)*};
}
impl_truncate! {
u8 => u8;
u16 => u16, u8;
u32 => u32, u16, u8;
u64 => u64, u32, u16, u8;
u128 => u128, u64, u32, u16, u8;
usize => usize, u16, u8;
i8 => i8;
i16 => i16, i8;
i32 => i32, i16, i8;
i64 => i64, i32, i16, i8;
i128 => i128, i64, i32, i16, i8;
isize => isize, i16, i8;
}
impl_extend! {
u8 => u8, u16, u32, u64, u128, usize;
u16 => u16, u32, u64, u128, usize;
u32 => u32, u64, u128;
u64 => u64, u128;
u128 => u128;
usize => usize;
i8 => i8, i16, i32, i64, i128, isize;
i16 => i16, i32, i64, i128, isize;
i32 => i32, i64, i128;
i64 => i64, i128;
i128 => i128;
isize => isize;
}
+78
View File
@@ -4107,5 +4107,83 @@ pub const fn min_value() -> Self { Self::MIN }
#[deprecated(since = "TBD", note = "replaced by the `MAX` associated constant on this type")]
#[rustc_diagnostic_item = concat!(stringify!($SelfT), "_legacy_fn_max_value")]
pub const fn max_value() -> Self { Self::MAX }
/// Truncate an integer to an integer of the same size or smaller, preserving the least
/// significant bits.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120u8, 120", stringify!($SelfT), ".truncate());")]
/// assert_eq!(120u8, 376u32.truncate());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn truncate<Target>(self) -> Target
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_truncate(self)
}
/// Truncate an integer to an integer of the same size or smaller, saturating at numeric bounds
/// instead of truncating.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120u8, 120", stringify!($SelfT), ".saturating_truncate());")]
/// assert_eq!(255u8, 376u32.saturating_truncate());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn saturating_truncate<Target>(self) -> Target
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_saturating_truncate(self)
}
/// Truncate an integer to an integer of the same size or smaller, returning `None` if the value
/// is outside the bounds of the smaller type.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(Some(120u8), 120", stringify!($SelfT), ".checked_truncate());")]
/// assert_eq!(None, 376u32.checked_truncate::<u8>());
/// ```
#[must_use = "this returns the truncated value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn checked_truncate<Target>(self) -> Option<Target>
where Self: [const] traits::TruncateTarget<Target>
{
traits::TruncateTarget::internal_checked_truncate(self)
}
/// Extend to an integer of the same size or larger, preserving its value.
///
/// # Examples
///
/// ```
/// #![feature(integer_extend_truncate)]
#[doc = concat!("assert_eq!(120u128, 120u8.extend());")]
/// ```
#[must_use = "this returns the extended value and does not modify the original"]
#[unstable(feature = "integer_extend_truncate", issue = "154330")]
#[rustc_const_unstable(feature = "integer_truncate_extend", issue = "154330")]
#[inline]
pub const fn extend<Target>(self) -> Target
where Self: [const] traits::ExtendTarget<Target>
{
traits::ExtendTarget::internal_extend(self)
}
}
}
+10 -2
View File
@@ -1,7 +1,7 @@
use std::error::Error;
use std::path::{Path, PathBuf};
use std::process::Command;
use std::{fs, io};
use std::{env, fs, io};
/// Install all the npm deps, and return the path of `node_modules`.
pub fn install(src_root_path: &Path, out_dir: &Path, yarn: &Path) -> Result<PathBuf, io::Error> {
@@ -19,7 +19,7 @@ pub fn install(src_root_path: &Path, out_dir: &Path, yarn: &Path) -> Result<Path
let mut cmd = Command::new(yarn);
cmd.arg("install");
// make sure our `yarn.lock` file actually means something
cmd.arg("--frozen");
cmd.arg("--frozen-lockfile");
cmd.current_dir(out_dir);
let exit_status = cmd
@@ -38,5 +38,13 @@ pub fn install(src_root_path: &Path, out_dir: &Path, yarn: &Path) -> Result<Path
"yarn install returned exit code {exit_status}"
))));
}
if env::var("BOOTSTRAP_SKIP_YARN_LOCK_CHECK").is_err()
&& fs::read_to_string(src_root_path.join("yarn.lock"))?
!= fs::read_to_string(out_dir.join("yarn.lock"))?
{
return Err(io::Error::other(Box::<dyn Error + Send + Sync>::from(format!(
"yarn lockfile was modified despite --frozen-lockfile. please file a bug report. this check can be bypassed by setting $BOOTSTRAP_SKIP_YARN_LOCK_CHECK`"
))));
}
Ok(nm_path)
}
+5 -1
View File
@@ -5,13 +5,17 @@ LL | fn ext(&self) {}
| --- the method is available for `u8` here
...
LL | a.ext();
| ^^^ method not found in `u8`
| ^^^
|
= help: items from traits can only be used if the trait is in scope
help: trait `SettingsExt` which provides `ext` is implemented but not in scope; perhaps you want to import it
|
LL + use auto::SettingsExt;
|
help: there is a method `extend` with a similar name
|
LL | a.extend();
| +++
error: aborting due to 1 previous error
@@ -0,0 +1,38 @@
//@ run-rustfix
#![allow(dead_code)]
use std::marker::PhantomData;
trait Visitor<'de> {
type Value;
}
trait Deserializer<'de> {
type Error;
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>;
}
struct Wrapper<'de, T, E>(Result<T, E>, PhantomData<&'de ()>);
impl<'de, T, E> Deserializer<'de> for Wrapper<'de, T, E>
where
T: Deserializer<'de, Error = E>,
{
type Error = E;
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
match self.0 {
Ok(deserializer) => deserializer.deserialize_ignored_any(visitor), //~ ERROR mismatched types
Err(error) => Err(error),
}
}
}
fn main() {}
@@ -0,0 +1,38 @@
//@ run-rustfix
#![allow(dead_code)]
use std::marker::PhantomData;
trait Visitor<'de> {
type Value;
}
trait Deserializer<'de> {
type Error;
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>;
}
struct Wrapper<'de, T, E>(Result<T, E>, PhantomData<&'de ()>);
impl<'de, T, E> Deserializer<'de> for Wrapper<'de, T, E>
where
T: Deserializer<'de>,
{
type Error = E;
fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
where
V: Visitor<'de>,
{
match self.0 {
Ok(deserializer) => deserializer.deserialize_ignored_any(visitor), //~ ERROR mismatched types
Err(error) => Err(error),
}
}
}
fn main() {}
@@ -0,0 +1,22 @@
error[E0308]: mismatched types
--> $DIR/associated-error-bound-issue-145586.rs:32:33
|
LL | impl<'de, T, E> Deserializer<'de> for Wrapper<'de, T, E>
| - expected this type parameter
...
LL | fn deserialize_ignored_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
| ----------------------------- expected `Result<<V as Visitor<'de>>::Value, E>` because of return type
...
LL | Ok(deserializer) => deserializer.deserialize_ignored_any(visitor),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `Result<<V as Visitor<'_>>::Value, E>`, found `Result<<V as Visitor<'_>>::Value, ...>`
|
= note: expected enum `Result<_, E>`
found enum `Result<_, <T as Deserializer<'de>>::Error>`
help: consider further restricting this bound
|
LL | T: Deserializer<'de, Error = E>,
| +++++++++++
error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.
@@ -1,5 +1,5 @@
error[E0277]: `Rc<Foo>` cannot be shared between threads safely
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:14:7
--> $DIR/deep-level-send-bound-check-issue-40827.rs:14:7
|
LL | f(Foo(Arc::new(Bar::B(None))));
| - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Rc<Foo>` cannot be shared between threads safely
@@ -8,24 +8,24 @@ LL | f(Foo(Arc::new(Bar::B(None))));
|
= help: within `Bar`, the trait `Sync` is not implemented for `Rc<Foo>`
note: required because it appears within the type `Bar`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:6:6
--> $DIR/deep-level-send-bound-check-issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required for `Arc<Bar>` to implement `Send`
note: required because it appears within the type `Foo`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:4:8
--> $DIR/deep-level-send-bound-check-issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^
note: required by a bound in `f`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:11:9
--> $DIR/deep-level-send-bound-check-issue-40827.rs:11:9
|
LL | fn f<T: Send>(_: T) {}
| ^^^^ required by this bound in `f`
error[E0277]: `Rc<Foo>` cannot be sent between threads safely
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:14:7
--> $DIR/deep-level-send-bound-check-issue-40827.rs:14:7
|
LL | f(Foo(Arc::new(Bar::B(None))));
| - ^^^^^^^^^^^^^^^^^^^^^^^^^^^ `Rc<Foo>` cannot be sent between threads safely
@@ -34,18 +34,18 @@ LL | f(Foo(Arc::new(Bar::B(None))));
|
= help: within `Bar`, the trait `Send` is not implemented for `Rc<Foo>`
note: required because it appears within the type `Bar`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:6:6
--> $DIR/deep-level-send-bound-check-issue-40827.rs:6:6
|
LL | enum Bar {
| ^^^
= note: required for `Arc<Bar>` to implement `Send`
note: required because it appears within the type `Foo`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:4:8
--> $DIR/deep-level-send-bound-check-issue-40827.rs:4:8
|
LL | struct Foo(Arc<Bar>);
| ^^^
note: required by a bound in `f`
--> $DIR/deep-level-Send-bound-check-issue-40827.rs:11:9
--> $DIR/deep-level-send-bound-check-issue-40827.rs:11:9
|
LL | fn f<T: Send>(_: T) {}
| ^^^^ required by this bound in `f`
+72 -96
View File
@@ -102,18 +102,17 @@
"@nodelib/fs.scandir" "2.1.5"
fastq "^1.6.0"
"@puppeteer/browsers@2.3.0":
version "2.3.0"
resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.3.0.tgz#791ea7d80450fea24eb19fb1d70c367ad4e08cae"
integrity sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==
"@puppeteer/browsers@2.13.0":
version "2.13.0"
resolved "https://registry.yarnpkg.com/@puppeteer/browsers/-/browsers-2.13.0.tgz#10f980c6d65efeff77f8a3cac6e1a7ac10604500"
integrity sha512-46BZJYJjc/WwmKjsvDFykHtXrtomsCIrwYQPOP7VfMJoZY2bsDF9oROBABR3paDjDcmkUye1Pb1BqdcdiipaWA==
dependencies:
debug "^4.3.5"
debug "^4.4.3"
extract-zip "^2.0.1"
progress "^2.0.3"
proxy-agent "^6.4.0"
semver "^7.6.3"
tar-fs "^3.0.6"
unbzip2-stream "^1.4.3"
proxy-agent "^6.5.0"
semver "^7.7.4"
tar-fs "^3.1.1"
yargs "^17.7.2"
"@so-ric/colorspace@^1.1.6":
@@ -266,11 +265,6 @@ bare-url@^2.2.2:
dependencies:
bare-path "^3.0.0"
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
baseline-browser-mapping@^2.8.19:
version "2.8.25"
resolved "https://registry.yarnpkg.com/baseline-browser-mapping/-/baseline-browser-mapping-2.8.25.tgz#947dc6f81778e0fa0424a2ab9ea09a3033e71109"
@@ -296,14 +290,14 @@ braces@^3.0.3:
dependencies:
fill-range "^7.1.1"
browser-ui-test@^0.22.2:
version "0.22.3"
resolved "https://registry.yarnpkg.com/browser-ui-test/-/browser-ui-test-0.22.3.tgz#83a3dccc93b738887f555d52aae64cb2b7885d66"
integrity sha512-y3TmrJ146stGQ4+Pk6I8Erxb1Uj5kzIPGGoWJmK9V73Kv9L+u0L4yjW5/4pNszFCy07FqC9FxQvOAL+/4RTorg==
browser-ui-test@^0.23.3:
version "0.23.3"
resolved "https://registry.yarnpkg.com/browser-ui-test/-/browser-ui-test-0.23.3.tgz#fe3b978cfe43d09ee9edd4b9d939a936dd654c30"
integrity sha512-VWiRH7sSwpnQSe1Rll5iOPS+IeFa1rMThCXrP5Pwspm95OOA8Wylv2B6yqreEw25DE3qPmgJUeZZC7Uh9wnjSg==
dependencies:
css-unit-converter "^1.1.2"
pngjs "^3.4.0"
puppeteer "^22.15.0"
puppeteer "^24.31.0"
readline-sync "^1.4.10"
browserslist@^4.23.3:
@@ -322,14 +316,6 @@ buffer-crc32@~0.2.3:
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
buffer@^5.2.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.1.13"
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -348,14 +334,13 @@ chalk@^4.0.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
chromium-bidi@0.6.3:
version "0.6.3"
resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-0.6.3.tgz#363fe1ca6b9c6122b9f1b2a47f9449ecf712f755"
integrity sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==
chromium-bidi@14.0.0:
version "14.0.0"
resolved "https://registry.yarnpkg.com/chromium-bidi/-/chromium-bidi-14.0.0.tgz#15a12ab083ae519a49a724e94994ca0a9ced9c8e"
integrity sha512-9gYlLtS6tStdRWzrtXaTMnqcM4dudNegMXJxkR0I/CXObHalYeYcAMPrL19eroNZHtJ8DQmu1E+ZNOYu/IXMXw==
dependencies:
mitt "3.0.1"
urlpattern-polyfill "10.0.0"
zod "3.23.8"
mitt "^3.0.1"
zod "^3.24.1"
cliui@^8.0.1:
version "8.0.1"
@@ -444,7 +429,7 @@ data-uri-to-buffer@^6.0.2:
resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz#8a58bb67384b261a38ef18bea1810cb01badd28b"
integrity sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==
debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.6:
debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.4.3:
version "4.4.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a"
integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==
@@ -465,10 +450,10 @@ degenerator@^5.0.0:
escodegen "^2.1.0"
esprima "^4.0.1"
devtools-protocol@0.0.1312386:
version "0.0.1312386"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz#5ab824d6f1669ec6c6eb0fba047e73601d969052"
integrity sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==
devtools-protocol@0.0.1581282:
version "0.0.1581282"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1581282.tgz#7f289b837e052ad04eb16e9575877801c2b3716c"
integrity sha512-nv7iKtNZQshSW2hKzYNr46nM/Cfh5SEvE2oV0/SEGgc9XupIY5ggf84Cz8eJIkBce7S3bmTAauFD6aysMpnqsQ==
doctrine@^3.0.0:
version "3.0.0"
@@ -842,11 +827,6 @@ https-proxy-agent@^7.0.6:
agent-base "^7.1.2"
debug "4"
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore@^5.2.0:
version "5.3.2"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
@@ -1036,7 +1016,7 @@ minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
dependencies:
brace-expansion "^1.1.7"
mitt@3.0.1:
mitt@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/mitt/-/mitt-3.0.1.tgz#ea36cf0cc30403601ae074c8f77b7092cdab36d1"
integrity sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==
@@ -1185,7 +1165,7 @@ progress@^2.0.3:
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
proxy-agent@^6.4.0:
proxy-agent@^6.5.0:
version "6.5.0"
resolved "https://registry.yarnpkg.com/proxy-agent/-/proxy-agent-6.5.0.tgz#9e49acba8e4ee234aacb539f89ed9c23d02f232d"
integrity sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==
@@ -1217,26 +1197,30 @@ punycode@^2.1.0:
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5"
integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==
puppeteer-core@22.15.0:
version "22.15.0"
resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-22.15.0.tgz#c76926cce5dbc177572797a9dacc325c313fa91a"
integrity sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==
puppeteer-core@24.40.0:
version "24.40.0"
resolved "https://registry.yarnpkg.com/puppeteer-core/-/puppeteer-core-24.40.0.tgz#1f389cd9432cb077f703ca2cb6758490cdccbc7e"
integrity sha512-MWL3XbUCfVgGR0gRsidzT6oKJT2QydPLhMITU6HoVWiiv4gkb6gJi3pcdAa8q4HwjBTbqISOWVP4aJiiyUJvag==
dependencies:
"@puppeteer/browsers" "2.3.0"
chromium-bidi "0.6.3"
debug "^4.3.6"
devtools-protocol "0.0.1312386"
ws "^8.18.0"
"@puppeteer/browsers" "2.13.0"
chromium-bidi "14.0.0"
debug "^4.4.3"
devtools-protocol "0.0.1581282"
typed-query-selector "^2.12.1"
webdriver-bidi-protocol "0.4.1"
ws "^8.19.0"
puppeteer@^22.15.0:
version "22.15.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-22.15.0.tgz#4f842087090f1d9017ce947512e7baff55a10e75"
integrity sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==
puppeteer@^24.31.0:
version "24.40.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-24.40.0.tgz#6df6aeee9dabf29bed3bb2be5c209d00518d4a79"
integrity sha512-IxQbDq93XHVVLWHrAkFP7F7iHvb9o0mgfsSIMlhHb+JM+JjM1V4v4MNSQfcRWJopx9dsNOr9adYv0U5fm9BJBQ==
dependencies:
"@puppeteer/browsers" "2.3.0"
"@puppeteer/browsers" "2.13.0"
chromium-bidi "14.0.0"
cosmiconfig "^9.0.0"
devtools-protocol "0.0.1312386"
puppeteer-core "22.15.0"
devtools-protocol "0.0.1581282"
puppeteer-core "24.40.0"
typed-query-selector "^2.12.1"
queue-microtask@^1.2.2:
version "1.2.3"
@@ -1296,10 +1280,10 @@ safe-stable-stringify@^2.3.1:
resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
semver@^7.6.3:
version "7.7.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946"
integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==
semver@^7.7.4:
version "7.7.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.4.tgz#28464e36060e991fa7a11d0279d2d3f3b57a7e8a"
integrity sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==
shebang-command@^2.0.0:
version "2.0.0"
@@ -1401,10 +1385,10 @@ supports-color@^7.1.0:
dependencies:
has-flag "^4.0.0"
tar-fs@^3.0.6:
version "3.1.1"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.1.tgz#4f164e59fb60f103d472360731e8c6bb4a7fe9ef"
integrity sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==
tar-fs@^3.1.1:
version "3.1.2"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-3.1.2.tgz#114b012f54796f31e62f3e57792820a80b83ae6e"
integrity sha512-QGxxTxxyleAdyM3kpFs14ymbYmNFrfY+pHj7Z8FgtbZ7w2//VAgLMac7sT6nRpIHjppXO2AwwEOg0bPFVRcmXw==
dependencies:
pump "^3.0.0"
tar-stream "^3.1.5"
@@ -1438,11 +1422,6 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
to-regex-range@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
@@ -1472,19 +1451,16 @@ type-fest@^0.20.2:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
typed-query-selector@^2.12.1:
version "2.12.1"
resolved "https://registry.yarnpkg.com/typed-query-selector/-/typed-query-selector-2.12.1.tgz#04423bfb71b8f3aee3df1c29598ed6c7c8f55284"
integrity sha512-uzR+FzI8qrUEIu96oaeBJmd9E7CFEiQ3goA5qCVgc4s5llSubcfGHq9yUstZx/k4s9dXHVKsE35YWoFyvEqEHA==
typescript@^5.8.3:
version "5.9.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f"
integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==
unbzip2-stream@^1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
dependencies:
buffer "^5.2.1"
through "^2.3.8"
undici-types@~7.16.0:
version "7.16.0"
resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46"
@@ -1505,16 +1481,16 @@ uri-js@^4.2.2:
dependencies:
punycode "^2.1.0"
urlpattern-polyfill@10.0.0:
version "10.0.0"
resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz#f0a03a97bfb03cdf33553e5e79a2aadd22cac8ec"
integrity sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==
util-deprecate@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
webdriver-bidi-protocol@0.4.1:
version "0.4.1"
resolved "https://registry.yarnpkg.com/webdriver-bidi-protocol/-/webdriver-bidi-protocol-0.4.1.tgz#d411e7b8e158408d83bb166b0b4f1054fa3f077e"
integrity sha512-ARrjNjtWRRs2w4Tk7nqrf2gBI0QXWuOmMCx2hU+1jUt6d00MjMxURrhxhGbrsoiZKJrhTSTzbIrc554iKI10qw==
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -1567,10 +1543,10 @@ wrappy@1:
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
ws@^8.18.0:
version "8.18.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.3.tgz#b56b88abffde62791c639170400c93dcb0c95472"
integrity sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==
ws@^8.19.0:
version "8.20.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.20.0.tgz#4cd9532358eba60bc863aad1623dfb045a4d4af8"
integrity sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==
y18n@^5.0.5:
version "5.0.8"
@@ -1608,7 +1584,7 @@ yocto-queue@^0.1.0:
resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
zod@3.23.8:
version "3.23.8"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.23.8.tgz#e37b957b5d52079769fb8097099b592f0ef4067d"
integrity sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==
zod@^3.24.1:
version "3.25.76"
resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34"
integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==