diff --git a/AspNetCore.Analyzer.props b/AspNetCore.Analyzer.props new file mode 100644 index 0000000000..5036184620 --- /dev/null +++ b/AspNetCore.Analyzer.props @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/Directory.Build.props b/Directory.Build.props index 3a10242347..1691a1d4eb 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -33,6 +33,13 @@ false true + + netstandard2.0 + TUnit.AspNetCore.Analyzers + TUnit.AspNetCore.Analyzers + false + true + $([System.DateTime]::Now.ToString("yyyy")) diff --git a/Directory.Packages.props b/Directory.Packages.props index ae70c9562e..57d1d9036c 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -85,9 +85,10 @@ - - - + + + + diff --git a/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj b/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj new file mode 100644 index 0000000000..a37eda453b --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Roslyn414/TUnit.AspNetCore.Analyzers.Roslyn414.csproj @@ -0,0 +1,9 @@ + + + + 4.14 + + + + + diff --git a/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj b/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj new file mode 100644 index 0000000000..5df2a50bec --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Roslyn44/TUnit.AspNetCore.Analyzers.Roslyn44.csproj @@ -0,0 +1,9 @@ + + + + 4.4 + + + + + diff --git a/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj b/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj new file mode 100644 index 0000000000..5694a2f514 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Roslyn47/TUnit.AspNetCore.Analyzers.Roslyn47.csproj @@ -0,0 +1,9 @@ + + + + 4.7 + + + + + diff --git a/TUnit.AspNetCore.Analyzers.Tests/TUnit.AspNetCore.Analyzers.Tests.csproj b/TUnit.AspNetCore.Analyzers.Tests/TUnit.AspNetCore.Analyzers.Tests.csproj new file mode 100644 index 0000000000..e7bcc196d9 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/TUnit.AspNetCore.Analyzers.Tests.csproj @@ -0,0 +1,22 @@ + + + + + + net8.0;net9.0;net10.0 + + + + + + + + + + + + + + + + diff --git a/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs new file mode 100644 index 0000000000..1c085261f9 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier.cs @@ -0,0 +1,59 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Testing; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Testing; + +namespace TUnit.AspNetCore.Analyzers.Tests.Verifiers; + +public static partial class CSharpAnalyzerVerifier + where TAnalyzer : DiagnosticAnalyzer, new() +{ + public class Test : CSharpAnalyzerTest + { + public Test() + { + ReferenceAssemblies.AddAssemblies(ReferenceAssemblies.Net.Net60.Assemblies); + SolutionTransforms.Add((solution, projectId) => + { + var project = solution.GetProject(projectId); + + if (project is null) + { + return solution; + } + + var compilationOptions = project.CompilationOptions; + + if (compilationOptions is null) + { + return solution; + } + + if (compilationOptions is CSharpCompilationOptions cSharpCompilationOptions) + { + compilationOptions = + cSharpCompilationOptions.WithNullableContextOptions(NullableContextOptions.Enable); + } + + if (project.ParseOptions is not CSharpParseOptions parseOptions) + { + return solution; + } + + compilationOptions = compilationOptions + .WithSpecificDiagnosticOptions(compilationOptions.SpecificDiagnosticOptions + .SetItems(CSharpVerifierHelper.NullableWarnings) + // Suppress analyzer release tracking warnings - we're testing TUnit analyzers, not release tracking + .SetItem("RS2007", ReportDiagnostic.Suppress) + .SetItem("RS2008", ReportDiagnostic.Suppress)); + + solution = solution.WithProjectCompilationOptions(projectId, compilationOptions) + .WithProjectParseOptions(projectId, parseOptions + .WithLanguageVersion(LanguageVersion.Preview)); + + return solution; + }); + } + } +} diff --git a/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier`1.cs b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier`1.cs new file mode 100644 index 0000000000..08543e0cd5 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpAnalyzerVerifier`1.cs @@ -0,0 +1,52 @@ +using System.Diagnostics.CodeAnalysis; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Testing; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Testing; + +namespace TUnit.AspNetCore.Analyzers.Tests.Verifiers; + +public static partial class CSharpAnalyzerVerifier + where TAnalyzer : DiagnosticAnalyzer, new() +{ + /// + public static DiagnosticResult Diagnostic() + => CSharpAnalyzerVerifier.Diagnostic(); + + /// + public static DiagnosticResult Diagnostic(string diagnosticId) + => CSharpAnalyzerVerifier.Diagnostic(diagnosticId); + + /// + public static DiagnosticResult Diagnostic(DiagnosticDescriptor descriptor) + => CSharpAnalyzerVerifier.Diagnostic(descriptor); + + /// + public static Task VerifyAnalyzerAsync([StringSyntax("c#")] string source, params DiagnosticResult[] expected) + { + return VerifyAnalyzerAsync(source, _ => { }, expected); + } + + /// + public static async Task VerifyAnalyzerAsync([StringSyntax("c#")] string source, Action configureTest, params DiagnosticResult[] expected) + { + var test = new Test + { + TestCode = source, + ReferenceAssemblies = ReferenceAssemblies.Net.Net90, + TestState = + { + AdditionalReferences = + { + typeof(TUnit.Core.TUnitAttribute).Assembly.Location, + }, + }, + }; + + test.ExpectedDiagnostics.AddRange(expected); + + configureTest(test); + + await test.RunAsync(CancellationToken.None); + } +} diff --git a/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpVerifierHelper.cs b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpVerifierHelper.cs new file mode 100644 index 0000000000..e34302c084 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/CSharpVerifierHelper.cs @@ -0,0 +1,32 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; + +namespace TUnit.AspNetCore.Analyzers.Tests.Verifiers; + +internal static class CSharpVerifierHelper +{ + /// + /// By default, the compiler reports diagnostics for nullable reference types at + /// , and the analyzer test framework defaults to only validating + /// diagnostics at . This map contains all compiler diagnostic IDs + /// related to nullability mapped to , which is then used to enable all + /// of these warnings for default validation during analyzer and code fix tests. + /// + internal static ImmutableDictionary NullableWarnings { get; } = GetNullableWarningsFromCompiler(); + + private static ImmutableDictionary GetNullableWarningsFromCompiler() + { + string[] args = ["/warnaserror:nullable", "-p:LangVersion=preview"]; + var commandLineArguments = CSharpCommandLineParser.Default.Parse(args, baseDirectory: Environment.CurrentDirectory, sdkDirectory: Environment.CurrentDirectory); + var nullableWarnings = commandLineArguments.CompilationOptions.SpecificDiagnosticOptions; + + // Workaround for https://github.com/dotnet/roslyn/issues/41610 + nullableWarnings = nullableWarnings + .SetItem("CS8632", ReportDiagnostic.Error) + .SetItem("CS8669", ReportDiagnostic.Error) + .SetItem("CS8652", ReportDiagnostic.Suppress); + + return nullableWarnings; + } +} diff --git a/TUnit.AspNetCore.Analyzers.Tests/Verifiers/LineEndingNormalizingVerifier.cs b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/LineEndingNormalizingVerifier.cs new file mode 100644 index 0000000000..848dd250a3 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/Verifiers/LineEndingNormalizingVerifier.cs @@ -0,0 +1,101 @@ +using System.Diagnostics.CodeAnalysis; +using Microsoft.CodeAnalysis.Testing; + +namespace TUnit.AspNetCore.Analyzers.Tests.Verifiers; + +/// +/// A custom verifier that normalizes line endings to LF before comparison to support cross-platform testing. +/// This prevents tests from failing due to differences between Windows (CRLF) and Unix (LF) line endings. +/// By normalizing to LF (the universal standard), tests pass consistently on all platforms. +/// +public class LineEndingNormalizingVerifier : IVerifier +{ + private readonly DefaultVerifier _defaultVerifier = new(); + + public void Empty(string collectionName, IEnumerable collection) + { + _defaultVerifier.Empty(collectionName, collection); + } + + public void Equal(T expected, T actual, string? message = null) + { + // Normalize line endings for string comparisons + if (expected is string expectedString && actual is string actualString) + { + var normalizedExpected = NormalizeLineEndings(expectedString); + var normalizedActual = NormalizeLineEndings(actualString); + _defaultVerifier.Equal(normalizedExpected, normalizedActual, message); + } + else + { + _defaultVerifier.Equal(expected, actual, message); + } + } + + public void True(bool assert, string? message = null) + { + _defaultVerifier.True(assert, message); + } + + public void False(bool assert, string? message = null) + { + _defaultVerifier.False(assert, message); + } + + [DoesNotReturn] + public void Fail(string? message = null) + { + _defaultVerifier.Fail(message); + } + + public void LanguageIsSupported(string language) + { + _defaultVerifier.LanguageIsSupported(language); + } + + public void NotEmpty(string collectionName, IEnumerable collection) + { + _defaultVerifier.NotEmpty(collectionName, collection); + } + + public void SequenceEqual(IEnumerable expected, IEnumerable actual, IEqualityComparer? equalityComparer = null, string? message = null) + { + // Normalize line endings for string sequence comparisons + if (typeof(T) == typeof(string)) + { + var normalizedExpected = expected.Cast().Select(NormalizeLineEndings).Cast(); + var normalizedActual = actual.Cast().Select(NormalizeLineEndings).Cast(); + _defaultVerifier.SequenceEqual(normalizedExpected, normalizedActual, equalityComparer, message); + } + else + { + _defaultVerifier.SequenceEqual(expected, actual, equalityComparer, message); + } + } + + public IVerifier PushContext(string context) + { + // Create a new verifier that wraps the result of PushContext on the default verifier + return new LineEndingNormalizingVerifierWithContext(_defaultVerifier.PushContext(context)); + } + + private static string NormalizeLineEndings(string value) + { + // Normalize all line endings to LF (Unix) for cross-platform consistent comparison + // LF is the universal standard and prevents Windows/Linux test mismatches + return value.Replace("\r\n", "\n"); + } + + /// + /// Internal helper class to wrap a verifier with context + /// + private class LineEndingNormalizingVerifierWithContext : LineEndingNormalizingVerifier + { + private readonly IVerifier _wrappedVerifier; + + public LineEndingNormalizingVerifierWithContext(IVerifier wrappedVerifier) + { + _wrappedVerifier = wrappedVerifier; + } + } +} diff --git a/TUnit.AspNetCore.Analyzers.Tests/WebApplicationFactoryAccessAnalyzerTests.cs b/TUnit.AspNetCore.Analyzers.Tests/WebApplicationFactoryAccessAnalyzerTests.cs new file mode 100644 index 0000000000..e2e6407c68 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers.Tests/WebApplicationFactoryAccessAnalyzerTests.cs @@ -0,0 +1,547 @@ +using Verifier = TUnit.AspNetCore.Analyzers.Tests.Verifiers.CSharpAnalyzerVerifier; + +namespace TUnit.AspNetCore.Analyzers.Tests; + +public class WebApplicationFactoryAccessAnalyzerTests +{ + private const string WebApplicationTestStub = """ + namespace TUnit.AspNetCore + { + public abstract class WebApplicationTest + { + public int UniqueId { get; } + } + + public abstract class WebApplicationTest : WebApplicationTest + where TFactory : class, new() + where TEntryPoint : class + { + public TFactory GlobalFactory { get; set; } = null!; + public object Factory { get; } = null!; + public System.IServiceProvider Services { get; } = null!; + public object? HttpCapture { get; } + + protected virtual System.Threading.Tasks.Task SetupAsync() => System.Threading.Tasks.Task.CompletedTask; + } + } + """; + + private const string WebApplicationFactoryStub = """ + namespace Microsoft.AspNetCore.Mvc.Testing + { + public class WebApplicationFactory where TEntryPoint : class + { + public System.IServiceProvider Services { get; } = null!; + public object Server { get; } = null!; + public object CreateClient() => new object(); + public object CreateDefaultClient() => new object(); + } + } + + namespace TUnit.AspNetCore + { + public class TestWebApplicationFactory : Microsoft.AspNetCore.Mvc.Testing.WebApplicationFactory + where TEntryPoint : class + { + } + } + """; + + [Test] + public async Task No_Error_When_Accessing_Factory_In_Test_Method() + { + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var factory = Factory; + var services = Services; + } + } + """ + ); + } + + [Test] + public async Task Error_When_Accessing_Factory_In_Constructor() + { + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + public MyTests() + { + var factory = {|#0:Factory|}; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("Factory", "constructor") + ); + } + + [Test] + public async Task Error_When_Accessing_Services_In_Constructor() + { + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + public MyTests() + { + var services = {|#0:Services|}; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("Services", "constructor") + ); + } + + [Test] + public async Task Error_When_Accessing_Factory_In_SetupAsync() + { + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + using System.Threading.Tasks; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + protected override Task SetupAsync() + { + var factory = {|#0:Factory|}; + return Task.CompletedTask; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("Factory", "SetupAsync") + ); + } + + [Test] + public async Task Error_When_Accessing_HttpCapture_In_SetupAsync() + { + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + using System.Threading.Tasks; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + protected override Task SetupAsync() + { + var capture = {|#0:HttpCapture|}; + return Task.CompletedTask; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("HttpCapture", "SetupAsync") + ); + } + + [Test] + public async Task Error_When_Accessing_GlobalFactory_In_Constructor() + { + // GlobalFactory is NOT available in constructor - it's injected via property injection after construction + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + public MyTests() + { + var factory = {|#0:GlobalFactory|}; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("GlobalFactory", "constructor") + ); + } + + [Test] + public async Task No_Error_When_Accessing_GlobalFactory_In_SetupAsync() + { + // GlobalFactory IS available in SetupAsync - it's injected before SetupAsync runs + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + using System.Threading.Tasks; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + protected override Task SetupAsync() + { + var factory = GlobalFactory; + return Task.CompletedTask; + } + + [Test] + public void MyTest() + { + } + } + """ + ); + } + + [Test] + public async Task No_Error_When_Accessing_UniqueId_In_SetupAsync() + { + // UniqueId IS available in SetupAsync + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + using System.Threading.Tasks; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + protected override Task SetupAsync() + { + var id = UniqueId; + return Task.CompletedTask; + } + + [Test] + public void MyTest() + { + } + } + """ + ); + } + + [Test] + public async Task No_Error_For_Unrelated_Factory_Property() + { + // A property named Factory on an unrelated class should not trigger the analyzer + await Verifier + .VerifyAnalyzerAsync( + """ + using TUnit.Core; + + public class SomeClass + { + public object Factory { get; } = null!; + } + + public class MyTests + { + private SomeClass _someClass = new(); + + public MyTests() + { + var factory = _someClass.Factory; + } + + [Test] + public void MyTest() + { + } + } + """ + ); + } + + [Test] + public async Task Error_When_Accessing_GlobalFactory_Services() + { + // GlobalFactory.Services should never be accessed - use Factory.Services instead + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var services = {|#0:GlobalFactory.Services|}; + } + } + """, + Verifier.Diagnostic(Rules.GlobalFactoryMemberAccess) + .WithLocation(0) + .WithArguments("Services") + ); + } + + [Test] + public async Task Error_When_Accessing_GlobalFactory_Server() + { + // GlobalFactory.Server should never be accessed - use Factory.Server instead + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var server = {|#0:GlobalFactory.Server|}; + } + } + """, + Verifier.Diagnostic(Rules.GlobalFactoryMemberAccess) + .WithLocation(0) + .WithArguments("Server") + ); + } + + [Test] + public async Task Error_When_Calling_GlobalFactory_CreateClient() + { + // GlobalFactory.CreateClient() should never be called - use Factory.CreateClient() instead + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var client = {|#0:GlobalFactory.CreateClient()|}; + } + } + """, + Verifier.Diagnostic(Rules.GlobalFactoryMemberAccess) + .WithLocation(0) + .WithArguments("CreateClient") + ); + } + + [Test] + public async Task Error_When_Calling_GlobalFactory_CreateDefaultClient() + { + // GlobalFactory.CreateDefaultClient() should never be called - use Factory.CreateDefaultClient() instead + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var client = {|#0:GlobalFactory.CreateDefaultClient()|}; + } + } + """, + Verifier.Diagnostic(Rules.GlobalFactoryMemberAccess) + .WithLocation(0) + .WithArguments("CreateDefaultClient") + ); + } + + [Test] + public async Task No_Error_When_Accessing_Factory_Services_In_Test() + { + // Factory.Services is the correct way to access services + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public class MyTests : TUnit.AspNetCore.WebApplicationTest + { + [Test] + public void MyTest() + { + var services = Services; + } + } + """ + ); + } + + [Test] + public async Task Error_When_Accessing_Factory_In_Constructor_With_Deep_Inheritance() + { + // Analyzer should detect WebApplicationTest even through multiple levels of inheritance + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationTestStub}} + + public class MyFactory { } + public class Program { } + + public abstract class BaseTestClass : TUnit.AspNetCore.WebApplicationTest + { + } + + public abstract class MiddleTestClass : BaseTestClass + { + } + + public class MyTests : MiddleTestClass + { + public MyTests() + { + var factory = {|#0:Factory|}; + } + + [Test] + public void MyTest() + { + } + } + """, + Verifier.Diagnostic(Rules.FactoryAccessedTooEarly) + .WithLocation(0) + .WithArguments("Factory", "constructor") + ); + } + + [Test] + public async Task Error_When_Accessing_GlobalFactory_Services_With_Deep_Inheritance() + { + // Analyzer should detect GlobalFactory.Services access even through multiple levels of inheritance + await Verifier + .VerifyAnalyzerAsync( + $$""" + using TUnit.Core; + {{WebApplicationFactoryStub}} + {{WebApplicationTestStub}} + + public class MyFactory : TUnit.AspNetCore.TestWebApplicationFactory { } + public class Program { } + + public abstract class BaseTestClass : TUnit.AspNetCore.WebApplicationTest + { + } + + public abstract class MiddleTestClass : BaseTestClass + { + } + + public class MyTests : MiddleTestClass + { + [Test] + public void MyTest() + { + var services = {|#0:GlobalFactory.Services|}; + } + } + """, + Verifier.Diagnostic(Rules.GlobalFactoryMemberAccess) + .WithLocation(0) + .WithArguments("Services") + ); + } +} diff --git a/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Shipped.md b/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Shipped.md new file mode 100644 index 0000000000..39071b5a25 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Shipped.md @@ -0,0 +1,6 @@ +## Release 1.0 + +### New Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|------- diff --git a/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Unshipped.md b/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Unshipped.md new file mode 100644 index 0000000000..e69fa429b4 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/AnalyzerReleases.Unshipped.md @@ -0,0 +1,11 @@ +### New Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|------- +TUnit0062 | Usage | Error | Factory property accessed before initialization in WebApplicationTest +TUnit0063 | Usage | Error | GlobalFactory member access breaks test isolation + +### Removed Rules + +Rule ID | Category | Severity | Notes +--------|----------|----------|------- diff --git a/TUnit.AspNetCore.Analyzers/ConcurrentDiagnosticAnalyzer.cs b/TUnit.AspNetCore.Analyzers/ConcurrentDiagnosticAnalyzer.cs new file mode 100644 index 0000000000..0cef679d93 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/ConcurrentDiagnosticAnalyzer.cs @@ -0,0 +1,16 @@ +using Microsoft.CodeAnalysis.Diagnostics; + +namespace TUnit.AspNetCore.Analyzers; + +public abstract class ConcurrentDiagnosticAnalyzer : DiagnosticAnalyzer +{ + public sealed override void Initialize(AnalysisContext context) + { + context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); + context.EnableConcurrentExecution(); + + InitializeInternal(context); + } + + protected abstract void InitializeInternal(AnalysisContext context); +} diff --git a/TUnit.AspNetCore.Analyzers/Resources.Designer.cs b/TUnit.AspNetCore.Analyzers/Resources.Designer.cs new file mode 100644 index 0000000000..de3968cd70 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/Resources.Designer.cs @@ -0,0 +1,112 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace TUnit.AspNetCore.Analyzers { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("TUnit.AspNetCore.Analyzers.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to The Factory, Services, and HttpCapture properties are not available in constructors or SetupAsync... + /// + internal static string TUnit0062Description { + get { + return ResourceManager.GetString("TUnit0062Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to '{0}' cannot be accessed in {1}. It is not initialized until after SetupAsync completes. + /// + internal static string TUnit0062MessageFormat { + get { + return ResourceManager.GetString("TUnit0062MessageFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Factory property accessed before initialization. + /// + internal static string TUnit0062Title { + get { + return ResourceManager.GetString("TUnit0062Title", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do not access Services, Server, or CreateClient on GlobalFactory directly... + /// + internal static string TUnit0063Description { + get { + return ResourceManager.GetString("TUnit0063Description", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to Do not access '{0}' on GlobalFactory. Use 'Factory.{0}' instead to ensure test isolation. + /// + internal static string TUnit0063MessageFormat { + get { + return ResourceManager.GetString("TUnit0063MessageFormat", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to GlobalFactory member access breaks test isolation. + /// + internal static string TUnit0063Title { + get { + return ResourceManager.GetString("TUnit0063Title", resourceCulture); + } + } + } +} diff --git a/TUnit.AspNetCore.Analyzers/Resources.resx b/TUnit.AspNetCore.Analyzers/Resources.resx new file mode 100644 index 0000000000..f749a357ac --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/Resources.resx @@ -0,0 +1,39 @@ + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + The Factory, Services, and HttpCapture properties are not available in constructors or SetupAsync. These properties are initialized in the [Before(HookType.Test)] hook which runs after SetupAsync. Access these properties only in test methods or [Before(HookType.Test)]/[After(HookType.Test)] hooks. + + + '{0}' cannot be accessed in {1}. It is not initialized until after SetupAsync completes. + + + Factory property accessed before initialization + + + Do not access Services, Server, or CreateClient on GlobalFactory directly. GlobalFactory is a shared template - use the Factory property instead, which provides an isolated instance for each test. + + + Do not access '{0}' on GlobalFactory. Use 'Factory.{0}' instead to ensure test isolation. + + + GlobalFactory member access breaks test isolation + + diff --git a/TUnit.AspNetCore.Analyzers/Rules.cs b/TUnit.AspNetCore.Analyzers/Rules.cs new file mode 100644 index 0000000000..aeccd1bc44 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/Rules.cs @@ -0,0 +1,30 @@ +using Microsoft.CodeAnalysis; + +namespace TUnit.AspNetCore.Analyzers; + +public static class Rules +{ + private const string UsageCategory = "Usage"; + + public static readonly DiagnosticDescriptor FactoryAccessedTooEarly = + CreateDescriptor("TUnit0062", UsageCategory, DiagnosticSeverity.Error); + + public static readonly DiagnosticDescriptor GlobalFactoryMemberAccess = + CreateDescriptor("TUnit0063", UsageCategory, DiagnosticSeverity.Error); + + private static DiagnosticDescriptor CreateDescriptor(string diagnosticId, string category, DiagnosticSeverity severity) + { + return new DiagnosticDescriptor( + id: diagnosticId, + title: new LocalizableResourceString(diagnosticId + "Title", + Resources.ResourceManager, typeof(Resources)), + messageFormat: new LocalizableResourceString(diagnosticId + "MessageFormat", Resources.ResourceManager, + typeof(Resources)), + category: category, + defaultSeverity: severity, + isEnabledByDefault: true, + description: new LocalizableResourceString(diagnosticId + "Description", Resources.ResourceManager, + typeof(Resources)) + ); + } +} diff --git a/TUnit.AspNetCore.Analyzers/TUnit.AspNetCore.Analyzers.csproj b/TUnit.AspNetCore.Analyzers/TUnit.AspNetCore.Analyzers.csproj new file mode 100644 index 0000000000..ba541a0f23 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/TUnit.AspNetCore.Analyzers.csproj @@ -0,0 +1,47 @@ + + + + + + netstandard2.0 + enable + latest + true + true + false + true + TUnit.AspNetCore.Analyzers + TUnit.AspNetCore.Analyzers + RS2003 + false + false + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + True + True + Resources.resx + + + + + + + + diff --git a/TUnit.AspNetCore.Analyzers/WebApplicationFactoryAccessAnalyzer.cs b/TUnit.AspNetCore.Analyzers/WebApplicationFactoryAccessAnalyzer.cs new file mode 100644 index 0000000000..ab7ce672c4 --- /dev/null +++ b/TUnit.AspNetCore.Analyzers/WebApplicationFactoryAccessAnalyzer.cs @@ -0,0 +1,203 @@ +using System.Collections.Immutable; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Microsoft.CodeAnalysis.Diagnostics; +using Microsoft.CodeAnalysis.Operations; + +namespace TUnit.AspNetCore.Analyzers; + +[DiagnosticAnalyzer(LanguageNames.CSharp)] +public class WebApplicationFactoryAccessAnalyzer : ConcurrentDiagnosticAnalyzer +{ + // Properties not available in constructors OR SetupAsync (initialized in Before hook) + private static readonly ImmutableHashSet RestrictedInConstructorAndSetup = ImmutableHashSet.Create( + "Factory", + "Services", + "HttpCapture" + ); + + // Properties not available in constructors only (available after property injection, before SetupAsync) + private static readonly ImmutableHashSet RestrictedInConstructorOnly = ImmutableHashSet.Create( + "GlobalFactory" + ); + + // Members that should never be accessed on GlobalFactory (breaks test isolation) + private static readonly ImmutableHashSet RestrictedGlobalFactoryMembers = ImmutableHashSet.Create( + "Services", + "Server", + "CreateClient", + "CreateDefaultClient" + ); + + public override ImmutableArray SupportedDiagnostics { get; } = + ImmutableArray.Create(Rules.FactoryAccessedTooEarly, Rules.GlobalFactoryMemberAccess); + + protected override void InitializeInternal(AnalysisContext context) + { + context.RegisterOperationAction(AnalyzePropertyReference, OperationKind.PropertyReference); + context.RegisterOperationAction(AnalyzeInvocation, OperationKind.Invocation); + } + + private void AnalyzePropertyReference(OperationAnalysisContext context) + { + if (context.Operation is not IPropertyReferenceOperation propertyReference) + { + return; + } + + var propertyName = propertyReference.Property.Name; + + // Check for GlobalFactory.Services or GlobalFactory.Server access + if (RestrictedGlobalFactoryMembers.Contains(propertyName) && + IsGlobalFactoryAccess(propertyReference.Instance)) + { + context.ReportDiagnostic(Diagnostic.Create( + Rules.GlobalFactoryMemberAccess, + context.Operation.Syntax.GetLocation(), + propertyName)); + return; + } + + var isRestrictedInBoth = RestrictedInConstructorAndSetup.Contains(propertyName); + var isRestrictedInConstructorOnly = RestrictedInConstructorOnly.Contains(propertyName); + + if (!isRestrictedInBoth && !isRestrictedInConstructorOnly) + { + return; + } + + // Check if this property belongs to WebApplicationTest or a derived type + var containingType = propertyReference.Property.ContainingType; + if (!IsWebApplicationTestType(containingType)) + { + return; + } + + // Check if we're in a constructor or SetupAsync method + var containingMethod = GetContainingMethod(context.Operation); + if (containingMethod == null) + { + return; + } + + string? contextName = null; + + if (containingMethod.MethodKind == MethodKind.Constructor) + { + // All restricted properties are invalid in constructor + contextName = "constructor"; + } + else if (containingMethod.Name == "SetupAsync" && containingMethod.IsOverride) + { + // Only Factory/Services/HttpCapture are invalid in SetupAsync + // GlobalFactory IS available in SetupAsync + if (isRestrictedInBoth) + { + contextName = "SetupAsync"; + } + } + + if (contextName != null) + { + context.ReportDiagnostic(Diagnostic.Create( + Rules.FactoryAccessedTooEarly, + context.Operation.Syntax.GetLocation(), + propertyName, + contextName)); + } + } + + private void AnalyzeInvocation(OperationAnalysisContext context) + { + if (context.Operation is not IInvocationOperation invocation) + { + return; + } + + var methodName = invocation.TargetMethod.Name; + + // Check for GlobalFactory.CreateClient() access + if (RestrictedGlobalFactoryMembers.Contains(methodName) && + IsGlobalFactoryAccess(invocation.Instance)) + { + context.ReportDiagnostic(Diagnostic.Create( + Rules.GlobalFactoryMemberAccess, + context.Operation.Syntax.GetLocation(), + methodName)); + } + } + + private static bool IsGlobalFactoryAccess(IOperation? instance) + { + if (instance is not IPropertyReferenceOperation propertyRef) + { + return false; + } + + // Check if accessing GlobalFactory property on a WebApplicationTest type + if (propertyRef.Property.Name != "GlobalFactory") + { + return false; + } + + return IsWebApplicationTestType(propertyRef.Property.ContainingType); + } + + private static bool IsWebApplicationTestType(INamedTypeSymbol? type) + { + while (type != null) + { + var typeName = type.Name; + var namespaceName = type.ContainingNamespace?.ToDisplayString(); + + // Check for WebApplicationTest or WebApplicationTest + if (typeName == "WebApplicationTest" && namespaceName == "TUnit.AspNetCore") + { + return true; + } + + // Also check the generic version + if (type.OriginalDefinition?.Name == "WebApplicationTest" && + type.OriginalDefinition.ContainingNamespace?.ToDisplayString() == "TUnit.AspNetCore") + { + return true; + } + + type = type.BaseType; + } + + return false; + } + + private static IMethodSymbol? GetContainingMethod(IOperation operation) + { + var current = operation; + while (current != null) + { + if (current is IMethodBodyOperation or IBlockOperation) + { + // Get the semantic model to find the containing method + var syntax = current.Syntax; + while (syntax != null) + { + if (syntax is MethodDeclarationSyntax or ConstructorDeclarationSyntax) + { + var semanticModel = operation.SemanticModel; + if (semanticModel != null) + { + var symbol = semanticModel.GetDeclaredSymbol(syntax); + if (symbol is IMethodSymbol methodSymbol) + { + return methodSymbol; + } + } + } + syntax = syntax.Parent; + } + } + current = current.Parent; + } + + return null; + } +} diff --git a/TUnit.AspNetCore/TUnit.AspNetCore.csproj b/TUnit.AspNetCore/TUnit.AspNetCore.csproj index d2f9702d99..03e41e5ad3 100644 --- a/TUnit.AspNetCore/TUnit.AspNetCore.csproj +++ b/TUnit.AspNetCore/TUnit.AspNetCore.csproj @@ -27,9 +27,26 @@ + + + + + + + + + + diff --git a/TUnit.AspNetCore/TestWebApplicationFactory.cs b/TUnit.AspNetCore/TestWebApplicationFactory.cs index 39ce8380f0..f489c846ea 100644 --- a/TUnit.AspNetCore/TestWebApplicationFactory.cs +++ b/TUnit.AspNetCore/TestWebApplicationFactory.cs @@ -27,8 +27,13 @@ public WebApplicationFactory GetIsolatedFactory( configureWebHostBuilder?.Invoke(builder); // Then apply standard configuration - builder.ConfigureTestServices(configureServices) - .ConfigureAppConfiguration(configureConfiguration); + builder + .ConfigureAppConfiguration(configureConfiguration) + .ConfigureTestServices(services => + { + configureServices(services); + services.AddSingleton(testContext); + }); if (options.EnableHttpExchangeCapture) { diff --git a/TUnit.Assertions.Tests/AssertConditions/BecauseTests.cs b/TUnit.Assertions.Tests/AssertConditions/BecauseTests.cs index 0c4c88137f..a75232e91c 100644 --- a/TUnit.Assertions.Tests/AssertConditions/BecauseTests.cs +++ b/TUnit.Assertions.Tests/AssertConditions/BecauseTests.cs @@ -144,4 +144,26 @@ await Assert.That(variable).IsFalse().Because(because1) var exception = await Assert.ThrowsAsync(action); await Assert.That(exception.Message).Contains(because1).And.Contains(because2); } + + [Test] + public async Task Because_Message_Appears_Inline_With_Expectation() + { + var expectedMessage = """ + Expected to be false, because this is the reason + but found True + + at Assert.That(variable).IsFalse().Because("this is the reason") + """; + + var variable = true; + + var action = async () => + { + await Assert.That(variable).IsFalse().Because("this is the reason"); + }; + + var exception = await Assert.ThrowsAsync(action); + await Assert.That(exception.Message.NormalizeLineEndings()) + .IsEqualTo(expectedMessage.NormalizeLineEndings()); + } } diff --git a/TUnit.Assertions.Tests/Bugs/Tests1600.cs b/TUnit.Assertions.Tests/Bugs/Tests1600.cs index e85824749b..0a8b4850ec 100644 --- a/TUnit.Assertions.Tests/Bugs/Tests1600.cs +++ b/TUnit.Assertions.Tests/Bugs/Tests1600.cs @@ -22,6 +22,39 @@ public async Task Custom_Comparer() await Assert.That(array1).IsEquivalentTo(array2).Using(new MyModelComparer()); } + [Test] + public async Task Custom_Predicate() + { + MyModel[] array1 = [new(), new(), new()]; + MyModel[] array2 = [new(), new(), new()]; + + // Using a lambda predicate instead of implementing IEqualityComparer + await Assert.That(array1).IsEquivalentTo(array2).Using((x, y) => true); + } + + [Test] + public async Task Custom_Predicate_With_Property_Comparison() + { + var users1 = new[] { new User("Alice", 30), new User("Bob", 25) }; + var users2 = new[] { new User("Bob", 25), new User("Alice", 30) }; + + // Elements have different order but are equivalent by name and age + await Assert.That(users1) + .IsEquivalentTo(users2) + .Using((u1, u2) => u1?.Name == u2?.Name && u1?.Age == u2?.Age); + } + + [Test] + public async Task Custom_Predicate_Not_Equivalent() + { + var users1 = new[] { new User("Alice", 30), new User("Bob", 25) }; + var users2 = new[] { new User("Charlie", 35), new User("Diana", 28) }; + + await Assert.That(users1) + .IsNotEquivalentTo(users2) + .Using((u1, u2) => u1?.Name == u2?.Name && u1?.Age == u2?.Age); + } + public class MyModel { public string Id { get; } = Guid.NewGuid().ToString(); @@ -39,4 +72,6 @@ public int GetHashCode(MyModel obj) return 1; } } + + public record User(string Name, int Age); } diff --git a/TUnit.Assertions.Tests/CollectionAssertionTests.cs b/TUnit.Assertions.Tests/CollectionAssertionTests.cs index ffb9a9b92d..e79b897477 100644 --- a/TUnit.Assertions.Tests/CollectionAssertionTests.cs +++ b/TUnit.Assertions.Tests/CollectionAssertionTests.cs @@ -270,4 +270,40 @@ await Assert.That(names) .And.Contains("Bob") .And.DoesNotContain("Dave"); } + + [Test] + public async Task All_Predicate_Failure_Message_Contains_Index_And_Value() + { + var items = new[] { 2, 4, -5, 8 }; + + await Assert.That(async () => + await Assert.That(items).All(x => x > 0) + ).Throws() + .WithMessageContaining("index 2") + .And.WithMessageContaining("[-5]"); + } + + [Test] + public async Task All_Predicate_Failure_Message_Contains_String_Value() + { + var names = new[] { "Alice", "Bob", "" }; + + await Assert.That(async () => + await Assert.That(names).All(x => !string.IsNullOrEmpty(x)) + ).Throws() + .WithMessageContaining("index 2") + .And.WithMessageContaining("[]"); + } + + [Test] + public async Task All_Predicate_Failure_Message_Contains_First_Failing_Item() + { + var items = new[] { 1, 2, 3, -1, -2, -3 }; + + await Assert.That(async () => + await Assert.That(items).All(x => x > 0) + ).Throws() + .WithMessageContaining("index 3") + .And.WithMessageContaining("[-1]"); + } } diff --git a/TUnit.Assertions/Conditions/CollectionAssertions.cs b/TUnit.Assertions/Conditions/CollectionAssertions.cs index bf9973f7c4..206630a348 100644 --- a/TUnit.Assertions/Conditions/CollectionAssertions.cs +++ b/TUnit.Assertions/Conditions/CollectionAssertions.cs @@ -423,7 +423,7 @@ protected override Task CheckAsync(EvaluationMetadata Using(IEquality return new DictionaryContainsKeyAssertion(Context, _expectedKey, comparer); } + public DictionaryContainsKeyAssertion Using(Func equalityPredicate) + { + return new DictionaryContainsKeyAssertion( + Context, _expectedKey, new FuncEqualityComparer(equalityPredicate)); + } + protected override Task CheckAsync(EvaluationMetadata metadata) { var value = metadata.Value; diff --git a/TUnit.Assertions/Conditions/Helpers/FuncEqualityComparer.cs b/TUnit.Assertions/Conditions/Helpers/FuncEqualityComparer.cs new file mode 100644 index 0000000000..aeb1307a7b --- /dev/null +++ b/TUnit.Assertions/Conditions/Helpers/FuncEqualityComparer.cs @@ -0,0 +1,25 @@ +namespace TUnit.Assertions.Conditions.Helpers; + +/// +/// An IEqualityComparer implementation that uses a custom Func for equality comparison. +/// This allows users to pass lambda predicates to assertion methods like Using(). +/// +/// The type of objects to compare. +internal sealed class FuncEqualityComparer : IEqualityComparer +{ + private readonly Func _equals; + + public FuncEqualityComparer(Func equals) + { + _equals = equals ?? throw new ArgumentNullException(nameof(equals)); + } + + public bool Equals(T? x, T? y) => _equals(x, y); + + // Return a constant hash code to force linear search in collection equivalency. + // This is intentional because: + // 1. We cannot derive a meaningful hash function from an equality predicate + // 2. CollectionEquivalencyChecker already uses O(n²) linear search for custom comparers + // 3. This matches the expected behavior for all custom IEqualityComparer implementations + public int GetHashCode(T obj) => 0; +} diff --git a/TUnit.Assertions/Conditions/IsEquivalentToAssertion.cs b/TUnit.Assertions/Conditions/IsEquivalentToAssertion.cs index 7592c54f0e..18f2fa8ae7 100644 --- a/TUnit.Assertions/Conditions/IsEquivalentToAssertion.cs +++ b/TUnit.Assertions/Conditions/IsEquivalentToAssertion.cs @@ -47,6 +47,12 @@ public IsEquivalentToAssertion Using(IEqualityComparer Using(Func equalityPredicate) + { + SetComparer(new FuncEqualityComparer(equalityPredicate)); + return this; + } + protected override Task CheckAsync(EvaluationMetadata metadata) { var value = metadata.Value; diff --git a/TUnit.Assertions/Conditions/NotEquivalentToAssertion.cs b/TUnit.Assertions/Conditions/NotEquivalentToAssertion.cs index e32548337f..41a6d3d880 100644 --- a/TUnit.Assertions/Conditions/NotEquivalentToAssertion.cs +++ b/TUnit.Assertions/Conditions/NotEquivalentToAssertion.cs @@ -46,6 +46,12 @@ public NotEquivalentToAssertion Using(IEqualityComparer Using(Func equalityPredicate) + { + SetComparer(new FuncEqualityComparer(equalityPredicate)); + return this; + } + protected override Task CheckAsync(EvaluationMetadata metadata) { var value = metadata.Value; diff --git a/TUnit.Assertions/Conditions/PredicateAssertions.cs b/TUnit.Assertions/Conditions/PredicateAssertions.cs index 744a257181..4d43ee668d 100644 --- a/TUnit.Assertions/Conditions/PredicateAssertions.cs +++ b/TUnit.Assertions/Conditions/PredicateAssertions.cs @@ -1,5 +1,6 @@ using System.Text; using TUnit.Assertions.Attributes; +using TUnit.Assertions.Conditions.Helpers; using TUnit.Assertions.Core; namespace TUnit.Assertions.Conditions; @@ -66,6 +67,12 @@ public IsEquatableOrEqualToAssertion Using(IEqualityComparer com return this; } + public IsEquatableOrEqualToAssertion Using(Func equalityPredicate) + { + SetComparer(new FuncEqualityComparer(equalityPredicate)); + return this; + } + protected override Task CheckAsync(EvaluationMetadata metadata) { var value = metadata.Value; diff --git a/TUnit.Assertions/Core/Assertion.cs b/TUnit.Assertions/Core/Assertion.cs index cda35ff933..1b9e06afc7 100644 --- a/TUnit.Assertions/Core/Assertion.cs +++ b/TUnit.Assertions/Core/Assertion.cs @@ -212,22 +212,24 @@ public OrContinuation Or /// protected Exception CreateException(AssertionResult result) { - var message = $""" - Expected {GetExpectation()} - but {result.Message} - - at {Context.ExpressionBuilder} - """; + var expectation = GetExpectation(); if (_becauseMessage != null) { - // Check if message already starts with "because" to avoid duplication + // Append because message inline with the expectation var becausePrefix = _becauseMessage.StartsWith("because ", StringComparison.OrdinalIgnoreCase) ? _becauseMessage : $"because {_becauseMessage}"; - message += $"\n\n{becausePrefix}"; + expectation = $"{expectation}, {becausePrefix}"; } + var message = $""" + Expected {expectation} + but {result.Message} + + at {Context.ExpressionBuilder} + """; + return new AssertionException(message); } diff --git a/TUnit.Core.SourceGenerator.Tests/MatrixTests.Test.verified.txt b/TUnit.Core.SourceGenerator.Tests/MatrixTests.Test.verified.txt index ea365df2ae..9b3fa0a86d 100644 --- a/TUnit.Core.SourceGenerator.Tests/MatrixTests.Test.verified.txt +++ b/TUnit.Core.SourceGenerator.Tests/MatrixTests.Test.verified.txt @@ -1365,3 +1365,117 @@ internal static class TUnit_TestProject_MatrixTests_Exclusion__int_int_ModuleIni global::TUnit.Core.SourceRegistrar.Register(typeof(global::TUnit.TestProject.MatrixTests), new TUnit_TestProject_MatrixTests_Exclusion__int_int_TestSource()); } } + + +// ===== FILE SEPARATOR ===== + +// +#pragma warning disable + +#nullable enable +namespace TUnit.Generated; +internal sealed class TUnit_TestProject_MatrixTests_MatrixMethod_WithEnumParameter_UsesOnlyMethodValues__bool_CountToTenEnum_TestSource : global::TUnit.Core.Interfaces.SourceGenerator.ITestSource +{ + public async global::System.Collections.Generic.IAsyncEnumerable GetTestsAsync(string testSessionId, [global::System.Runtime.CompilerServices.EnumeratorCancellation] global::System.Threading.CancellationToken cancellationToken = default) + { + var metadata = new global::TUnit.Core.TestMetadata + { + TestName = "MatrixMethod_WithEnumParameter_UsesOnlyMethodValues", + TestClassType = typeof(global::TUnit.TestProject.MatrixTests), + TestMethodName = "MatrixMethod_WithEnumParameter_UsesOnlyMethodValues", + Dependencies = global::System.Array.Empty(), + AttributeFactory = static () => + [ + new global::TUnit.Core.TestAttribute(), + new global::TUnit.TestProject.Attributes.EngineTest(global::TUnit.TestProject.Attributes.ExpectedResult.Pass) + ], + DataSources = new global::TUnit.Core.IDataSourceAttribute[] + { + new global::TUnit.Core.MatrixDataSourceAttribute(), + }, + ClassDataSources = global::System.Array.Empty(), + PropertyDataSources = global::System.Array.Empty(), + PropertyInjections = global::System.Array.Empty(), + InheritanceDepth = 0, + FilePath = @"", + LineNumber = 197, + MethodMetadata = new global::TUnit.Core.MethodMetadata + { + Type = typeof(global::TUnit.TestProject.MatrixTests), + TypeInfo = new global::TUnit.Core.ConcreteType(typeof(global::TUnit.TestProject.MatrixTests)), + Name = "MatrixMethod_WithEnumParameter_UsesOnlyMethodValues", + GenericTypeCount = 0, + ReturnType = typeof(global::System.Threading.Tasks.Task), + ReturnTypeInfo = new global::TUnit.Core.ConcreteType(typeof(global::System.Threading.Tasks.Task)), + Parameters = new global::TUnit.Core.ParameterMetadata[] + { + new global::TUnit.Core.ParameterMetadata(typeof(bool)) + { + Name = "flag", + TypeInfo = new global::TUnit.Core.ConcreteType(typeof(bool)), + IsNullable = false, + ReflectionInfo = typeof(global::TUnit.TestProject.MatrixTests).GetMethod("MatrixMethod_WithEnumParameter_UsesOnlyMethodValues", global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, new global::System.Type[] { typeof(bool), typeof(global::TUnit.TestProject.MatrixTests.CountToTenEnum) }, null)!.GetParameters()[0] + }, + new global::TUnit.Core.ParameterMetadata(typeof(global::TUnit.TestProject.MatrixTests.CountToTenEnum)) + { + Name = "enum", + TypeInfo = new global::TUnit.Core.ConcreteType(typeof(global::TUnit.TestProject.MatrixTests.CountToTenEnum)), + IsNullable = false, + ReflectionInfo = typeof(global::TUnit.TestProject.MatrixTests).GetMethod("MatrixMethod_WithEnumParameter_UsesOnlyMethodValues", global::System.Reflection.BindingFlags.Public | global::System.Reflection.BindingFlags.NonPublic | global::System.Reflection.BindingFlags.Instance, null, new global::System.Type[] { typeof(bool), typeof(global::TUnit.TestProject.MatrixTests.CountToTenEnum) }, null)!.GetParameters()[1] + } + }, + Class = global::TUnit.Core.ClassMetadata.GetOrAdd("TestsBase`1:global::TUnit.TestProject.MatrixTests", static () => + { + var classMetadata = new global::TUnit.Core.ClassMetadata + { + Type = typeof(global::TUnit.TestProject.MatrixTests), + TypeInfo = new global::TUnit.Core.ConcreteType(typeof(global::TUnit.TestProject.MatrixTests)), + Name = "MatrixTests", + Namespace = "TUnit.TestProject", + Assembly = global::TUnit.Core.AssemblyMetadata.GetOrAdd("TestsBase`1", static () => new global::TUnit.Core.AssemblyMetadata { Name = "TestsBase`1" }), + Parameters = global::System.Array.Empty(), + Properties = global::System.Array.Empty(), + Parent = null + }; + foreach (var prop in classMetadata.Properties) + { + prop.ClassMetadata = classMetadata; + prop.ContainingTypeMetadata = classMetadata; + } + return classMetadata; + }) + }, + InstanceFactory = (typeArgs, args) => new global::TUnit.TestProject.MatrixTests(), + InvokeTypedTest = static (instance, args, cancellationToken) => + { + try + { + switch (args.Length) + { + case 2: + { + return new global::System.Threading.Tasks.ValueTask(instance.MatrixMethod_WithEnumParameter_UsesOnlyMethodValues(TUnit.Core.Helpers.CastHelper.Cast(args[0]), TUnit.Core.Helpers.CastHelper.Cast(args[1]))); + } + default: + throw new global::System.ArgumentException($"Expected exactly 2 arguments, but got {args.Length}"); + } + } + catch (global::System.Exception ex) + { + return new global::System.Threading.Tasks.ValueTask(global::System.Threading.Tasks.Task.FromException(ex)); + } + }, + }; + metadata.UseRuntimeDataGeneration(testSessionId); + yield return metadata; + yield break; + } +} +internal static class TUnit_TestProject_MatrixTests_MatrixMethod_WithEnumParameter_UsesOnlyMethodValues__bool_CountToTenEnum_ModuleInitializer +{ + [global::System.Runtime.CompilerServices.ModuleInitializer] + public static void Initialize() + { + global::TUnit.Core.SourceRegistrar.Register(typeof(global::TUnit.TestProject.MatrixTests), new TUnit_TestProject_MatrixTests_MatrixMethod_WithEnumParameter_UsesOnlyMethodValues__bool_CountToTenEnum_TestSource()); + } +} diff --git a/TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs b/TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs index 31ecc4b5e8..7555f29138 100644 --- a/TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs +++ b/TUnit.Core.SourceGenerator/CodeGenerationHelpers.cs @@ -49,14 +49,16 @@ public static string GenerateParameterMetadataArray(IMethodSymbol method) } // Generate cached data source attributes for AOT compatibility + // Include both IDataSourceAttribute and IDataSourceMemberAttribute implementations var dataSourceAttributes = param.GetAttributes() .Where(attr => attr.AttributeClass != null && - attr.AttributeClass.AllInterfaces.Any(i => i.Name == "IDataSourceAttribute")) + attr.AttributeClass.AllInterfaces.Any(i => + i.Name == "IDataSourceAttribute" || i.Name == "IDataSourceMemberAttribute")) .ToArray(); if (dataSourceAttributes.Length > 0) { - writer.AppendLine($"CachedDataSourceAttributes = new global::TUnit.Core.IDataSourceAttribute[]"); + writer.AppendLine($"CachedDataSourceAttributes = new global::System.Attribute[]"); writer.AppendLine("{"); writer.SetIndentLevel(3); foreach (var attr in dataSourceAttributes) diff --git a/TUnit.Core/Attributes/TestData/CombinedDataSourcesAttribute.cs b/TUnit.Core/Attributes/TestData/CombinedDataSourcesAttribute.cs index 4d8ab15ef5..53a1a697ee 100644 --- a/TUnit.Core/Attributes/TestData/CombinedDataSourcesAttribute.cs +++ b/TUnit.Core/Attributes/TestData/CombinedDataSourcesAttribute.cs @@ -126,7 +126,9 @@ public sealed class CombinedDataSourcesAttribute : AsyncUntypedDataSourceGenerat if (parameterMetadata.CachedDataSourceAttributes != null) { // Source-generated mode: use cached attributes (no reflection!) - dataSourceAttributes = parameterMetadata.CachedDataSourceAttributes; + dataSourceAttributes = parameterMetadata.CachedDataSourceAttributes + .OfType() + .ToArray(); } else { diff --git a/TUnit.Core/Attributes/TestData/IDataSourceMemberAttribute.cs b/TUnit.Core/Attributes/TestData/IDataSourceMemberAttribute.cs new file mode 100644 index 0000000000..dcb9c3db5c --- /dev/null +++ b/TUnit.Core/Attributes/TestData/IDataSourceMemberAttribute.cs @@ -0,0 +1,9 @@ +namespace TUnit.Core; + +/// +/// Marker interface for attributes that provide data values for individual parameters +/// within a data source context (e.g., matrix testing). +/// Attributes implementing this interface will be cached by the source generator +/// for AOT-compatible runtime access. +/// +public interface IDataSourceMemberAttribute; diff --git a/TUnit.Core/Attributes/TestData/MatrixSourceAttribute.cs b/TUnit.Core/Attributes/TestData/MatrixSourceAttribute.cs index 7417dcb421..d1a7ccac7c 100644 --- a/TUnit.Core/Attributes/TestData/MatrixSourceAttribute.cs +++ b/TUnit.Core/Attributes/TestData/MatrixSourceAttribute.cs @@ -42,7 +42,7 @@ namespace TUnit.Core; /// /// The values to be used for this parameter in the test matrix. [AttributeUsage(AttributeTargets.Parameter)] -public class MatrixAttribute(params object?[]? objects) : TUnitAttribute +public class MatrixAttribute(params object?[]? objects) : TUnitAttribute, IDataSourceMemberAttribute { protected MatrixAttribute() : this(null) { diff --git a/TUnit.Core/EngineCancellationToken.cs b/TUnit.Core/EngineCancellationToken.cs index 395cc7c5dd..ea3250db16 100644 --- a/TUnit.Core/EngineCancellationToken.cs +++ b/TUnit.Core/EngineCancellationToken.cs @@ -14,8 +14,7 @@ public class EngineCancellationToken : IDisposable /// Gets the cancellation token. /// public CancellationToken Token { get; private set; } - - private CancellationTokenSource? _forcefulExitCts; + private volatile bool _forcefulExitStarted; /// @@ -27,6 +26,8 @@ internal void Initialise(CancellationToken cancellationToken) CancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); Token = CancellationTokenSource.Token; + Token.Register(_ => Cancel(), this); + // Console.CancelKeyPress is not supported on browser platforms #if NET5_0_OR_GREATER if (!OperatingSystem.IsBrowser()) @@ -38,8 +39,16 @@ internal void Initialise(CancellationToken cancellationToken) } #endif } - + private void OnCancelKeyPress(object? sender, ConsoleCancelEventArgs e) + { + Cancel(); + + // Prevent the default behavior (immediate termination) + e.Cancel = true; + } + + private void Cancel() { // Cancel the test execution if (!CancellationTokenSource.IsCancellationRequested) @@ -51,14 +60,9 @@ private void OnCancelKeyPress(object? sender, ConsoleCancelEventArgs e) if (!_forcefulExitStarted) { _forcefulExitStarted = true; - - // Cancel any previous forceful exit timer - _forcefulExitCts?.Cancel(); - _forcefulExitCts?.Dispose(); - _forcefulExitCts = new CancellationTokenSource(); - + // Start a new forceful exit timer - _ = Task.Delay(TimeSpan.FromSeconds(10), _forcefulExitCts.Token).ContinueWith(t => + _ = Task.Delay(TimeSpan.FromSeconds(30), CancellationToken.None).ContinueWith(t => { if (!t.IsCanceled) { @@ -67,9 +71,6 @@ private void OnCancelKeyPress(object? sender, ConsoleCancelEventArgs e) } }, TaskScheduler.Default); } - - // Prevent the default behavior (immediate termination) - e.Cancel = true; } private void OnProcessExit(object? sender, EventArgs e) @@ -102,8 +103,6 @@ public void Dispose() #if NET5_0_OR_GREATER } #endif - _forcefulExitCts?.Cancel(); - _forcefulExitCts?.Dispose(); CancellationTokenSource.Dispose(); } } diff --git a/TUnit.Core/Helpers/ArgumentFormatter.cs b/TUnit.Core/Helpers/ArgumentFormatter.cs index 15c11f3333..15e7c3cf60 100644 --- a/TUnit.Core/Helpers/ArgumentFormatter.cs +++ b/TUnit.Core/Helpers/ArgumentFormatter.cs @@ -90,27 +90,7 @@ private static string FormatDefault(object? o) if (o is string str) { // Replace dots with middle dot (·) to prevent VS Test Explorer from interpreting them as namespace separators - // Only do this if the string contains dots, to avoid unnecessary allocations - if (!str.Contains('.')) - { - return str; - } - -#if NET8_0_OR_GREATER - // Use Span for better performance - avoid string.Replace allocation - Span buffer = str.Length <= 256 - ? stackalloc char[str.Length] - : new char[str.Length]; - - for (int i = 0; i < str.Length; i++) - { - buffer[i] = str[i] == '.' ? '·' : str[i]; - } - - return new string(buffer); -#else return str.Replace(".", "·"); -#endif } if (toString == type.FullName || toString == type.AssemblyQualifiedName) diff --git a/TUnit.Core/Logging/DefaultLogger.cs b/TUnit.Core/Logging/DefaultLogger.cs index 76fc7c18e1..9479873ec2 100644 --- a/TUnit.Core/Logging/DefaultLogger.cs +++ b/TUnit.Core/Logging/DefaultLogger.cs @@ -7,6 +7,11 @@ public class DefaultLogger(Context context) : TUnitLogger { private readonly ConcurrentDictionary> _values = new(); + /// + /// Gets the context associated with this logger. + /// + protected Context Context => context; + public void PushProperties(IDictionary> dictionary) { foreach (var keyValuePair in dictionary) @@ -52,16 +57,7 @@ public override async ValueTask LogAsync(LogLevel logLevel, TState state var message = GenerateMessage(formatter(state, exception), exception, logLevel); - if (logLevel >= LogLevel.Error) - { - await context.ErrorOutputWriter.WriteLineAsync(message); - await GlobalContext.Current.OriginalConsoleError.WriteLineAsync(message); - } - else - { - await context.OutputWriter.WriteLineAsync(message); - await GlobalContext.Current.OriginalConsoleOut.WriteLineAsync(message); - } + await WriteToOutputAsync(message, logLevel >= LogLevel.Error); } public override void Log(LogLevel logLevel, TState state, Exception? exception, Func formatter) @@ -73,19 +69,18 @@ public override void Log(LogLevel logLevel, TState state, Exception? exc var message = GenerateMessage(formatter(state, exception), exception, logLevel); - if (logLevel >= LogLevel.Error) - { - context.ErrorOutputWriter.WriteLine(message); - GlobalContext.Current.OriginalConsoleError.WriteLine(message); - } - else - { - context.OutputWriter.WriteLine(message); - GlobalContext.Current.OriginalConsoleOut.WriteLine(message); - } + WriteToOutput(message, logLevel >= LogLevel.Error); } - private string GenerateMessage(string message, Exception? exception, LogLevel logLevel) + /// + /// Generates the formatted message to be logged. + /// Override this method to customize the message format. + /// + /// The message to log. + /// The exception associated with this log entry, if any. + /// The log level. + /// The formatted message. + protected virtual string GenerateMessage(string message, Exception? exception, LogLevel logLevel) { var stringBuilder = new StringBuilder(); @@ -120,4 +115,45 @@ private string GenerateMessage(string message, Exception? exception, LogLevel lo return builtString; } + + /// + /// Writes the message to the output. + /// Override this method to customize how messages are written. + /// + /// The formatted message to write. + /// True if this is an error-level message. + protected virtual void WriteToOutput(string message, bool isError) + { + if (isError) + { + context.ErrorOutputWriter.WriteLine(message); + GlobalContext.Current.OriginalConsoleError.WriteLine(message); + } + else + { + context.OutputWriter.WriteLine(message); + GlobalContext.Current.OriginalConsoleOut.WriteLine(message); + } + } + + /// + /// Asynchronously writes the message to the output. + /// Override this method to customize how messages are written. + /// + /// The formatted message to write. + /// True if this is an error-level message. + /// A task representing the async operation. + protected virtual async ValueTask WriteToOutputAsync(string message, bool isError) + { + if (isError) + { + await context.ErrorOutputWriter.WriteLineAsync(message); + await GlobalContext.Current.OriginalConsoleError.WriteLineAsync(message); + } + else + { + await context.OutputWriter.WriteLineAsync(message); + await GlobalContext.Current.OriginalConsoleOut.WriteLineAsync(message); + } + } } diff --git a/TUnit.Core/Models/TestModels/ParameterMetadata.cs b/TUnit.Core/Models/TestModels/ParameterMetadata.cs index 6816a4e497..f3b24c53e4 100644 --- a/TUnit.Core/Models/TestModels/ParameterMetadata.cs +++ b/TUnit.Core/Models/TestModels/ParameterMetadata.cs @@ -56,9 +56,10 @@ public record ParameterMetadata([DynamicallyAccessedMembers(DynamicallyAccessedM /// Cached data source attributes to avoid reflection call. /// Set by source generator for AOT compatibility. /// When null, falls back to using ReflectionInfo.GetCustomAttributes(). + /// Includes attributes implementing IDataSourceAttribute or IDataSourceMemberAttribute. /// [EditorBrowsable(EditorBrowsableState.Never)] - public IDataSourceAttribute[]? CachedDataSourceAttributes { get; internal init; } + public Attribute[]? CachedDataSourceAttributes { get; internal init; } /// /// Position of this parameter in the method/constructor signature. diff --git a/TUnit.Engine.Tests/MatrixTests.cs b/TUnit.Engine.Tests/MatrixTests.cs index 0daaafa2ec..d50a5bda37 100644 --- a/TUnit.Engine.Tests/MatrixTests.cs +++ b/TUnit.Engine.Tests/MatrixTests.cs @@ -8,7 +8,7 @@ public class MatrixTests(TestMode testMode) : InvokableTestBase(testMode) [Test] public async Task Test() { - var expectedCount = IsNetFramework ? 133 : 271; + var expectedCount = IsNetFramework ? 137 : 275; await RunTestsWithFilter( "/*/*/MatrixTests/*", diff --git a/TUnit.Example.Asp.Net.TestProject/TUnit.Example.Asp.Net.TestProject.csproj b/TUnit.Example.Asp.Net.TestProject/TUnit.Example.Asp.Net.TestProject.csproj index 7b3f975755..e22918675d 100644 --- a/TUnit.Example.Asp.Net.TestProject/TUnit.Example.Asp.Net.TestProject.csproj +++ b/TUnit.Example.Asp.Net.TestProject/TUnit.Example.Asp.Net.TestProject.csproj @@ -1,17 +1,19 @@ - + net10.0 + + - + @@ -19,7 +21,7 @@ - + diff --git a/TUnit.Example.Asp.Net.TestProject/WebApplicationFactory.cs b/TUnit.Example.Asp.Net.TestProject/WebApplicationFactory.cs index 35bb1e4a85..63ae7cf69c 100644 --- a/TUnit.Example.Asp.Net.TestProject/WebApplicationFactory.cs +++ b/TUnit.Example.Asp.Net.TestProject/WebApplicationFactory.cs @@ -1,8 +1,6 @@ -using System.Diagnostics.CodeAnalysis; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using TUnit.AspNetCore; -using TUnit.Core.Interfaces; namespace TUnit.Example.Asp.Net.TestProject; @@ -14,7 +12,7 @@ namespace TUnit.Example.Asp.Net.TestProject; /// Instead, test classes inject containers and provide configuration overrides /// via OverrideConfigurationAsync. This allows the factory to be created with new(). /// -public class WebApplicationFactory : TestWebApplicationFactory, IAsyncInitializer +public class WebApplicationFactory : TestWebApplicationFactory { private int _configuredWebHostCalled; @@ -38,13 +36,6 @@ public class WebApplicationFactory : TestWebApplicationFactory, IAsyncI [ClassDataSource(Shared = SharedType.PerTestSession)] public InMemoryKafka Kafka { get; init; } = null!; - - public Task InitializeAsync() - { - _ = Server; - return Task.CompletedTask; - } - protected override void ConfigureWebHost(IWebHostBuilder builder) { Interlocked.Increment(ref _configuredWebHostCalled); diff --git a/TUnit.Pipeline/Modules/RunAspNetCoreAnalyzersTestsModule.cs b/TUnit.Pipeline/Modules/RunAspNetCoreAnalyzersTestsModule.cs new file mode 100644 index 0000000000..921b8b8a51 --- /dev/null +++ b/TUnit.Pipeline/Modules/RunAspNetCoreAnalyzersTestsModule.cs @@ -0,0 +1,34 @@ +using ModularPipelines.Attributes; +using ModularPipelines.Context; +using ModularPipelines.DotNet.Extensions; +using ModularPipelines.DotNet.Options; +using ModularPipelines.Enums; +using ModularPipelines.Extensions; +using ModularPipelines.Git.Extensions; +using ModularPipelines.Models; +using ModularPipelines.Modules; + +namespace TUnit.Pipeline.Modules; + +[NotInParallel("DotNetTests")] +public class RunAspNetCoreAnalyzersTestsModule : Module +{ + protected override async Task ExecuteAsync(IPipelineContext context, CancellationToken cancellationToken) + { + var project = context.Git().RootDirectory.FindFile(x => x.Name == "TUnit.AspNetCore.Analyzers.Tests.csproj").AssertExists(); + + return await context.DotNet().Test(new DotNetTestOptions + { + WorkingDirectory = project.Folder!, + NoBuild = true, + Configuration = Configuration.Release, + Framework = "net9.0", + Arguments = ["--", "--hangdump", "--hangdump-filename", "hangdump.aspnetcore-analyzers-tests.dmp", "--hangdump-timeout", "5m"], + EnvironmentVariables = new Dictionary + { + ["DISABLE_GITHUB_REPORTER"] = "true", + }, + CommandLogging = CommandLogging.Input | CommandLogging.Error | CommandLogging.Duration | CommandLogging.ExitCode + }, cancellationToken); + } +} diff --git a/TUnit.Pipeline/Modules/TestAspNetCoreNugetPackageModule.cs b/TUnit.Pipeline/Modules/TestAspNetCoreNugetPackageModule.cs new file mode 100644 index 0000000000..ff6acab658 --- /dev/null +++ b/TUnit.Pipeline/Modules/TestAspNetCoreNugetPackageModule.cs @@ -0,0 +1,51 @@ +using ModularPipelines.Attributes; +using ModularPipelines.Context; +using ModularPipelines.DotNet.Options; +using ModularPipelines.Extensions; +using ModularPipelines.Git.Extensions; +using ModularPipelines.Models; +using Polly.Retry; +using TUnit.Pipeline.Modules.Abstract; + +namespace TUnit.Pipeline.Modules; + +[DependsOn] +[DependsOn] +public class TestAspNetCoreNugetPackageModule : TestBaseModule +{ + protected override AsyncRetryPolicy?> RetryPolicy + => CreateRetryPolicy(3); + + // ASP.NET Core only supports .NET Core frameworks, not .NET Framework + protected override IEnumerable TestableFrameworks + { + get + { + yield return "net10.0"; + yield return "net9.0"; + yield return "net8.0"; + } + } + + protected override async Task GetTestOptions(IPipelineContext context, string framework, + CancellationToken cancellationToken) + { + var version = await GetModule(); + + var project = context.Git() + .RootDirectory + .AssertExists() + .FindFile(x => x.Name == "TUnit.AspNetCore.NugetTester.csproj") + .AssertExists(); + + return new DotNetRunOptions + { + WorkingDirectory = project.Folder!, + Framework = framework, + Properties = + [ + new KeyValue("TUnitVersion", version.Value!.SemVer!) + ] + }; + } +} diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt index 41743ad69d..193caf076a 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet10_0.verified.txt @@ -596,6 +596,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class DictionaryDoesNotContainKeyAssertion : . where TDictionary : . @@ -840,6 +841,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } [.("IsEquivalentTo")] public class IsEquivalentToAssertion : . @@ -852,6 +854,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class IsNotAssignableToAssertion : . { @@ -953,6 +956,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class NotNullAssertion : . { diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt index 90595a8661..cdf708e41b 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet8_0.verified.txt @@ -591,6 +591,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class DictionaryDoesNotContainKeyAssertion : . where TDictionary : . @@ -835,6 +836,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } [.("IsEquivalentTo")] public class IsEquivalentToAssertion : . @@ -847,6 +849,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class IsNotAssignableToAssertion : . { @@ -948,6 +951,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class NotNullAssertion : . { diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt index 32e1ddc218..de701714b4 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.DotNet9_0.verified.txt @@ -596,6 +596,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class DictionaryDoesNotContainKeyAssertion : . where TDictionary : . @@ -840,6 +841,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } [.("IsEquivalentTo")] public class IsEquivalentToAssertion : . @@ -852,6 +854,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class IsNotAssignableToAssertion : . { @@ -953,6 +956,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class NotNullAssertion : . { diff --git a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt index 0ceb47da88..702517902b 100644 --- a/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt +++ b/TUnit.PublicAPI/Tests.Assertions_Library_Has_No_API_Changes.Net4_7.verified.txt @@ -575,6 +575,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class DictionaryDoesNotContainKeyAssertion : . where TDictionary : . @@ -810,6 +811,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } [.("IsEquivalentTo")] public class IsEquivalentToAssertion : . @@ -820,6 +822,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class IsNotAssignableToAssertion : . { @@ -919,6 +922,7 @@ namespace .Conditions protected override .<.> CheckAsync(. metadata) { } protected override string GetExpectation() { } public . Using(. comparer) { } + public . Using( equalityPredicate) { } } public class NotNullAssertion : . { diff --git a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt index 316cd35c04..23efc08b5c 100644 --- a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet10_0.verified.txt @@ -864,6 +864,7 @@ namespace bool SkipIfEmpty { get; set; } .<<.>> GetDataRowsAsync(.DataGeneratorMetadata dataGeneratorMetadata); } + public interface IDataSourceMemberAttribute { } public interface IDynamicTestCreatorLocation { string? CreatorFilePath { get; set; } @@ -909,7 +910,7 @@ namespace public InvalidTestMetadataException(string message, .TestMetadata metadata, innerException) { } } [(.Parameter)] - public class MatrixAttribute : .TUnitAttribute + public class MatrixAttribute : .TUnitAttribute, .IDataSourceMemberAttribute { protected MatrixAttribute() { } public MatrixAttribute(params object?[]? objects) { } @@ -1053,7 +1054,7 @@ namespace public class ParameterMetadata : <.ParameterMetadata>, .IMemberMetadata { public ParameterMetadata([.(..None | ..PublicParameterlessConstructor | ..PublicConstructors | ..NonPublicConstructors | ..PublicProperties)] Type) { } - public .IDataSourceAttribute[]? CachedDataSourceAttributes { get; } + public []? CachedDataSourceAttributes { get; } public object? CachedDefaultValue { get; } public bool? CachedIsOptional { get; } public bool? CachedIsParams { get; } @@ -2555,10 +2556,14 @@ namespace .Logging public class DefaultLogger : . { public DefaultLogger(.Context context) { } + protected .Context Context { get; } + protected virtual string GenerateMessage(string message, ? exception, . logLevel) { } public override void Log(. logLevel, TState state, ? exception, formatter) { } public override . LogAsync(. logLevel, TState state, ? exception, formatter) { } public void PushProperties(.> dictionary) { } public void PushProperty(string name, object? value) { } + protected virtual void WriteToOutput(string message, bool isError) { } + protected virtual . WriteToOutputAsync(string message, bool isError) { } } public interface ILogger { diff --git a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt index 6935605b9a..83d0d32987 100644 --- a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet8_0.verified.txt @@ -864,6 +864,7 @@ namespace bool SkipIfEmpty { get; set; } .<<.>> GetDataRowsAsync(.DataGeneratorMetadata dataGeneratorMetadata); } + public interface IDataSourceMemberAttribute { } public interface IDynamicTestCreatorLocation { string? CreatorFilePath { get; set; } @@ -909,7 +910,7 @@ namespace public InvalidTestMetadataException(string message, .TestMetadata metadata, innerException) { } } [(.Parameter)] - public class MatrixAttribute : .TUnitAttribute + public class MatrixAttribute : .TUnitAttribute, .IDataSourceMemberAttribute { protected MatrixAttribute() { } public MatrixAttribute(params object?[]? objects) { } @@ -1053,7 +1054,7 @@ namespace public class ParameterMetadata : <.ParameterMetadata>, .IMemberMetadata { public ParameterMetadata([.(..None | ..PublicParameterlessConstructor | ..PublicConstructors | ..NonPublicConstructors | ..PublicProperties)] Type) { } - public .IDataSourceAttribute[]? CachedDataSourceAttributes { get; } + public []? CachedDataSourceAttributes { get; } public object? CachedDefaultValue { get; } public bool? CachedIsOptional { get; } public bool? CachedIsParams { get; } @@ -2555,10 +2556,14 @@ namespace .Logging public class DefaultLogger : . { public DefaultLogger(.Context context) { } + protected .Context Context { get; } + protected virtual string GenerateMessage(string message, ? exception, . logLevel) { } public override void Log(. logLevel, TState state, ? exception, formatter) { } public override . LogAsync(. logLevel, TState state, ? exception, formatter) { } public void PushProperties(.> dictionary) { } public void PushProperty(string name, object? value) { } + protected virtual void WriteToOutput(string message, bool isError) { } + protected virtual . WriteToOutputAsync(string message, bool isError) { } } public interface ILogger { diff --git a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt index a0aa39ff4d..36ed6038ef 100644 --- a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt +++ b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.DotNet9_0.verified.txt @@ -864,6 +864,7 @@ namespace bool SkipIfEmpty { get; set; } .<<.>> GetDataRowsAsync(.DataGeneratorMetadata dataGeneratorMetadata); } + public interface IDataSourceMemberAttribute { } public interface IDynamicTestCreatorLocation { string? CreatorFilePath { get; set; } @@ -909,7 +910,7 @@ namespace public InvalidTestMetadataException(string message, .TestMetadata metadata, innerException) { } } [(.Parameter)] - public class MatrixAttribute : .TUnitAttribute + public class MatrixAttribute : .TUnitAttribute, .IDataSourceMemberAttribute { protected MatrixAttribute() { } public MatrixAttribute(params object?[]? objects) { } @@ -1053,7 +1054,7 @@ namespace public class ParameterMetadata : <.ParameterMetadata>, .IMemberMetadata { public ParameterMetadata([.(..None | ..PublicParameterlessConstructor | ..PublicConstructors | ..NonPublicConstructors | ..PublicProperties)] Type) { } - public .IDataSourceAttribute[]? CachedDataSourceAttributes { get; } + public []? CachedDataSourceAttributes { get; } public object? CachedDefaultValue { get; } public bool? CachedIsOptional { get; } public bool? CachedIsParams { get; } @@ -2555,10 +2556,14 @@ namespace .Logging public class DefaultLogger : . { public DefaultLogger(.Context context) { } + protected .Context Context { get; } + protected virtual string GenerateMessage(string message, ? exception, . logLevel) { } public override void Log(. logLevel, TState state, ? exception, formatter) { } public override . LogAsync(. logLevel, TState state, ? exception, formatter) { } public void PushProperties(.> dictionary) { } public void PushProperty(string name, object? value) { } + protected virtual void WriteToOutput(string message, bool isError) { } + protected virtual . WriteToOutputAsync(string message, bool isError) { } } public interface ILogger { diff --git a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt index 520c6e603f..387faefc64 100644 --- a/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt +++ b/TUnit.PublicAPI/Tests.Core_Library_Has_No_API_Changes.Net4_7.verified.txt @@ -841,6 +841,7 @@ namespace bool SkipIfEmpty { get; set; } .<<.>> GetDataRowsAsync(.DataGeneratorMetadata dataGeneratorMetadata); } + public interface IDataSourceMemberAttribute { } public interface IDynamicTestCreatorLocation { string? CreatorFilePath { get; set; } @@ -886,7 +887,7 @@ namespace public InvalidTestMetadataException(string message, .TestMetadata metadata, innerException) { } } [(.Parameter)] - public class MatrixAttribute : .TUnitAttribute + public class MatrixAttribute : .TUnitAttribute, .IDataSourceMemberAttribute { protected MatrixAttribute() { } public MatrixAttribute(params object?[]? objects) { } @@ -1016,7 +1017,7 @@ namespace public class ParameterMetadata : <.ParameterMetadata>, .IMemberMetadata { public ParameterMetadata( Type) { } - public .IDataSourceAttribute[]? CachedDataSourceAttributes { get; } + public []? CachedDataSourceAttributes { get; } public object? CachedDefaultValue { get; } public bool? CachedIsOptional { get; } public bool? CachedIsParams { get; } @@ -2477,10 +2478,14 @@ namespace .Logging public class DefaultLogger : . { public DefaultLogger(.Context context) { } + protected .Context Context { get; } + protected virtual string GenerateMessage(string message, ? exception, . logLevel) { } public override void Log(. logLevel, TState state, ? exception, formatter) { } public override . LogAsync(. logLevel, TState state, ? exception, formatter) { } public void PushProperties(.> dictionary) { } public void PushProperty(string name, object? value) { } + protected virtual void WriteToOutput(string message, bool isError) { } + protected virtual . WriteToOutputAsync(string message, bool isError) { } } public interface ILogger { diff --git a/TUnit.Templates/content/TUnit.AspNet.FSharp/TestProject/TestProject.fsproj b/TUnit.Templates/content/TUnit.AspNet.FSharp/TestProject/TestProject.fsproj index 41f98e897d..97607ab88c 100644 --- a/TUnit.Templates/content/TUnit.AspNet.FSharp/TestProject/TestProject.fsproj +++ b/TUnit.Templates/content/TUnit.AspNet.FSharp/TestProject/TestProject.fsproj @@ -10,8 +10,8 @@ - - + + diff --git a/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj b/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj index 12876706bf..da246de6de 100644 --- a/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj +++ b/TUnit.Templates/content/TUnit.AspNet/TestProject/TestProject.csproj @@ -9,7 +9,7 @@ - + diff --git a/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.TestProject/ExampleNamespace.TestProject.csproj b/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.TestProject/ExampleNamespace.TestProject.csproj index 521ca685ba..a6d3ae8b2f 100644 --- a/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.TestProject/ExampleNamespace.TestProject.csproj +++ b/TUnit.Templates/content/TUnit.Aspire.Starter/ExampleNamespace.TestProject/ExampleNamespace.TestProject.csproj @@ -11,7 +11,7 @@ - + diff --git a/TUnit.Templates/content/TUnit.Aspire.Test/ExampleNamespace.csproj b/TUnit.Templates/content/TUnit.Aspire.Test/ExampleNamespace.csproj index 26e5d28036..fe8c8cc43a 100644 --- a/TUnit.Templates/content/TUnit.Aspire.Test/ExampleNamespace.csproj +++ b/TUnit.Templates/content/TUnit.Aspire.Test/ExampleNamespace.csproj @@ -10,7 +10,7 @@ - + diff --git a/TUnit.Templates/content/TUnit.FSharp/TestProject.fsproj b/TUnit.Templates/content/TUnit.FSharp/TestProject.fsproj index 2c3853dacc..9caf992a9a 100644 --- a/TUnit.Templates/content/TUnit.FSharp/TestProject.fsproj +++ b/TUnit.Templates/content/TUnit.FSharp/TestProject.fsproj @@ -10,8 +10,8 @@ - - + + diff --git a/TUnit.Templates/content/TUnit.Playwright/TestProject.csproj b/TUnit.Templates/content/TUnit.Playwright/TestProject.csproj index d46f9d202b..84612f2d2a 100644 --- a/TUnit.Templates/content/TUnit.Playwright/TestProject.csproj +++ b/TUnit.Templates/content/TUnit.Playwright/TestProject.csproj @@ -8,7 +8,7 @@ - + diff --git a/TUnit.Templates/content/TUnit.VB/TestProject.vbproj b/TUnit.Templates/content/TUnit.VB/TestProject.vbproj index ec576caf56..c95292b850 100644 --- a/TUnit.Templates/content/TUnit.VB/TestProject.vbproj +++ b/TUnit.Templates/content/TUnit.VB/TestProject.vbproj @@ -8,6 +8,6 @@ - + diff --git a/TUnit.Templates/content/TUnit/TestProject.csproj b/TUnit.Templates/content/TUnit/TestProject.csproj index 8072128a03..7e0e26799b 100644 --- a/TUnit.Templates/content/TUnit/TestProject.csproj +++ b/TUnit.Templates/content/TUnit/TestProject.csproj @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/TUnit.TestProject/MatrixTests.cs b/TUnit.TestProject/MatrixTests.cs index 0e88957bc2..8c3018788f 100644 --- a/TUnit.TestProject/MatrixTests.cs +++ b/TUnit.TestProject/MatrixTests.cs @@ -192,4 +192,22 @@ public static object ObjectMethod() { return 1; } + + // Test for GitHub Discussion #4145: MatrixMethod with enum parameter + [Test] + [MatrixDataSource] + public async Task MatrixMethod_WithEnumParameter_UsesOnlyMethodValues( + [Matrix(true, false)] bool flag, + [MatrixMethod(nameof(GetSpecificEnumValues))] CountToTenEnum @enum) + { + // This test verifies that MatrixMethod returns only the specific enum values + // and doesn't auto-generate all enum values (should only be One or Five) + await Assert.That(@enum == CountToTenEnum.One || @enum == CountToTenEnum.Five).IsTrue(); + } + + public static IEnumerable GetSpecificEnumValues() + { + yield return CountToTenEnum.One; + yield return CountToTenEnum.Five; + } } diff --git a/TUnit.sln b/TUnit.sln index 12b327bdf5..2bb8c46d11 100644 --- a/TUnit.sln +++ b/TUnit.sln @@ -141,6 +141,16 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.Profile", "TUnit.Prof EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore", "TUnit.AspNetCore\TUnit.AspNetCore.csproj", "{A42DAF9A-6E16-4A73-9343-3FE7C8EBDF75}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.Analyzers.Roslyn44", "TUnit.AspNetCore.Analyzers.Roslyn44\TUnit.AspNetCore.Analyzers.Roslyn44.csproj", "{9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.Analyzers.Roslyn47", "TUnit.AspNetCore.Analyzers.Roslyn47\TUnit.AspNetCore.Analyzers.Roslyn47.csproj", "{6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.Analyzers.Roslyn414", "TUnit.AspNetCore.Analyzers.Roslyn414\TUnit.AspNetCore.Analyzers.Roslyn414.csproj", "{D5C70ADD-B960-4E6C-836C-6041938D04BE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.Analyzers.Tests", "TUnit.AspNetCore.Analyzers.Tests\TUnit.AspNetCore.Analyzers.Tests.csproj", "{9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.Analyzers", "TUnit.AspNetCore.Analyzers\TUnit.AspNetCore.Analyzers.csproj", "{6134813B-F928-443F-A629-F6726A1112F9}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -799,6 +809,66 @@ Global {A42DAF9A-6E16-4A73-9343-3FE7C8EBDF75}.Release|x64.Build.0 = Release|Any CPU {A42DAF9A-6E16-4A73-9343-3FE7C8EBDF75}.Release|x86.ActiveCfg = Release|Any CPU {A42DAF9A-6E16-4A73-9343-3FE7C8EBDF75}.Release|x86.Build.0 = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|x64.ActiveCfg = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|x64.Build.0 = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|x86.ActiveCfg = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Debug|x86.Build.0 = Debug|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|Any CPU.Build.0 = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|x64.ActiveCfg = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|x64.Build.0 = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|x86.ActiveCfg = Release|Any CPU + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1}.Release|x86.Build.0 = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|x64.ActiveCfg = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|x64.Build.0 = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|x86.ActiveCfg = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Debug|x86.Build.0 = Debug|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|Any CPU.Build.0 = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|x64.ActiveCfg = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|x64.Build.0 = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|x86.ActiveCfg = Release|Any CPU + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4}.Release|x86.Build.0 = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|x64.ActiveCfg = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|x64.Build.0 = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|x86.ActiveCfg = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Debug|x86.Build.0 = Debug|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|Any CPU.Build.0 = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|x64.ActiveCfg = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|x64.Build.0 = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|x86.ActiveCfg = Release|Any CPU + {D5C70ADD-B960-4E6C-836C-6041938D04BE}.Release|x86.Build.0 = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|x64.ActiveCfg = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|x64.Build.0 = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|x86.ActiveCfg = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Debug|x86.Build.0 = Debug|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|Any CPU.Build.0 = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|x64.ActiveCfg = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|x64.Build.0 = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|x86.ActiveCfg = Release|Any CPU + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04}.Release|x86.Build.0 = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|x64.ActiveCfg = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|x64.Build.0 = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|x86.ActiveCfg = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Debug|x86.Build.0 = Debug|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|Any CPU.Build.0 = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|x64.ActiveCfg = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|x64.Build.0 = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|x86.ActiveCfg = Release|Any CPU + {6134813B-F928-443F-A629-F6726A1112F9}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -860,6 +930,11 @@ Global {A7B8C9D0-1234-4567-8901-23456789ABCD} = {62AD1EAF-43C4-4AC0-B9FA-CD59739B3850} {FEB5F3F3-A7DD-4DE0-A9C7-B9AD489E9C52} = {62AD1EAF-43C4-4AC0-B9FA-CD59739B3850} {A42DAF9A-6E16-4A73-9343-3FE7C8EBDF75} = {1B56B580-4D59-4E83-9F80-467D58DADAC1} + {9C8243FD-CF7C-4A0A-B2D3-8C6724E616F1} = {503DA9FA-045D-4910-8AF6-905E6048B1F1} + {6B731D8E-F5E8-4709-8FB7-0332F1FC2CB4} = {503DA9FA-045D-4910-8AF6-905E6048B1F1} + {D5C70ADD-B960-4E6C-836C-6041938D04BE} = {503DA9FA-045D-4910-8AF6-905E6048B1F1} + {9B33972F-F5B9-4EC2-AE5C-4D48604DEB04} = {62AD1EAF-43C4-4AC0-B9FA-CD59739B3850} + {6134813B-F928-443F-A629-F6726A1112F9} = {503DA9FA-045D-4910-8AF6-905E6048B1F1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {109D285A-36B3-4503-BCDF-8E26FB0E2C5B} diff --git a/assets/banner.png b/assets/banner.png index ae5cb4b575..39f4cb0923 100644 Binary files a/assets/banner.png and b/assets/banner.png differ diff --git a/assets/logo-large.png b/assets/logo-large.png new file mode 100644 index 0000000000..4e112bfeb7 Binary files /dev/null and b/assets/logo-large.png differ diff --git a/assets/logo.jpg b/assets/logo.jpg index 51a107f22e..14ae1424e1 100644 Binary files a/assets/logo.jpg and b/assets/logo.jpg differ diff --git a/docs/docs/advanced/performance-best-practices.md b/docs/docs/advanced/performance-best-practices.md index 15034990fd..98502dc6de 100644 --- a/docs/docs/advanced/performance-best-practices.md +++ b/docs/docs/advanced/performance-best-practices.md @@ -20,7 +20,7 @@ TUnit's AOT (Ahead-of-Time) compilation mode provides the best performance for t ``` :::performance Native AOT Performance -TUnit with Native AOT compilation delivers exceptional speed improvements - benchmarks show **11.65x faster** execution compared to regular JIT. See the [AOT benchmarks](/docs/benchmarks) for detailed measurements. +TUnit with Native AOT compilation delivers significant speed improvements compared to regular JIT. See the [benchmarks](/docs/benchmarks) for detailed measurements. ::: Benefits: diff --git a/docs/docs/benchmarks/AsyncTests.md b/docs/docs/benchmarks/AsyncTests.md index 0a5adfd23a..e1488baf31 100644 --- a/docs/docs/benchmarks/AsyncTests.md +++ b/docs/docs/benchmarks/AsyncTests.md @@ -7,7 +7,7 @@ sidebar_position: 2 # AsyncTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 564.3 ms | 564.6 ms | 3.20 ms | -| NUnit | 4.4.0 | 725.6 ms | 726.1 ms | 4.31 ms | -| MSTest | 4.0.2 | 669.8 ms | 669.6 ms | 7.15 ms | -| xUnit3 | 3.2.1 | 746.5 ms | 747.4 ms | 5.34 ms | -| **TUnit (AOT)** | 1.5.80 | 122.3 ms | 122.3 ms | 0.41 ms | +| **TUnit** | 1.6.5 | 585.9 ms | 586.0 ms | 3.84 ms | +| NUnit | 4.4.0 | 740.0 ms | 740.0 ms | 7.87 ms | +| MSTest | 4.0.2 | 675.3 ms | 674.6 ms | 10.10 ms | +| xUnit3 | 3.2.1 | 753.7 ms | 751.9 ms | 7.60 ms | +| **TUnit (AOT)** | 1.6.5 | 124.5 ms | 124.6 ms | 0.38 ms | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "AsyncTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 896 - bar [564.3, 725.6, 669.8, 746.5, 122.3] + y-axis "Time (ms)" 0 --> 905 + bar [585.9, 740, 675.3, 753.7, 124.5] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.139Z* +*Last generated: 2025-12-22T00:31:09.537Z* diff --git a/docs/docs/benchmarks/BuildTime.md b/docs/docs/benchmarks/BuildTime.md index fa732c817c..6a0d90b504 100644 --- a/docs/docs/benchmarks/BuildTime.md +++ b/docs/docs/benchmarks/BuildTime.md @@ -7,7 +7,7 @@ sidebar_position: 8 # Build Performance Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -18,10 +18,10 @@ Compilation time comparison across frameworks: | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 2.148 s | 2.148 s | 0.0201 s | -| Build_NUnit | 4.4.0 | 1.734 s | 1.731 s | 0.0204 s | -| Build_MSTest | 4.0.2 | 1.808 s | 1.806 s | 0.0163 s | -| Build_xUnit3 | 3.2.1 | 1.711 s | 1.712 s | 0.0177 s | +| **TUnit** | 1.6.5 | 2.067 s | 2.066 s | 0.0313 s | +| Build_NUnit | 4.4.0 | 1.654 s | 1.652 s | 0.0123 s | +| Build_MSTest | 4.0.2 | 1.737 s | 1.734 s | 0.0158 s | +| Build_xUnit3 | 3.2.1 | 1.644 s | 1.647 s | 0.0266 s | ## 📈 Visual Comparison @@ -60,7 +60,7 @@ xychart-beta title "Build Time Comparison" x-axis ["Build_TUnit", "Build_NUnit", "Build_MSTest", "Build_xUnit3"] y-axis "Time (s)" 0 --> 3 - bar [2.148, 1.734, 1.808, 1.711] + bar [2.067, 1.654, 1.737, 1.644] ``` --- @@ -69,4 +69,4 @@ xychart-beta View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.141Z* +*Last generated: 2025-12-22T00:31:09.539Z* diff --git a/docs/docs/benchmarks/DataDrivenTests.md b/docs/docs/benchmarks/DataDrivenTests.md index 378e3e41c4..871d02ab1a 100644 --- a/docs/docs/benchmarks/DataDrivenTests.md +++ b/docs/docs/benchmarks/DataDrivenTests.md @@ -7,7 +7,7 @@ sidebar_position: 3 # DataDrivenTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 503.26 ms | 503.78 ms | 5.121 ms | -| NUnit | 4.4.0 | 570.23 ms | 570.27 ms | 4.133 ms | -| MSTest | 4.0.2 | 559.61 ms | 561.21 ms | 12.681 ms | -| xUnit3 | 3.2.1 | 591.56 ms | 588.83 ms | 6.791 ms | -| **TUnit (AOT)** | 1.5.80 | 25.16 ms | 25.21 ms | 0.290 ms | +| **TUnit** | 1.6.5 | 505.32 ms | 504.57 ms | 4.231 ms | +| NUnit | 4.4.0 | 584.91 ms | 583.90 ms | 15.604 ms | +| MSTest | 4.0.2 | 600.21 ms | 594.79 ms | 20.991 ms | +| xUnit3 | 3.2.1 | 597.87 ms | 595.41 ms | 7.815 ms | +| **TUnit (AOT)** | 1.6.5 | 24.44 ms | 24.41 ms | 0.132 ms | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "DataDrivenTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 710 - bar [503.26, 570.23, 559.61, 591.56, 25.16] + y-axis "Time (ms)" 0 --> 721 + bar [505.32, 584.91, 600.21, 597.87, 24.44] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.139Z* +*Last generated: 2025-12-22T00:31:09.537Z* diff --git a/docs/docs/benchmarks/MassiveParallelTests.md b/docs/docs/benchmarks/MassiveParallelTests.md index 3e47f3a364..5c5f0fd9e4 100644 --- a/docs/docs/benchmarks/MassiveParallelTests.md +++ b/docs/docs/benchmarks/MassiveParallelTests.md @@ -7,7 +7,7 @@ sidebar_position: 4 # MassiveParallelTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 566.1 ms | 565.9 ms | 4.05 ms | -| NUnit | 4.4.0 | 1,210.4 ms | 1,211.5 ms | 5.48 ms | -| MSTest | 4.0.2 | 2,986.8 ms | 2,987.1 ms | 6.08 ms | -| xUnit3 | 3.2.1 | 3,061.3 ms | 3,060.5 ms | 6.89 ms | -| **TUnit (AOT)** | 1.5.80 | 129.3 ms | 129.2 ms | 0.45 ms | +| **TUnit** | 1.6.5 | 614.6 ms | 613.4 ms | 7.55 ms | +| NUnit | 4.4.0 | 1,230.8 ms | 1,230.2 ms | 11.32 ms | +| MSTest | 4.0.2 | 2,992.1 ms | 2,990.5 ms | 8.72 ms | +| xUnit3 | 3.2.1 | 3,081.8 ms | 3,083.2 ms | 10.79 ms | +| **TUnit (AOT)** | 1.6.5 | 131.9 ms | 131.8 ms | 0.77 ms | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "MassiveParallelTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 3674 - bar [566.1, 1210.4, 2986.8, 3061.3, 129.3] + y-axis "Time (ms)" 0 --> 3699 + bar [614.6, 1230.8, 2992.1, 3081.8, 131.9] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.140Z* +*Last generated: 2025-12-22T00:31:09.537Z* diff --git a/docs/docs/benchmarks/MatrixTests.md b/docs/docs/benchmarks/MatrixTests.md index c7008b39f0..08f9bafcd2 100644 --- a/docs/docs/benchmarks/MatrixTests.md +++ b/docs/docs/benchmarks/MatrixTests.md @@ -7,7 +7,7 @@ sidebar_position: 5 # MatrixTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 573.44 ms | 573.85 ms | 4.344 ms | -| NUnit | 4.4.0 | 1,583.40 ms | 1,584.73 ms | 5.962 ms | -| MSTest | 4.0.2 | 1,512.64 ms | 1,511.70 ms | 6.327 ms | -| xUnit3 | 3.2.1 | 1,600.95 ms | 1,600.82 ms | 6.255 ms | -| **TUnit (AOT)** | 1.5.80 | 78.45 ms | 78.36 ms | 0.555 ms | +| **TUnit** | 1.6.5 | 572.66 ms | 571.57 ms | 3.463 ms | +| NUnit | 4.4.0 | 1,568.91 ms | 1,566.11 ms | 7.923 ms | +| MSTest | 4.0.2 | 1,499.20 ms | 1,498.21 ms | 11.513 ms | +| xUnit3 | 3.2.1 | 1,590.83 ms | 1,590.08 ms | 7.765 ms | +| **TUnit (AOT)** | 1.6.5 | 79.49 ms | 79.46 ms | 0.313 ms | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "MatrixTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 1922 - bar [573.44, 1583.4, 1512.64, 1600.95, 78.45] + y-axis "Time (ms)" 0 --> 1909 + bar [572.66, 1568.91, 1499.2, 1590.83, 79.49] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.140Z* +*Last generated: 2025-12-22T00:31:09.538Z* diff --git a/docs/docs/benchmarks/ScaleTests.md b/docs/docs/benchmarks/ScaleTests.md index 5167bc234d..13807a72c8 100644 --- a/docs/docs/benchmarks/ScaleTests.md +++ b/docs/docs/benchmarks/ScaleTests.md @@ -7,7 +7,7 @@ sidebar_position: 6 # ScaleTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 517.94 ms | 516.65 ms | 5.853 ms | -| NUnit | 4.4.0 | 632.90 ms | 629.49 ms | 10.651 ms | -| MSTest | 4.0.2 | 623.50 ms | 622.72 ms | 9.978 ms | -| xUnit3 | 3.2.1 | 612.73 ms | 612.58 ms | 8.945 ms | -| **TUnit (AOT)** | 1.5.80 | 42.20 ms | 41.83 ms | 2.955 ms | +| **TUnit** | 1.6.5 | 516.62 ms | 517.00 ms | 2.678 ms | +| NUnit | 4.4.0 | 614.31 ms | 613.65 ms | 9.014 ms | +| MSTest | 4.0.2 | 572.94 ms | 572.21 ms | 10.653 ms | +| xUnit3 | 3.2.1 | 595.92 ms | 594.72 ms | 8.237 ms | +| **TUnit (AOT)** | 1.6.5 | 41.25 ms | 41.13 ms | 3.418 ms | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "ScaleTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 760 - bar [517.94, 632.9, 623.5, 612.73, 42.2] + y-axis "Time (ms)" 0 --> 738 + bar [516.62, 614.31, 572.94, 595.92, 41.25] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.140Z* +*Last generated: 2025-12-22T00:31:09.538Z* diff --git a/docs/docs/benchmarks/SetupTeardownTests.md b/docs/docs/benchmarks/SetupTeardownTests.md index 189cc75f26..4858431ed3 100644 --- a/docs/docs/benchmarks/SetupTeardownTests.md +++ b/docs/docs/benchmarks/SetupTeardownTests.md @@ -7,7 +7,7 @@ sidebar_position: 7 # SetupTeardownTests Benchmark :::info Last Updated -This benchmark was automatically generated on **2025-12-21** from the latest CI run. +This benchmark was automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -16,11 +16,11 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI | Framework | Version | Mean | Median | StdDev | |-----------|---------|------|--------|--------| -| **TUnit** | 1.5.80 | 570.7 ms | 571.2 ms | 5.47 ms | -| NUnit | 4.4.0 | 1,176.1 ms | 1,173.3 ms | 8.15 ms | -| MSTest | 4.0.2 | 1,121.5 ms | 1,121.1 ms | 4.71 ms | -| xUnit3 | 3.2.1 | 1,206.1 ms | 1,203.3 ms | 10.96 ms | -| **TUnit (AOT)** | 1.5.80 | NA | NA | NA | +| **TUnit** | 1.6.5 | 571.7 ms | 573.1 ms | 3.83 ms | +| NUnit | 4.4.0 | 1,160.4 ms | 1,161.5 ms | 8.88 ms | +| MSTest | 4.0.2 | 1,106.4 ms | 1,107.7 ms | 6.84 ms | +| xUnit3 | 3.2.1 | 1,200.1 ms | 1,202.4 ms | 7.07 ms | +| **TUnit (AOT)** | 1.6.5 | NA | NA | NA | ## 📈 Visual Comparison @@ -58,8 +58,8 @@ This benchmark was automatically generated on **2025-12-21** from the latest CI xychart-beta title "SetupTeardownTests Performance Comparison" x-axis ["TUnit", "NUnit", "MSTest", "xUnit3", "TUnit_AOT"] - y-axis "Time (ms)" 0 --> 1448 - bar [570.7, 1176.1, 1121.5, 1206.1, 0] + y-axis "Time (ms)" 0 --> 1441 + bar [571.7, 1160.4, 1106.4, 1200.1, 0] ``` ## 🎯 Key Insights @@ -72,4 +72,4 @@ This benchmark compares TUnit's performance against NUnit, MSTest, xUnit3 using View the [benchmarks overview](/docs/benchmarks) for methodology details and environment information. ::: -*Last generated: 2025-12-21T00:31:36.141Z* +*Last generated: 2025-12-22T00:31:09.538Z* diff --git a/docs/docs/benchmarks/index.md b/docs/docs/benchmarks/index.md index 47140db9b4..41aca1dfbc 100644 --- a/docs/docs/benchmarks/index.md +++ b/docs/docs/benchmarks/index.md @@ -7,7 +7,7 @@ sidebar_position: 1 # Performance Benchmarks :::info Last Updated -These benchmarks were automatically generated on **2025-12-21** from the latest CI run. +These benchmarks were automatically generated on **2025-12-22** from the latest CI run. **Environment:** Ubuntu Latest • .NET SDK 10.0.101 ::: @@ -37,7 +37,7 @@ These benchmarks compare TUnit against the most popular .NET testing frameworks: | Framework | Version Tested | |-----------|----------------| -| **TUnit** | 1.5.80 | +| **TUnit** | 1.6.5 | | **xUnit v3** | 3.2.1 | | **NUnit** | 4.4.0 | | **MSTest** | 4.0.2 | @@ -80,4 +80,4 @@ These benchmarks run automatically daily via [GitHub Actions](https://github.com Each benchmark runs multiple iterations with statistical analysis to ensure accuracy. Results may vary based on hardware and test characteristics. ::: -*Last generated: 2025-12-21T00:31:36.141Z* +*Last generated: 2025-12-22T00:31:09.539Z* diff --git a/docs/docs/customization-extensibility/logging.md b/docs/docs/customization-extensibility/logging.md index 90c072ece3..8dddaee561 100644 --- a/docs/docs/customization-extensibility/logging.md +++ b/docs/docs/customization-extensibility/logging.md @@ -29,3 +29,78 @@ dotnet run --log-level Warning ``` The above will show only logs that are `Warning` or higher (e.g. `Error`, `Critical`) while executing the test. + +## Custom Loggers + +The `DefaultLogger` class is designed to be extensible. You can inherit from it to customize message formatting and output behavior. + +### Available Extension Points + +- `Context` - Protected property to access the associated context +- `GenerateMessage(string message, Exception? exception, LogLevel logLevel)` - Override to customize message formatting +- `WriteToOutput(string message, bool isError)` - Override to customize how messages are written +- `WriteToOutputAsync(string message, bool isError)` - Async version of WriteToOutput + +### Example: Adding Test Headers + +Here's an example of a custom logger that prepends a test identifier header before the first log message: + +```csharp +public class TestHeaderLogger : DefaultLogger +{ + private bool _hasOutputHeader; + + public TestHeaderLogger(Context context) : base(context) { } + + protected override string GenerateMessage(string message, Exception? exception, LogLevel logLevel) + { + var baseMessage = base.GenerateMessage(message, exception, logLevel); + + if (!_hasOutputHeader && Context is TestContext testContext) + { + _hasOutputHeader = true; + var testId = $"{testContext.TestDetails.ClassType.Name}.{testContext.TestDetails.TestName}"; + return $"--- {testId} ---\n{baseMessage}"; + } + + return baseMessage; + } +} +``` + +### Using Custom Loggers + +Create an instance of your custom logger and use it directly: + +```csharp +[Test] +public async Task MyTest() +{ + var logger = new TestHeaderLogger(TestContext.Current!); + logger.LogInformation("This message will have a test header"); + logger.LogInformation("Subsequent messages won't repeat the header"); +} +``` + +### Example: Custom Output Destinations + +You can override the write methods to send output to additional destinations: + +```csharp +public class MultiDestinationLogger : DefaultLogger +{ + private readonly TextWriter _additionalOutput; + + public MultiDestinationLogger(Context context, TextWriter additionalOutput) + : base(context) + { + _additionalOutput = additionalOutput; + } + + protected override void WriteToOutput(string message, bool isError) + { + base.WriteToOutput(message, isError); + _additionalOutput.WriteLine(message); + } +} +``` diff --git a/docs/docs/examples/aspnet.md b/docs/docs/examples/aspnet.md index d10dd7d972..85fc984318 100644 --- a/docs/docs/examples/aspnet.md +++ b/docs/docs/examples/aspnet.md @@ -65,6 +65,42 @@ public class TodoApiTests : TestsBase ## Core Concepts +### Why Test Isolation Matters + +:::warning Critical for Parallel Execution +TUnit runs tests in parallel by default. Without proper isolation, tests will interfere with each other, causing flaky failures that are difficult to debug. +::: + +When tests share resources like database tables, message queues, or cache keys, you'll encounter problems: + +| Shared Resource | What Goes Wrong | +|-----------------|-----------------| +| Database table | Test A inserts a record, Test B's `COUNT(*)` assertion fails | +| Message queue | Test A consumes Test B's messages | +| Cache key | Test A overwrites Test B's cached data | +| Redis key | Test A deletes keys that Test B is using | +| S3 bucket path | Test A's cleanup deletes Test B's files | + +**The solution**: Give each test its own isolated resources using `GetIsolatedName()` and `GetIsolatedPrefix()`: + +```csharp +protected override async Task SetupAsync() +{ + // Each test gets unique resources that no other test will touch + var tableName = GetIsolatedName("todos"); // "Test_42_todos" + var queueName = GetIsolatedName("events"); // "Test_42_events" + var cachePrefix = GetIsolatedPrefix(); // "test_42_" + + await CreateTableAsync(tableName); + await CreateQueueAsync(queueName); +} +``` + +This ensures: +- Tests can run in parallel without interference +- Test failures are deterministic and reproducible +- You can run the same test multiple times (with `[Repeat]`) safely + ### WebApplicationTest Pattern The `WebApplicationTest` base class provides: @@ -317,7 +353,46 @@ Logs from your ASP.NET Core app will appear in the test output, making debugging ## Best Practices -### 1. Use Base Classes for Common Setup +### 1. Always Isolate Shared Resources + +:::tip Golden Rule +If a resource is shared (database, queue, cache), each test must use its own isolated instance of that resource. +::: + +```csharp +// ❌ BAD: All tests share the same table - will cause flaky failures +protected override void ConfigureTestConfiguration(IConfigurationBuilder config) +{ + config.AddInMemoryCollection(new Dictionary + { + { "Database:TableName", "todos" } // Shared = flaky! + }); +} + +// ✅ GOOD: Each test gets its own table +protected override async Task SetupAsync() +{ + TableName = GetIsolatedName("todos"); // "Test_42_todos" + await CreateTableAsync(TableName); +} + +protected override void ConfigureTestConfiguration(IConfigurationBuilder config) +{ + config.AddInMemoryCollection(new Dictionary + { + { "Database:TableName", TableName } // Isolated = reliable! + }); +} +``` + +Common resources that need isolation: +- **Database tables**: Use `GetIsolatedName("tablename")` +- **Message queues/topics**: Use `GetIsolatedName("queue")` +- **Cache keys**: Use `GetIsolatedPrefix()` as a key prefix +- **Blob storage paths**: Use `GetIsolatedPrefix()` as a path prefix +- **Redis keys**: Use `GetIsolatedPrefix()` as a key prefix + +### 2. Use Base Classes for Common Setup ```csharp // Shared base for all tests @@ -342,7 +417,7 @@ public class UserTests : DatabaseTestBase } ``` -### 2. Clean Up Resources +### 3. Clean Up Resources ```csharp [After(HookType.Test)] @@ -352,18 +427,6 @@ public async Task Cleanup() } ``` -### 3. Use Isolated Names for Shared Resources - -```csharp -protected override async Task SetupAsync() -{ - // Each test gets unique resources - var tableName = GetIsolatedName("users"); - var cachePrefix = GetIsolatedPrefix(); - var topicName = GetIsolatedName("events"); -} -``` - ### 4. Inject Containers at Factory Level ```csharp diff --git a/docs/docs/migration/mstest.md b/docs/docs/migration/mstest.md index 5559f6433f..63086eec62 100644 --- a/docs/docs/migration/mstest.md +++ b/docs/docs/migration/mstest.md @@ -1,7 +1,7 @@ # Migrating from MSTest :::from-mstest Performance Boost -Migrating from MSTest to TUnit can significantly improve test execution speed. Benchmarks show TUnit is **1.3x faster** than MSTest on average. Check the [detailed benchmarks](/docs/benchmarks) to see performance comparisons. +Migrating from MSTest to TUnit can improve test execution speed. Check the [benchmarks](/docs/benchmarks) to see how TUnit compares. ::: ## Quick Reference diff --git a/docs/docs/migration/nunit.md b/docs/docs/migration/nunit.md index 89c484d31f..1ad0ee3b28 100644 --- a/docs/docs/migration/nunit.md +++ b/docs/docs/migration/nunit.md @@ -1,7 +1,7 @@ # Migrating from NUnit :::from-nunit Performance Boost -Migrating from NUnit to TUnit can significantly improve test execution speed. Benchmarks show TUnit is **1.2x faster** than NUnit on average. Check the [detailed benchmarks](/docs/benchmarks) to see performance comparisons. +Migrating from NUnit to TUnit can improve test execution speed. Check the [benchmarks](/docs/benchmarks) to see how TUnit compares. ::: ## Quick Reference diff --git a/docs/docs/migration/xunit.md b/docs/docs/migration/xunit.md index c2e64b36a6..368614b2c3 100644 --- a/docs/docs/migration/xunit.md +++ b/docs/docs/migration/xunit.md @@ -1,7 +1,7 @@ # Migrating from xUnit.net :::from-xunit Performance Boost -Migrating from xUnit to TUnit can significantly improve test execution speed. Benchmarks show TUnit is **1.3x faster** than xUnit v3 on average. Check the [detailed benchmarks](/docs/benchmarks) to see performance comparisons. +Migrating from xUnit to TUnit can improve test execution speed. Check the [benchmarks](/docs/benchmarks) to see how TUnit compares. ::: ## Quick Reference diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index 5c2a8f85c9..e71162bd68 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -21,7 +21,6 @@ const config: Config = { deploymentBranch: 'gh-pages', onBrokenLinks: 'throw', - onBrokenMarkdownLinks: 'warn', // Even if you don't use internationalization, you can use this field to set // useful metadata like html lang. For example, if your site is Chinese, you @@ -61,6 +60,9 @@ const config: Config = { markdown: { mermaid: true, + hooks: { + onBrokenMarkdownLinks: 'warn', + }, }, themes: ['@docusaurus/theme-mermaid'], diff --git a/docs/src/theme/Admonition/Types.js b/docs/src/theme/Admonition/Types.js new file mode 100644 index 0000000000..32c2b5a0c4 --- /dev/null +++ b/docs/src/theme/Admonition/Types.js @@ -0,0 +1,44 @@ +import React from 'react'; +import DefaultAdmonitionTypes from '@theme-original/Admonition/Types'; + +function PerformanceAdmonition(props) { + return ( + + {props.children} + + ); +} + +function FromXunitAdmonition(props) { + return ( + + {props.children} + + ); +} + +function FromNunitAdmonition(props) { + return ( + + {props.children} + + ); +} + +function FromMstestAdmonition(props) { + return ( + + {props.children} + + ); +} + +const AdmonitionTypes = { + ...DefaultAdmonitionTypes, + 'performance': PerformanceAdmonition, + 'from-xunit': FromXunitAdmonition, + 'from-nunit': FromNunitAdmonition, + 'from-mstest': FromMstestAdmonition, +}; + +export default AdmonitionTypes; diff --git a/docs/static/benchmarks/AsyncTests.json b/docs/static/benchmarks/AsyncTests.json index 0d98a2e91d..36e6eefb83 100644 --- a/docs/static/benchmarks/AsyncTests.json +++ b/docs/static/benchmarks/AsyncTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.139Z", + "timestamp": "2025-12-22T00:31:09.537Z", "category": "AsyncTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,43 +9,43 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "564.3 ms", - "Error": "3.61 ms", - "StdDev": "3.20 ms", - "Median": "564.6 ms" + "Version": "1.6.5", + "Mean": "585.9 ms", + "Error": "4.60 ms", + "StdDev": "3.84 ms", + "Median": "586.0 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "725.6 ms", - "Error": "4.86 ms", - "StdDev": "4.31 ms", - "Median": "726.1 ms" + "Mean": "740.0 ms", + "Error": "8.88 ms", + "StdDev": "7.87 ms", + "Median": "740.0 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "669.8 ms", - "Error": "8.06 ms", - "StdDev": "7.15 ms", - "Median": "669.6 ms" + "Mean": "675.3 ms", + "Error": "10.80 ms", + "StdDev": "10.10 ms", + "Median": "674.6 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "746.5 ms", - "Error": "5.71 ms", - "StdDev": "5.34 ms", - "Median": "747.4 ms" + "Mean": "753.7 ms", + "Error": "8.57 ms", + "StdDev": "7.60 ms", + "Median": "751.9 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "122.3 ms", - "Error": "0.44 ms", - "StdDev": "0.41 ms", - "Median": "122.3 ms" + "Version": "1.6.5", + "Mean": "124.5 ms", + "Error": "0.40 ms", + "StdDev": "0.38 ms", + "Median": "124.6 ms" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/BuildTime.json b/docs/static/benchmarks/BuildTime.json index 7170be4473..fab88192c4 100644 --- a/docs/static/benchmarks/BuildTime.json +++ b/docs/static/benchmarks/BuildTime.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.141Z", + "timestamp": "2025-12-22T00:31:09.539Z", "category": "BuildTime", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,35 +9,35 @@ "results": [ { "Method": "Build_TUnit", - "Version": "1.5.80", - "Mean": "2.148 s", - "Error": "0.0226 s", - "StdDev": "0.0201 s", - "Median": "2.148 s" + "Version": "1.6.5", + "Mean": "2.067 s", + "Error": "0.0335 s", + "StdDev": "0.0313 s", + "Median": "2.066 s" }, { "Method": "Build_NUnit", "Version": "4.4.0", - "Mean": "1.734 s", - "Error": "0.0218 s", - "StdDev": "0.0204 s", - "Median": "1.731 s" + "Mean": "1.654 s", + "Error": "0.0139 s", + "StdDev": "0.0123 s", + "Median": "1.652 s" }, { "Method": "Build_MSTest", "Version": "4.0.2", - "Mean": "1.808 s", - "Error": "0.0184 s", - "StdDev": "0.0163 s", - "Median": "1.806 s" + "Mean": "1.737 s", + "Error": "0.0169 s", + "StdDev": "0.0158 s", + "Median": "1.734 s" }, { "Method": "Build_xUnit3", "Version": "3.2.1", - "Mean": "1.711 s", - "Error": "0.0199 s", - "StdDev": "0.0177 s", - "Median": "1.712 s" + "Mean": "1.644 s", + "Error": "0.0300 s", + "StdDev": "0.0266 s", + "Median": "1.647 s" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/DataDrivenTests.json b/docs/static/benchmarks/DataDrivenTests.json index 82d1e8d5d1..19b96402b3 100644 --- a/docs/static/benchmarks/DataDrivenTests.json +++ b/docs/static/benchmarks/DataDrivenTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.139Z", + "timestamp": "2025-12-22T00:31:09.537Z", "category": "DataDrivenTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,43 +9,43 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "503.26 ms", - "Error": "5.475 ms", - "StdDev": "5.121 ms", - "Median": "503.78 ms" + "Version": "1.6.5", + "Mean": "505.32 ms", + "Error": "4.523 ms", + "StdDev": "4.231 ms", + "Median": "504.57 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "570.23 ms", - "Error": "5.294 ms", - "StdDev": "4.133 ms", - "Median": "570.27 ms" + "Mean": "584.91 ms", + "Error": "11.399 ms", + "StdDev": "15.604 ms", + "Median": "583.90 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "559.61 ms", - "Error": "11.011 ms", - "StdDev": "12.681 ms", - "Median": "561.21 ms" + "Mean": "600.21 ms", + "Error": "11.985 ms", + "StdDev": "20.991 ms", + "Median": "594.79 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "591.56 ms", - "Error": "8.132 ms", - "StdDev": "6.791 ms", - "Median": "588.83 ms" + "Mean": "597.87 ms", + "Error": "8.355 ms", + "StdDev": "7.815 ms", + "Median": "595.41 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "25.16 ms", - "Error": "0.327 ms", - "StdDev": "0.290 ms", - "Median": "25.21 ms" + "Version": "1.6.5", + "Mean": "24.44 ms", + "Error": "0.158 ms", + "StdDev": "0.132 ms", + "Median": "24.41 ms" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/MassiveParallelTests.json b/docs/static/benchmarks/MassiveParallelTests.json index 2fd985d6a1..ab9932a904 100644 --- a/docs/static/benchmarks/MassiveParallelTests.json +++ b/docs/static/benchmarks/MassiveParallelTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.140Z", + "timestamp": "2025-12-22T00:31:09.537Z", "category": "MassiveParallelTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,43 +9,43 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "566.1 ms", - "Error": "4.33 ms", - "StdDev": "4.05 ms", - "Median": "565.9 ms" + "Version": "1.6.5", + "Mean": "614.6 ms", + "Error": "8.08 ms", + "StdDev": "7.55 ms", + "Median": "613.4 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,210.4 ms", - "Error": "5.86 ms", - "StdDev": "5.48 ms", - "Median": "1,211.5 ms" + "Mean": "1,230.8 ms", + "Error": "12.10 ms", + "StdDev": "11.32 ms", + "Median": "1,230.2 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "2,986.8 ms", - "Error": "6.86 ms", - "StdDev": "6.08 ms", - "Median": "2,987.1 ms" + "Mean": "2,992.1 ms", + "Error": "10.44 ms", + "StdDev": "8.72 ms", + "Median": "2,990.5 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "3,061.3 ms", - "Error": "7.77 ms", - "StdDev": "6.89 ms", - "Median": "3,060.5 ms" + "Mean": "3,081.8 ms", + "Error": "12.18 ms", + "StdDev": "10.79 ms", + "Median": "3,083.2 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "129.3 ms", - "Error": "0.51 ms", - "StdDev": "0.45 ms", - "Median": "129.2 ms" + "Version": "1.6.5", + "Mean": "131.9 ms", + "Error": "0.83 ms", + "StdDev": "0.77 ms", + "Median": "131.8 ms" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/MatrixTests.json b/docs/static/benchmarks/MatrixTests.json index 310ca78ac5..27fe0f6da8 100644 --- a/docs/static/benchmarks/MatrixTests.json +++ b/docs/static/benchmarks/MatrixTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.140Z", + "timestamp": "2025-12-22T00:31:09.538Z", "category": "MatrixTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,43 +9,43 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "573.44 ms", - "Error": "4.644 ms", - "StdDev": "4.344 ms", - "Median": "573.85 ms" + "Version": "1.6.5", + "Mean": "572.66 ms", + "Error": "3.906 ms", + "StdDev": "3.463 ms", + "Median": "571.57 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,583.40 ms", - "Error": "7.140 ms", - "StdDev": "5.962 ms", - "Median": "1,584.73 ms" + "Mean": "1,568.91 ms", + "Error": "8.470 ms", + "StdDev": "7.923 ms", + "Median": "1,566.11 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "1,512.64 ms", - "Error": "7.137 ms", - "StdDev": "6.327 ms", - "Median": "1,511.70 ms" + "Mean": "1,499.20 ms", + "Error": "12.309 ms", + "StdDev": "11.513 ms", + "Median": "1,498.21 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "1,600.95 ms", - "Error": "7.491 ms", - "StdDev": "6.255 ms", - "Median": "1,600.82 ms" + "Mean": "1,590.83 ms", + "Error": "8.302 ms", + "StdDev": "7.765 ms", + "Median": "1,590.08 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "78.45 ms", - "Error": "0.626 ms", - "StdDev": "0.555 ms", - "Median": "78.36 ms" + "Version": "1.6.5", + "Mean": "79.49 ms", + "Error": "0.334 ms", + "StdDev": "0.313 ms", + "Median": "79.46 ms" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/ScaleTests.json b/docs/static/benchmarks/ScaleTests.json index 70a8481695..1fb9d0a14c 100644 --- a/docs/static/benchmarks/ScaleTests.json +++ b/docs/static/benchmarks/ScaleTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.140Z", + "timestamp": "2025-12-22T00:31:09.538Z", "category": "ScaleTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,43 +9,43 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "517.94 ms", - "Error": "6.257 ms", - "StdDev": "5.853 ms", - "Median": "516.65 ms" + "Version": "1.6.5", + "Mean": "516.62 ms", + "Error": "3.430 ms", + "StdDev": "2.678 ms", + "Median": "517.00 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "632.90 ms", - "Error": "11.386 ms", - "StdDev": "10.651 ms", - "Median": "629.49 ms" + "Mean": "614.31 ms", + "Error": "10.168 ms", + "StdDev": "9.014 ms", + "Median": "613.65 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "623.50 ms", - "Error": "11.256 ms", - "StdDev": "9.978 ms", - "Median": "622.72 ms" + "Mean": "572.94 ms", + "Error": "10.846 ms", + "StdDev": "10.653 ms", + "Median": "572.21 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "612.73 ms", - "Error": "9.562 ms", - "StdDev": "8.945 ms", - "Median": "612.58 ms" + "Mean": "595.92 ms", + "Error": "9.292 ms", + "StdDev": "8.237 ms", + "Median": "594.72 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "42.20 ms", - "Error": "1.013 ms", - "StdDev": "2.955 ms", - "Median": "41.83 ms" + "Version": "1.6.5", + "Mean": "41.25 ms", + "Error": "1.159 ms", + "StdDev": "3.418 ms", + "Median": "41.13 ms" } ] } \ No newline at end of file diff --git a/docs/static/benchmarks/SetupTeardownTests.json b/docs/static/benchmarks/SetupTeardownTests.json index 9a4c80c77c..3ba46897eb 100644 --- a/docs/static/benchmarks/SetupTeardownTests.json +++ b/docs/static/benchmarks/SetupTeardownTests.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.141Z", + "timestamp": "2025-12-22T00:31:09.538Z", "category": "SetupTeardownTests", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", @@ -9,39 +9,39 @@ "results": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "570.7 ms", - "Error": "5.85 ms", - "StdDev": "5.47 ms", - "Median": "571.2 ms" + "Version": "1.6.5", + "Mean": "571.7 ms", + "Error": "4.59 ms", + "StdDev": "3.83 ms", + "Median": "573.1 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,176.1 ms", - "Error": "8.71 ms", - "StdDev": "8.15 ms", - "Median": "1,173.3 ms" + "Mean": "1,160.4 ms", + "Error": "9.49 ms", + "StdDev": "8.88 ms", + "Median": "1,161.5 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "1,121.5 ms", - "Error": "5.32 ms", - "StdDev": "4.71 ms", - "Median": "1,121.1 ms" + "Mean": "1,106.4 ms", + "Error": "7.71 ms", + "StdDev": "6.84 ms", + "Median": "1,107.7 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "1,206.1 ms", - "Error": "11.72 ms", - "StdDev": "10.96 ms", - "Median": "1,203.3 ms" + "Mean": "1,200.1 ms", + "Error": "8.46 ms", + "StdDev": "7.07 ms", + "Median": "1,202.4 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", + "Version": "1.6.5", "Mean": "NA", "Error": "NA", "StdDev": "NA", diff --git a/docs/static/benchmarks/historical.json b/docs/static/benchmarks/historical.json index bd7dc761a5..dc204a291b 100644 --- a/docs/static/benchmarks/historical.json +++ b/docs/static/benchmarks/historical.json @@ -166,5 +166,9 @@ { "date": "2025-12-21", "environment": "Ubuntu" + }, + { + "date": "2025-12-22", + "environment": "Ubuntu" } ] \ No newline at end of file diff --git a/docs/static/benchmarks/latest.json b/docs/static/benchmarks/latest.json index a71dbe9f03..647220447e 100644 --- a/docs/static/benchmarks/latest.json +++ b/docs/static/benchmarks/latest.json @@ -1,5 +1,5 @@ { - "timestamp": "2025-12-21T00:31:36.141Z", + "timestamp": "2025-12-22T00:31:09.539Z", "environment": { "benchmarkDotNetVersion": "BenchmarkDotNet v0.15.8, Linux Ubuntu 24.04.3 LTS (Noble Numbat)", "sdk": ".NET SDK 10.0.101", @@ -9,249 +9,249 @@ "AsyncTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "564.3 ms", - "Error": "3.61 ms", - "StdDev": "3.20 ms", - "Median": "564.6 ms" + "Version": "1.6.5", + "Mean": "585.9 ms", + "Error": "4.60 ms", + "StdDev": "3.84 ms", + "Median": "586.0 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "725.6 ms", - "Error": "4.86 ms", - "StdDev": "4.31 ms", - "Median": "726.1 ms" + "Mean": "740.0 ms", + "Error": "8.88 ms", + "StdDev": "7.87 ms", + "Median": "740.0 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "669.8 ms", - "Error": "8.06 ms", - "StdDev": "7.15 ms", - "Median": "669.6 ms" + "Mean": "675.3 ms", + "Error": "10.80 ms", + "StdDev": "10.10 ms", + "Median": "674.6 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "746.5 ms", - "Error": "5.71 ms", - "StdDev": "5.34 ms", - "Median": "747.4 ms" + "Mean": "753.7 ms", + "Error": "8.57 ms", + "StdDev": "7.60 ms", + "Median": "751.9 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "122.3 ms", - "Error": "0.44 ms", - "StdDev": "0.41 ms", - "Median": "122.3 ms" + "Version": "1.6.5", + "Mean": "124.5 ms", + "Error": "0.40 ms", + "StdDev": "0.38 ms", + "Median": "124.6 ms" } ], "DataDrivenTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "503.26 ms", - "Error": "5.475 ms", - "StdDev": "5.121 ms", - "Median": "503.78 ms" + "Version": "1.6.5", + "Mean": "505.32 ms", + "Error": "4.523 ms", + "StdDev": "4.231 ms", + "Median": "504.57 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "570.23 ms", - "Error": "5.294 ms", - "StdDev": "4.133 ms", - "Median": "570.27 ms" + "Mean": "584.91 ms", + "Error": "11.399 ms", + "StdDev": "15.604 ms", + "Median": "583.90 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "559.61 ms", - "Error": "11.011 ms", - "StdDev": "12.681 ms", - "Median": "561.21 ms" + "Mean": "600.21 ms", + "Error": "11.985 ms", + "StdDev": "20.991 ms", + "Median": "594.79 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "591.56 ms", - "Error": "8.132 ms", - "StdDev": "6.791 ms", - "Median": "588.83 ms" + "Mean": "597.87 ms", + "Error": "8.355 ms", + "StdDev": "7.815 ms", + "Median": "595.41 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "25.16 ms", - "Error": "0.327 ms", - "StdDev": "0.290 ms", - "Median": "25.21 ms" + "Version": "1.6.5", + "Mean": "24.44 ms", + "Error": "0.158 ms", + "StdDev": "0.132 ms", + "Median": "24.41 ms" } ], "MassiveParallelTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "566.1 ms", - "Error": "4.33 ms", - "StdDev": "4.05 ms", - "Median": "565.9 ms" + "Version": "1.6.5", + "Mean": "614.6 ms", + "Error": "8.08 ms", + "StdDev": "7.55 ms", + "Median": "613.4 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,210.4 ms", - "Error": "5.86 ms", - "StdDev": "5.48 ms", - "Median": "1,211.5 ms" + "Mean": "1,230.8 ms", + "Error": "12.10 ms", + "StdDev": "11.32 ms", + "Median": "1,230.2 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "2,986.8 ms", - "Error": "6.86 ms", - "StdDev": "6.08 ms", - "Median": "2,987.1 ms" + "Mean": "2,992.1 ms", + "Error": "10.44 ms", + "StdDev": "8.72 ms", + "Median": "2,990.5 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "3,061.3 ms", - "Error": "7.77 ms", - "StdDev": "6.89 ms", - "Median": "3,060.5 ms" + "Mean": "3,081.8 ms", + "Error": "12.18 ms", + "StdDev": "10.79 ms", + "Median": "3,083.2 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "129.3 ms", - "Error": "0.51 ms", - "StdDev": "0.45 ms", - "Median": "129.2 ms" + "Version": "1.6.5", + "Mean": "131.9 ms", + "Error": "0.83 ms", + "StdDev": "0.77 ms", + "Median": "131.8 ms" } ], "MatrixTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "573.44 ms", - "Error": "4.644 ms", - "StdDev": "4.344 ms", - "Median": "573.85 ms" + "Version": "1.6.5", + "Mean": "572.66 ms", + "Error": "3.906 ms", + "StdDev": "3.463 ms", + "Median": "571.57 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,583.40 ms", - "Error": "7.140 ms", - "StdDev": "5.962 ms", - "Median": "1,584.73 ms" + "Mean": "1,568.91 ms", + "Error": "8.470 ms", + "StdDev": "7.923 ms", + "Median": "1,566.11 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "1,512.64 ms", - "Error": "7.137 ms", - "StdDev": "6.327 ms", - "Median": "1,511.70 ms" + "Mean": "1,499.20 ms", + "Error": "12.309 ms", + "StdDev": "11.513 ms", + "Median": "1,498.21 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "1,600.95 ms", - "Error": "7.491 ms", - "StdDev": "6.255 ms", - "Median": "1,600.82 ms" + "Mean": "1,590.83 ms", + "Error": "8.302 ms", + "StdDev": "7.765 ms", + "Median": "1,590.08 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "78.45 ms", - "Error": "0.626 ms", - "StdDev": "0.555 ms", - "Median": "78.36 ms" + "Version": "1.6.5", + "Mean": "79.49 ms", + "Error": "0.334 ms", + "StdDev": "0.313 ms", + "Median": "79.46 ms" } ], "ScaleTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "517.94 ms", - "Error": "6.257 ms", - "StdDev": "5.853 ms", - "Median": "516.65 ms" + "Version": "1.6.5", + "Mean": "516.62 ms", + "Error": "3.430 ms", + "StdDev": "2.678 ms", + "Median": "517.00 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "632.90 ms", - "Error": "11.386 ms", - "StdDev": "10.651 ms", - "Median": "629.49 ms" + "Mean": "614.31 ms", + "Error": "10.168 ms", + "StdDev": "9.014 ms", + "Median": "613.65 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "623.50 ms", - "Error": "11.256 ms", - "StdDev": "9.978 ms", - "Median": "622.72 ms" + "Mean": "572.94 ms", + "Error": "10.846 ms", + "StdDev": "10.653 ms", + "Median": "572.21 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "612.73 ms", - "Error": "9.562 ms", - "StdDev": "8.945 ms", - "Median": "612.58 ms" + "Mean": "595.92 ms", + "Error": "9.292 ms", + "StdDev": "8.237 ms", + "Median": "594.72 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", - "Mean": "42.20 ms", - "Error": "1.013 ms", - "StdDev": "2.955 ms", - "Median": "41.83 ms" + "Version": "1.6.5", + "Mean": "41.25 ms", + "Error": "1.159 ms", + "StdDev": "3.418 ms", + "Median": "41.13 ms" } ], "SetupTeardownTests": [ { "Method": "TUnit", - "Version": "1.5.80", - "Mean": "570.7 ms", - "Error": "5.85 ms", - "StdDev": "5.47 ms", - "Median": "571.2 ms" + "Version": "1.6.5", + "Mean": "571.7 ms", + "Error": "4.59 ms", + "StdDev": "3.83 ms", + "Median": "573.1 ms" }, { "Method": "NUnit", "Version": "4.4.0", - "Mean": "1,176.1 ms", - "Error": "8.71 ms", - "StdDev": "8.15 ms", - "Median": "1,173.3 ms" + "Mean": "1,160.4 ms", + "Error": "9.49 ms", + "StdDev": "8.88 ms", + "Median": "1,161.5 ms" }, { "Method": "MSTest", "Version": "4.0.2", - "Mean": "1,121.5 ms", - "Error": "5.32 ms", - "StdDev": "4.71 ms", - "Median": "1,121.1 ms" + "Mean": "1,106.4 ms", + "Error": "7.71 ms", + "StdDev": "6.84 ms", + "Median": "1,107.7 ms" }, { "Method": "xUnit3", "Version": "3.2.1", - "Mean": "1,206.1 ms", - "Error": "11.72 ms", - "StdDev": "10.96 ms", - "Median": "1,203.3 ms" + "Mean": "1,200.1 ms", + "Error": "8.46 ms", + "StdDev": "7.07 ms", + "Median": "1,202.4 ms" }, { "Method": "TUnit_AOT", - "Version": "1.5.80", + "Version": "1.6.5", "Mean": "NA", "Error": "NA", "StdDev": "NA", @@ -263,35 +263,35 @@ "BuildTime": [ { "Method": "Build_TUnit", - "Version": "1.5.80", - "Mean": "2.148 s", - "Error": "0.0226 s", - "StdDev": "0.0201 s", - "Median": "2.148 s" + "Version": "1.6.5", + "Mean": "2.067 s", + "Error": "0.0335 s", + "StdDev": "0.0313 s", + "Median": "2.066 s" }, { "Method": "Build_NUnit", "Version": "4.4.0", - "Mean": "1.734 s", - "Error": "0.0218 s", - "StdDev": "0.0204 s", - "Median": "1.731 s" + "Mean": "1.654 s", + "Error": "0.0139 s", + "StdDev": "0.0123 s", + "Median": "1.652 s" }, { "Method": "Build_MSTest", "Version": "4.0.2", - "Mean": "1.808 s", - "Error": "0.0184 s", - "StdDev": "0.0163 s", - "Median": "1.806 s" + "Mean": "1.737 s", + "Error": "0.0169 s", + "StdDev": "0.0158 s", + "Median": "1.734 s" }, { "Method": "Build_xUnit3", "Version": "3.2.1", - "Mean": "1.711 s", - "Error": "0.0199 s", - "StdDev": "0.0177 s", - "Median": "1.712 s" + "Mean": "1.644 s", + "Error": "0.0300 s", + "StdDev": "0.0266 s", + "Median": "1.647 s" } ] }, @@ -299,6 +299,6 @@ "runtimeCategories": 6, "buildCategories": 1, "totalBenchmarks": 7, - "lastUpdated": "2025-12-21T00:31:36.138Z" + "lastUpdated": "2025-12-22T00:31:09.536Z" } } \ No newline at end of file diff --git a/docs/static/benchmarks/summary.json b/docs/static/benchmarks/summary.json index a50d000f75..a0620360aa 100644 --- a/docs/static/benchmarks/summary.json +++ b/docs/static/benchmarks/summary.json @@ -10,6 +10,6 @@ "build": [ "BuildTime" ], - "timestamp": "2025-12-21", + "timestamp": "2025-12-22", "environment": "Ubuntu Latest • .NET SDK 10.0.101" } \ No newline at end of file diff --git a/docs/yarn.lock b/docs/yarn.lock index 76deb35bd7..e8866a2ba3 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -2,23 +2,22 @@ # yarn lockfile v1 -"@ai-sdk/gateway@2.0.14": - version "2.0.14" - resolved "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-2.0.14.tgz" - integrity sha512-QU+ZVizSXN/V5uWgwapXrCLvkUEmmJeojAbikMH4gLgbeQF3oRugcQm3D8X9B+Rnestbz5cevNap7vKyJT/jfA== +"@ai-sdk/gateway@1.0.29": + version "1.0.29" + resolved "https://registry.npmjs.org/@ai-sdk/gateway/-/gateway-1.0.29.tgz" + integrity sha512-o9LtmBiG2WAgs3GAmL79F8idan/UupxHG8Tyr2gP4aUSOzflM0bsvfzozBp8x6WatQnOx+Pio7YNw45Y6I16iw== dependencies: "@ai-sdk/provider" "2.0.0" - "@ai-sdk/provider-utils" "3.0.17" - "@vercel/oidc" "3.0.5" + "@ai-sdk/provider-utils" "3.0.9" -"@ai-sdk/provider-utils@3.0.17": - version "3.0.17" - resolved "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.17.tgz" - integrity sha512-TR3Gs4I3Tym4Ll+EPdzRdvo/rc8Js6c4nVhFLuvGLX/Y4V9ZcQMa/HTiYsHEgmYrf1zVi6Q145UEZUfleOwOjw== +"@ai-sdk/provider-utils@3.0.9": + version "3.0.9" + resolved "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-3.0.9.tgz" + integrity sha512-Pm571x5efqaI4hf9yW4KsVlDBDme8++UepZRnq+kqVBWWjgvGhQlzU8glaFq0YJEB9kkxZHbRRyVeHoV2sRYaQ== dependencies: "@ai-sdk/provider" "2.0.0" "@standard-schema/spec" "^1.0.0" - eventsource-parser "^3.0.6" + eventsource-parser "^3.0.5" "@ai-sdk/provider@2.0.0": version "2.0.0" @@ -28,24 +27,24 @@ json-schema "^0.4.0" "@ai-sdk/react@^2.0.30": - version "2.0.100" - resolved "https://registry.npmjs.org/@ai-sdk/react/-/react-2.0.100.tgz" - integrity sha512-bC4cEoX9xfBKKnVyhyrhdRraji71uxpCKlNAwD6u1xPgcsCnz99X+9ByoBKvOHRzBtSFUq2K6016huip8Cvq6w== + version "2.0.52" + resolved "https://registry.npmjs.org/@ai-sdk/react/-/react-2.0.52.tgz" + integrity sha512-4/i40pykN4gTGH264+k1g4tMGdw4xN7vZ1qESFCIm/lhS/8YiJPYheBOk9c349hytOT1sGxp3UNPcOWzWS0H2A== dependencies: - "@ai-sdk/provider-utils" "3.0.17" - ai "5.0.100" + "@ai-sdk/provider-utils" "3.0.9" + ai "5.0.52" swr "^2.2.5" throttleit "2.1.0" -"@algolia/abtesting@1.10.0": - version "1.10.0" - resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.10.0.tgz" - integrity sha512-mQT3jwuTgX8QMoqbIR7mPlWkqQqBPQaPabQzm37xg2txMlaMogK/4hCiiESGdg39MlHZOVHeV+0VJuE7f5UK8A== +"@algolia/abtesting@1.4.0": + version "1.4.0" + resolved "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.4.0.tgz" + integrity sha512-N0blWT/C0KOZ/OJ9GXBX66odJZlrYjMj3M+01y8ob1mjBFnBaBo7gOCyHBDQy60+H4pJXp3pSGlJOqJIueBH+A== dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" "@algolia/autocomplete-core@1.19.2": version "1.19.2" @@ -67,162 +66,170 @@ resolved "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz" integrity sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w== -"@algolia/client-abtesting@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.44.0.tgz" - integrity sha512-KY5CcrWhRTUo/lV7KcyjrZkPOOF9bjgWpMj9z98VA+sXzVpZtkuskBLCKsWYFp2sbwchZFTd3wJM48H0IGgF7g== - dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" - -"@algolia/client-analytics@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.44.0.tgz" - integrity sha512-LKOCE8S4ewI9bN3ot9RZoYASPi8b78E918/DVPW3HHjCMUe6i+NjbNG6KotU4RpP6AhRWZjjswbOkWelUO+OoA== - dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" - -"@algolia/client-common@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.44.0.tgz" - integrity sha512-1yyJm4OYC2cztbS28XYVWwLXdwpLsMG4LoZLOltVglQ2+hc/i9q9fUDZyjRa2Bqt4DmkIfezagfMrokhyH4uxQ== - -"@algolia/client-common@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.46.0.tgz" - integrity sha512-0emZTaYOeI9WzJi0TcNd2k3SxiN6DZfdWc2x2gHt855Jl9jPUOzfVTL6gTvCCrOlT4McvpDGg5nGO+9doEjjig== - -"@algolia/client-insights@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.44.0.tgz" - integrity sha512-wVQWK6jYYsbEOjIMI+e5voLGPUIbXrvDj392IckXaCPvQ6vCMTXakQqOYCd+znQdL76S+3wHDo77HZWiAYKrtA== - dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" - -"@algolia/client-personalization@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.44.0.tgz" - integrity sha512-lkgRjOjOkqmIkebHjHpU9rLJcJNUDMm+eVSW/KJQYLjGqykEZxal+nYJJTBbLceEU2roByP/+27ZmgIwCdf0iA== - dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" - -"@algolia/client-query-suggestions@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.44.0.tgz" - integrity sha512-sYfhgwKu6NDVmZHL1WEKVLsOx/jUXCY4BHKLUOcYa8k4COCs6USGgz6IjFkUf+niwq8NCECMmTC4o/fVQOalsA== - dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" +"@algolia/client-abtesting@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.38.0.tgz" + integrity sha512-15d6zv8vtj2l9pnnp/EH7Rhq3/snCCHRz56NnX6xIUPrbJl5gCsIYXAz8C2IEkwOpoDb0r5G6ArY2gKdVMNezw== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" + +"@algolia/client-analytics@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.38.0.tgz" + integrity sha512-jJIbYAhYvTG3+gEAP5Q5Dp6PFJfUR+atz5rsqm5KjAKK+faLFdHJbM2IbOo0xdyGd+SH259MzfQKLJ9mZZ27dQ== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" + +"@algolia/client-common@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.38.0.tgz" + integrity sha512-aMCXzVPGJTeQnVU3Sdf30TfMN2+QyWcjfPTCCHyqVVgjPipb6RnK40aISGoO+rlYjh9LunDsNVFLwv+JEIF8bQ== + +"@algolia/client-common@5.42.0": + version "5.42.0" + resolved "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.42.0.tgz" + integrity sha512-6iiFbm2tRn6B2OqFv9XDTcw5LdWPudiJWIbRk+fsTX+hkPrPm4e1/SbU+lEYBciPoaTShLkDbRge4UePEyCPMQ== + +"@algolia/client-insights@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.38.0.tgz" + integrity sha512-4c3FbpMiJX+VcaAj0rYaQdTLS/CkrdOn4hW+5y1plPov7KC7iSHai/VBbirmHuAfW1hVPCIh1w/4erKKTKuo+Q== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" + +"@algolia/client-personalization@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.38.0.tgz" + integrity sha512-FzLs6c8TBL4FSgNfnH2NL7O33ktecGiaKO4ZFG51QYORUzD5d6YwB9UBteaIYu/sgFoEdY57diYU4vyBH8R6iA== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" + +"@algolia/client-query-suggestions@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.38.0.tgz" + integrity sha512-7apiahlgZLvOqrh0+hAYAp/UWjqz6AfSJrCwnsoQNzgIT09dLSPIKREelkuQeUrKy38vHWWpSQE3M0zWSp/YrA== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" "@algolia/client-search@>= 4.9.1 < 6": - version "5.46.0" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.46.0.tgz" - integrity sha512-22SHEEVNjZfFWkFks3P6HilkR3rS7a6GjnCIqR22Zz4HNxdfT0FG+RE7efTcFVfLUkTTMQQybvaUcwMrHXYa7Q== + version "5.42.0" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.42.0.tgz" + integrity sha512-NZR7yyHj2WzK6D5X8gn+/KOxPdzYEXOqVdSaK/biU8QfYUpUuEA0sCWg/XlO05tPVEcJelF/oLrrNY3UjRbOww== dependencies: - "@algolia/client-common" "5.46.0" - "@algolia/requester-browser-xhr" "5.46.0" - "@algolia/requester-fetch" "5.46.0" - "@algolia/requester-node-http" "5.46.0" + "@algolia/client-common" "5.42.0" + "@algolia/requester-browser-xhr" "5.42.0" + "@algolia/requester-fetch" "5.42.0" + "@algolia/requester-node-http" "5.42.0" -"@algolia/client-search@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.44.0.tgz" - integrity sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q== +"@algolia/client-search@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.38.0.tgz" + integrity sha512-PTAFMJOpVtJweExEYYgdmSCC6n4V/R+ctDL3fRQy77ulZM/p+zMLIQC9c7HCQE1zqpauvVck3f2zYSejaUTtrw== dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/ingestion@1.44.0": - version "1.44.0" - resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.44.0.tgz" - integrity sha512-5+S5ynwMmpTpCLXGjTDpeIa81J+R4BLH0lAojOhmeGSeGEHQTqacl/4sbPyDTcidvnWhaqtyf8m42ue6lvISAw== +"@algolia/ingestion@1.38.0": + version "1.38.0" + resolved "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.38.0.tgz" + integrity sha512-qGSUGgceJHGyJLZ06bFLwVe2Tpf9KwabmoBjFvFscVmMmU5scKya6voCYd9bdX7V0Xy1qya9MGbmTm4zlLuveQ== + dependencies: + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" + +"@algolia/monitoring@1.38.0": + version "1.38.0" + resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.38.0.tgz" + integrity sha512-VnCtAUcHirvv/dDHg9jK1Z5oo4QOC5FKDxe40x8qloru2qDcjueT34jiAsB0gRos3VWf9v4iPSYTqMIFOcADpQ== dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" -"@algolia/monitoring@1.44.0": - version "1.44.0" - resolved "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.44.0.tgz" - integrity sha512-xhaTN8pXJjR6zkrecg4Cc9YZaQK2LKm2R+LkbAq+AYGBCWJxtSGlNwftozZzkUyq4AXWoyoc0x2SyBtq5LRtqQ== +"@algolia/recommend@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.38.0.tgz" + integrity sha512-fqgeU9GqxQorFUeGP4et1MyY28ccf9PCeciHwDPSbPYYiTqBItHdUIiytsNpjC5Dnc0RWtuXWCltLwSw9wN/bQ== dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + "@algolia/client-common" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" -"@algolia/recommend@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.44.0.tgz" - integrity sha512-GNcite/uOIS7wgRU1MT7SdNIupGSW+vbK9igIzMePvD2Dl8dy0O3urKPKIbTuZQqiVH1Cb84y5cgLvwNrdCj/Q== +"@algolia/requester-browser-xhr@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.38.0.tgz" + integrity sha512-nAUKbv4YQIXbpPi02AQvSPisD5FDDbT8XeYSh9HFoYP0Z3IpBLLDg7R4ahPvzd7gGsVKgEbXzRPWESXSji5yIg== dependencies: - "@algolia/client-common" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + "@algolia/client-common" "5.38.0" -"@algolia/requester-browser-xhr@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.44.0.tgz" - integrity sha512-YZHBk72Cd7pcuNHzbhNzF/FbbYszlc7JhZlDyQAchnX5S7tcemSS96F39Sy8t4O4WQLpFvUf1MTNedlitWdOsQ== +"@algolia/requester-browser-xhr@5.42.0": + version "5.42.0" + resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.42.0.tgz" + integrity sha512-EbuxgteaYBlKgc2Fs3JzoPIKAIaevAIwmv1F+fakaEXeibG4pkmVNsyTUjpOZIgJ1kXeqNvDrcjRb6g3vYBJ9A== dependencies: - "@algolia/client-common" "5.44.0" + "@algolia/client-common" "5.42.0" -"@algolia/requester-browser-xhr@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.46.0.tgz" - integrity sha512-eW6xyHCyYrJD0Kjk9Mz33gQ40LfWiEA51JJTVfJy3yeoRSw/NXhAL81Pljpa0qslTs6+LO/5DYPZddct6HvISQ== +"@algolia/requester-fetch@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.38.0.tgz" + integrity sha512-bkuAHaadC6OxJd3SVyQQnU1oJ9G/zdCqua7fwr1tJDrA/v7KzeS5np4/m6BuRUpTgVgFZHSewGnMcgj9DLBoaQ== dependencies: - "@algolia/client-common" "5.46.0" + "@algolia/client-common" "5.38.0" -"@algolia/requester-fetch@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.44.0.tgz" - integrity sha512-B9WHl+wQ7uf46t9cq+vVM/ypVbOeuldVDq9OtKsX2ApL2g/htx6ImB9ugDOOJmB5+fE31/XPTuCcYz/j03+idA== +"@algolia/requester-fetch@5.42.0": + version "5.42.0" + resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.42.0.tgz" + integrity sha512-4vnFvY5Q8QZL9eDNkywFLsk/eQCRBXCBpE8HWs8iUsFNHYoamiOxAeYMin0W/nszQj6abc+jNxMChHmejO+ftQ== dependencies: - "@algolia/client-common" "5.44.0" + "@algolia/client-common" "5.42.0" -"@algolia/requester-fetch@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.46.0.tgz" - integrity sha512-Vn2+TukMGHy4PIxmdvP667tN/MhS7MPT8EEvEhS6JyFLPx3weLcxSa1F9gVvrfHWCUJhLWoMVJVB2PT8YfRGcw== +"@algolia/requester-node-http@5.38.0": + version "5.38.0" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.38.0.tgz" + integrity sha512-yHDKZTnMPR3/4bY0CVC1/uRnnbAaJ+pctRuX7G/HflBkKOrnUBDEGtQQHzEfMz2FHZ/tbCL+Q9r6mvwTSGp8nw== dependencies: - "@algolia/client-common" "5.46.0" + "@algolia/client-common" "5.38.0" -"@algolia/requester-node-http@5.44.0": - version "5.44.0" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.44.0.tgz" - integrity sha512-MULm0qeAIk4cdzZ/ehJnl1o7uB5NMokg83/3MKhPq0Pk7+I0uELGNbzIfAkvkKKEYcHALemKdArtySF9eKzh/A== +"@algolia/requester-node-http@5.42.0": + version "5.42.0" + resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.42.0.tgz" + integrity sha512-gkLNpU+b1pCIwk1hKTJz2NWQPT8gsfGhQasnZ5QVv4jd79fKRL/1ikd86P0AzuIQs9tbbhlMwxsSTyJmlq502w== dependencies: - "@algolia/client-common" "5.44.0" + "@algolia/client-common" "5.42.0" -"@algolia/requester-node-http@5.46.0": - version "5.46.0" - resolved "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.46.0.tgz" - integrity sha512-xaqXyna5yBZ+r1SJ9my/DM6vfTqJg9FJgVydRJ0lnO+D5NhqGW/qaRG/iBGKr/d4fho34el6WakV7BqJvrl/HQ== +"@ampproject/remapping@^2.2.0": + version "2.2.1" + resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@algolia/client-common" "5.46.0" + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@antfu/install-pkg@^1.1.0": version "1.1.0" @@ -237,248 +244,259 @@ resolved "https://registry.npmjs.org/@antfu/utils/-/utils-9.3.0.tgz" integrity sha512-9hFT4RauhcUzqOE4f1+frMKLZrgNog5b06I7VmZQV1BkvwvqrbC8EBZf3L1eEL2AKb6rNKjER0sEvJiSP1FXEA== -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz" - integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.0", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/helper-validator-identifier" "^7.27.1" + "@babel/helper-validator-identifier" "^7.25.9" js-tokens "^4.0.0" - picocolors "^1.1.1" + picocolors "^1.0.0" -"@babel/compat-data@^7.27.2", "@babel/compat-data@^7.27.7", "@babel/compat-data@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz" - integrity sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.25.9", "@babel/compat-data@^7.26.0": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz" + integrity sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg== "@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.12.0", "@babel/core@^7.13.0", "@babel/core@^7.21.3", "@babel/core@^7.25.9", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz" - integrity sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helpers" "^7.28.4" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.5" - "@babel/types" "^7.28.5" - "@jridgewell/remapping" "^2.3.5" + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.26.0.tgz" + integrity sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.26.0" + "@babel/generator" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.0" + "@babel/parser" "^7.26.0" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.26.0" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.25.9", "@babel/generator@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz" - integrity sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ== +"@babel/generator@^7.25.9", "@babel/generator@^7.26.0": + version "7.26.2" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz" + integrity sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw== dependencies: - "@babel/parser" "^7.28.5" - "@babel/types" "^7.28.5" - "@jridgewell/gen-mapping" "^0.3.12" - "@jridgewell/trace-mapping" "^0.3.28" + "@babel/parser" "^7.26.2" + "@babel/types" "^7.26.0" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" jsesc "^3.0.2" -"@babel/helper-annotate-as-pure@^7.27.1", "@babel/helper-annotate-as-pure@^7.27.3": - version "7.27.3" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz" - integrity sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg== +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.9.tgz" + integrity sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g== dependencies: - "@babel/types" "^7.27.3" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.27.1", "@babel/helper-compilation-targets@^7.27.2": - version "7.27.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz" - integrity sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.9.tgz" + integrity sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ== dependencies: - "@babel/compat-data" "^7.27.2" - "@babel/helper-validator-option" "^7.27.1" + "@babel/compat-data" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.27.1", "@babel/helper-create-class-features-plugin@^7.28.3", "@babel/helper-create-class-features-plugin@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.5.tgz" - integrity sha512-q3WC4JfdODypvxArsJQROfupPBq9+lMwjKq7C33GhbFYJsufD0yd/ziwD+hJucLeWsnFPWZjsU2DNFqBPE7jwQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-member-expression-to-functions" "^7.28.5" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/traverse" "^7.28.5" +"@babel/helper-create-class-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.9.tgz" + integrity sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.25.9" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz" - integrity sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.9.tgz" + integrity sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - regexpu-core "^6.3.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.1.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.5": - version "0.6.5" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.5.tgz" - integrity sha512-uJnGFcPsWQK8fvjgGP5LZUZZsYGIoPeRjSF5PGwrelYgq7Q15/Ft9NGFp1zglwgIv//W0uG4BevRuSJRyylZPg== +"@babel/helper-define-polyfill-provider@^0.6.2": + version "0.6.2" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz" + integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - debug "^4.4.1" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" lodash.debounce "^4.0.8" - resolve "^1.22.10" - -"@babel/helper-globals@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz" - integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== - -"@babel/helper-member-expression-to-functions@^7.27.1", "@babel/helper-member-expression-to-functions@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz" - integrity sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg== - dependencies: - "@babel/traverse" "^7.28.5" - "@babel/types" "^7.28.5" - -"@babel/helper-module-imports@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz" - integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-module-transforms@^7.27.1", "@babel/helper-module-transforms@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz" - integrity sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-validator-identifier" "^7.27.1" - "@babel/traverse" "^7.28.3" - -"@babel/helper-optimise-call-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz" - integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== - dependencies: - "@babel/types" "^7.27.1" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz" - integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== - -"@babel/helper-remap-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz" - integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-wrap-function" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-replace-supers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz" - integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.27.1" - "@babel/helper-optimise-call-expression" "^7.27.1" - "@babel/traverse" "^7.27.1" - -"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz" - integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== - dependencies: - "@babel/traverse" "^7.27.1" - "@babel/types" "^7.27.1" - -"@babel/helper-string-parser@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz" - integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== - -"@babel/helper-validator-identifier@^7.27.1", "@babel/helper-validator-identifier@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz" - integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== - -"@babel/helper-validator-option@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz" - integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== - -"@babel/helper-wrap-function@^7.27.1": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.3.tgz" - integrity sha512-zdf983tNfLZFletc0RRXYrHrucBEg95NIFMkn6K9dbeMYnsgHaSBGcQqdsCSStG2PYwRre0Qc2NNSCXbG+xc6g== - dependencies: - "@babel/template" "^7.27.2" - "@babel/traverse" "^7.28.3" - "@babel/types" "^7.28.2" - -"@babel/helpers@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz" - integrity sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w== - dependencies: - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.4" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== + dependencies: + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.0", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.9.tgz" + integrity sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/parser@^7.27.2", "@babel/parser@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz" - integrity sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ== +"@babel/helper-replace-supers@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.9.tgz" + integrity sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ== dependencies: - "@babel/types" "^7.28.5" - -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz" - integrity sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q== + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-simple-access@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.9.tgz" + integrity sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== + +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== + +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== + dependencies: + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helpers@^7.26.0": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz" + integrity sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g== + dependencies: + "@babel/template" "^7.26.9" + "@babel/types" "^7.26.10" + +"@babel/parser@^7.25.9", "@babel/parser@^7.26.0", "@babel/parser@^7.26.2", "@babel/parser@^7.26.9": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz" + integrity sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA== + dependencies: + "@babel/types" "^7.26.10" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.5" - -"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz" - integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz" - integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz" - integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.27.1" - -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.3.tgz" - integrity sha512-b6YTX108evsvE4YgWyQ921ZAFFQm3Bn+CA3+ZXlNVnPhx+UfsVURoPjfGAPCjBgrqo30yX/C2nZGX96DxvR9Iw== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -492,33 +510,33 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-import-assertions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz" - integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz" - integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== +"@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz" - integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== +"@babel/plugin-syntax-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-typescript@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz" - integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== +"@babel/plugin-syntax-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -528,540 +546,531 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz" - integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== - dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - -"@babel/plugin-transform-async-generator-functions@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.28.0.tgz" - integrity sha512-BEOdvX4+M765icNPZeidyADIvQ1m1gmunXufXxvRESy/jNNyfovIqUyE7MVgGBjWktCoJlzvFA1To2O4ymIO3Q== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-remap-async-to-generator" "^7.27.1" - "@babel/traverse" "^7.28.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-async-to-generator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz" - integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== +"@babel/plugin-transform-async-generator-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.9.tgz" + integrity sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw== dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz" - integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoping@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.5.tgz" - integrity sha512-45DmULpySVvmq9Pj3X9B+62Xe+DJGov27QravQJU1LLcapR6/10i+gYVAucGGJpHBp5mYxIMK4nDAT/QDLr47g== +"@babel/plugin-transform-block-scoped-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.9.tgz" + integrity sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz" - integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.9.tgz" + integrity sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-static-block@^7.28.3": - version "7.28.3" - resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.3.tgz" - integrity sha512-LtPXlBbRoc4Njl/oh1CeD/3jC+atytbnf/UqLoqTDcEYGUPj022+rvfkbDYieUrSj3CaV4yHDByPE+T2HwfsJg== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.4.tgz" - integrity sha512-cFOlhIYPBv/iBoc+KS3M6et2XPtbT2HiCRfBXWtfpc9OAyostldxIf9YAYB6ypURBBbx+Qv6nyrLzASfJe+hBA== +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-globals" "^7.28.0" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" - "@babel/traverse" "^7.28.4" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-computed-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz" - integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/template" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" + globals "^11.1.0" -"@babel/plugin-transform-destructuring@^7.28.0", "@babel/plugin-transform-destructuring@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz" - integrity sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.28.5" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz" - integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz" - integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz" - integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz" - integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-explicit-resource-management@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.0.tgz" - integrity sha512-K8nhUcn3f6iB+P3gwCv/no7OdzOZQcKchW6N389V6PD8NUWKZHzndOd9sPDVbMoBsbmjMqlB4L9fm+fEFNVlwQ== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.5.tgz" - integrity sha512-D4WIMaFtwa2NizOp+dnoFjRez/ClKiC2BqqImwKd1X28nqBtZEyCYJ2ozQrrzlxAFrcrjxo39S6khe9RNDlGzw== +"@babel/plugin-transform-exponentiation-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.9.tgz" + integrity sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz" - integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz" - integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== +"@babel/plugin-transform-for-of@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.9.tgz" + integrity sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-function-name@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz" - integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-compilation-targets" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/traverse" "^7.27.1" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz" - integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz" - integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.5.tgz" - integrity sha512-axUuqnUTBuXyHGcJEVVh9pORaN6wC5bYfE7FGzPiaWa3syib9m7g+/IT/4VgCOe2Upef43PHzeAvcrVek6QuuA== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz" - integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz" - integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz" - integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== +"@babel/plugin-transform-modules-commonjs@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.9.tgz" + integrity sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-simple-access" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.28.5.tgz" - integrity sha512-vn5Jma98LCOeBy/KpeQhXcV2WZgaRUtjwQmjoBuLNlOmkg0fB5pdvYVeWRYI69wWKwK2cD1QbMiUQnoujWvrew== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-module-transforms" "^7.28.3" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" - "@babel/traverse" "^7.28.5" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz" - integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-module-transforms" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz" - integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz" - integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz" - integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.9.tgz" + integrity sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz" - integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-rest-spread@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.4.tgz" - integrity sha512-373KA2HQzKhQCYiRVIRr+3MjpCObqzDlyrM6u4I201wL8Mp2wHf7uB8GhDwis03k2ti8Zr65Zyyqs1xOxUF/Ew== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.0" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/traverse" "^7.28.4" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-object-super@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz" - integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz" - integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.27.1", "@babel/plugin-transform-optional-chaining@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.5.tgz" - integrity sha512-N6fut9IZlPnjPwgiQkXNhb+cT8wQKFlJNqcZkWlcTqkcqx6/kU4ynGmLFoa4LViBSirn05YAwk+sQBbPfxtYzQ== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-parameters@^7.27.7": - version "7.27.7" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz" - integrity sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz" - integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz" - integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-create-class-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz" - integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz" - integrity sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug== + version "7.24.1" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.24.1.tgz" + integrity sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.24.0" -"@babel/plugin-transform-react-display-name@^7.28.0": - version "7.28.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz" - integrity sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA== +"@babel/plugin-transform-react-display-name@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.25.9.tgz" + integrity sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-react-jsx-development@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz" - integrity sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q== +"@babel/plugin-transform-react-jsx-development@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.25.9.tgz" + integrity sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw== dependencies: - "@babel/plugin-transform-react-jsx" "^7.27.1" + "@babel/plugin-transform-react-jsx" "^7.25.9" -"@babel/plugin-transform-react-jsx@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.27.1.tgz" - integrity sha512-2KH4LWGSrJIkVf5tSiBFYuXDAoWRq2MMwgivCf+93dd0GQi8RXLjKA/0EvRnVV5G0hrHczsquXuD01L8s6dmBw== +"@babel/plugin-transform-react-jsx@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.25.9.tgz" + integrity sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/types" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-transform-react-pure-annotations@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz" - integrity sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA== +"@babel/plugin-transform-react-pure-annotations@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.25.9.tgz" + integrity sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.28.4": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.28.4.tgz" - integrity sha512-+ZEdQlBoRg9m2NnzvEeLgtvBMO4tkFBw5SQIUgLICgTrumLoU7lr+Oghi6km2PFj+dbUt2u1oby2w3BDO9YQnA== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.9.tgz" + integrity sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + regenerator-transform "^0.15.2" -"@babel/plugin-transform-regexp-modifiers@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz" - integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-reserved-words@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz" - integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-transform-runtime@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.28.5.tgz" - integrity sha512-20NUVgOrinudkIBzQ2bNxP08YpKprUkRTiRSd2/Z5GOdPImJGkoN4Z7IQe1T5AdyKI1i5L6RBmluqdSzvaq9/w== - dependencies: - "@babel/helper-module-imports" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.25.9.tgz" + integrity sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" semver "^6.3.1" -"@babel/plugin-transform-shorthand-properties@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz" - integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz" - integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz" - integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz" - integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== +"@babel/plugin-transform-template-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.9.tgz" + integrity sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typeof-symbol@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz" - integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== +"@babel/plugin-transform-typeof-symbol@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.9.tgz" + integrity sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-typescript@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.5.tgz" - integrity sha512-x2Qa+v/CuEoX7Dr31iAfr0IhInrVOWZU/2vJMJ00FOR/2nM0BcBEclpaf9sWCDc+v5e9dMrhSH8/atq/kX7+bA== +"@babel/plugin-transform-typescript@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.9.tgz" + integrity sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.27.3" - "@babel/helper-create-class-features-plugin" "^7.28.5" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" - "@babel/plugin-syntax-typescript" "^7.27.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz" - integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz" - integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz" - integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.27.1": - version "7.27.1" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz" - integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.27.1" - "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/preset-env@^7.20.2", "@babel/preset-env@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.28.5.tgz" - integrity sha512-S36mOoi1Sb6Fz98fBfE+UZSpYw5mJm0NUHtIKrOuNcqeFauy1J6dIvXm2KRVKobOSaGq4t/hBXdN4HGU3wL9Wg== - dependencies: - "@babel/compat-data" "^7.28.5" - "@babel/helper-compilation-targets" "^7.27.2" - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.28.5" - "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.28.3" + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.26.0.tgz" + integrity sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw== + dependencies: + "@babel/compat-data" "^7.26.0" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-import-assertions" "^7.27.1" - "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.27.1" - "@babel/plugin-transform-async-generator-functions" "^7.28.0" - "@babel/plugin-transform-async-to-generator" "^7.27.1" - "@babel/plugin-transform-block-scoped-functions" "^7.27.1" - "@babel/plugin-transform-block-scoping" "^7.28.5" - "@babel/plugin-transform-class-properties" "^7.27.1" - "@babel/plugin-transform-class-static-block" "^7.28.3" - "@babel/plugin-transform-classes" "^7.28.4" - "@babel/plugin-transform-computed-properties" "^7.27.1" - "@babel/plugin-transform-destructuring" "^7.28.5" - "@babel/plugin-transform-dotall-regex" "^7.27.1" - "@babel/plugin-transform-duplicate-keys" "^7.27.1" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" - "@babel/plugin-transform-dynamic-import" "^7.27.1" - "@babel/plugin-transform-explicit-resource-management" "^7.28.0" - "@babel/plugin-transform-exponentiation-operator" "^7.28.5" - "@babel/plugin-transform-export-namespace-from" "^7.27.1" - "@babel/plugin-transform-for-of" "^7.27.1" - "@babel/plugin-transform-function-name" "^7.27.1" - "@babel/plugin-transform-json-strings" "^7.27.1" - "@babel/plugin-transform-literals" "^7.27.1" - "@babel/plugin-transform-logical-assignment-operators" "^7.28.5" - "@babel/plugin-transform-member-expression-literals" "^7.27.1" - "@babel/plugin-transform-modules-amd" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-modules-systemjs" "^7.28.5" - "@babel/plugin-transform-modules-umd" "^7.27.1" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" - "@babel/plugin-transform-new-target" "^7.27.1" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" - "@babel/plugin-transform-numeric-separator" "^7.27.1" - "@babel/plugin-transform-object-rest-spread" "^7.28.4" - "@babel/plugin-transform-object-super" "^7.27.1" - "@babel/plugin-transform-optional-catch-binding" "^7.27.1" - "@babel/plugin-transform-optional-chaining" "^7.28.5" - "@babel/plugin-transform-parameters" "^7.27.7" - "@babel/plugin-transform-private-methods" "^7.27.1" - "@babel/plugin-transform-private-property-in-object" "^7.27.1" - "@babel/plugin-transform-property-literals" "^7.27.1" - "@babel/plugin-transform-regenerator" "^7.28.4" - "@babel/plugin-transform-regexp-modifiers" "^7.27.1" - "@babel/plugin-transform-reserved-words" "^7.27.1" - "@babel/plugin-transform-shorthand-properties" "^7.27.1" - "@babel/plugin-transform-spread" "^7.27.1" - "@babel/plugin-transform-sticky-regex" "^7.27.1" - "@babel/plugin-transform-template-literals" "^7.27.1" - "@babel/plugin-transform-typeof-symbol" "^7.27.1" - "@babel/plugin-transform-unicode-escapes" "^7.27.1" - "@babel/plugin-transform-unicode-property-regex" "^7.27.1" - "@babel/plugin-transform-unicode-regex" "^7.27.1" - "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.25.9" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.25.9" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.25.9" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.25.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.25.9" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.25.9" + "@babel/plugin-transform-typeof-symbol" "^7.25.9" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" - babel-plugin-polyfill-corejs2 "^0.4.14" - babel-plugin-polyfill-corejs3 "^0.13.0" - babel-plugin-polyfill-regenerator "^0.6.5" - core-js-compat "^3.43.0" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.10.6" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.38.1" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1074,71 +1083,72 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz" - integrity sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ== + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.25.9.tgz" + integrity sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-transform-react-display-name" "^7.28.0" - "@babel/plugin-transform-react-jsx" "^7.27.1" - "@babel/plugin-transform-react-jsx-development" "^7.27.1" - "@babel/plugin-transform-react-pure-annotations" "^7.27.1" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-transform-react-display-name" "^7.25.9" + "@babel/plugin-transform-react-jsx" "^7.25.9" + "@babel/plugin-transform-react-jsx-development" "^7.25.9" + "@babel/plugin-transform-react-pure-annotations" "^7.25.9" "@babel/preset-typescript@^7.21.0", "@babel/preset-typescript@^7.25.9": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz" - integrity sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g== + version "7.26.0" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.26.0.tgz" + integrity sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg== dependencies: - "@babel/helper-plugin-utils" "^7.27.1" - "@babel/helper-validator-option" "^7.27.1" - "@babel/plugin-syntax-jsx" "^7.27.1" - "@babel/plugin-transform-modules-commonjs" "^7.27.1" - "@babel/plugin-transform-typescript" "^7.28.5" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.25.9" + "@babel/plugin-transform-typescript" "^7.25.9" "@babel/runtime-corejs3@^7.25.9": - version "7.28.4" - resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz" - integrity sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ== + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.26.10.tgz" + integrity sha512-uITFQYO68pMEYR46AHgQoyBg7KPPJDAbGn4jUTIRgCFJIp88MIBUianVOplhZDEec07bp9zIyr4Kp0FCyQzmWg== dependencies: - core-js-pure "^3.43.0" + core-js-pure "^3.30.2" + regenerator-runtime "^0.14.0" -"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9": +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.25.9", "@babel/runtime@^7.8.4": version "7.26.10" resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz" integrity sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.27.1", "@babel/template@^7.27.2": - version "7.27.2" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz" - integrity sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/parser" "^7.27.2" - "@babel/types" "^7.27.1" - -"@babel/traverse@^7.25.9", "@babel/traverse@^7.27.1", "@babel/traverse@^7.28.0", "@babel/traverse@^7.28.3", "@babel/traverse@^7.28.4", "@babel/traverse@^7.28.5": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz" - integrity sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ== - dependencies: - "@babel/code-frame" "^7.27.1" - "@babel/generator" "^7.28.5" - "@babel/helper-globals" "^7.28.0" - "@babel/parser" "^7.28.5" - "@babel/template" "^7.27.2" - "@babel/types" "^7.28.5" +"@babel/template@^7.25.9", "@babel/template@^7.26.9": + version "7.26.9" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz" + integrity sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.26.9" + "@babel/types" "^7.26.9" + +"@babel/traverse@^7.25.9": + version "7.25.9" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz" + integrity sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw== + dependencies: + "@babel/code-frame" "^7.25.9" + "@babel/generator" "^7.25.9" + "@babel/parser" "^7.25.9" + "@babel/template" "^7.25.9" + "@babel/types" "^7.25.9" debug "^4.3.1" + globals "^11.1.0" -"@babel/types@^7.21.3", "@babel/types@^7.27.1", "@babel/types@^7.27.3", "@babel/types@^7.28.2", "@babel/types@^7.28.4", "@babel/types@^7.28.5", "@babel/types@^7.4.4": - version "7.28.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz" - integrity sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA== +"@babel/types@^7.21.3", "@babel/types@^7.25.9", "@babel/types@^7.26.0", "@babel/types@^7.26.10", "@babel/types@^7.26.9", "@babel/types@^7.4.4": + version "7.26.10" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz" + integrity sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ== dependencies: - "@babel/helper-string-parser" "^7.27.1" - "@babel/helper-validator-identifier" "^7.28.5" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@braintree/sanitize-url@^7.1.1": version "7.1.1" @@ -1187,22 +1197,22 @@ resolved "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-2.0.5.tgz" integrity sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A== -"@csstools/color-helpers@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz" - integrity sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA== +"@csstools/color-helpers@^5.0.2": + version "5.0.2" + resolved "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz" + integrity sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA== "@csstools/css-calc@^2.1.4": version "2.1.4" resolved "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz" integrity sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ== -"@csstools/css-color-parser@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.1.0.tgz" - integrity sha512-nbtKwh3a6xNVIp/VRuXV64yTKnb1IjTAEEh3irzS+HkKjAOYLTGNb9pmVNntZ8iVBHcWDA2Dof0QtPgFI1BaTA== +"@csstools/css-color-parser@^3.0.10": + version "3.0.10" + resolved "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz" + integrity sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg== dependencies: - "@csstools/color-helpers" "^5.1.0" + "@csstools/color-helpers" "^5.0.2" "@csstools/css-calc" "^2.1.4" "@csstools/css-parser-algorithms@^3.0.5": @@ -1220,88 +1230,55 @@ resolved "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz" integrity sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ== -"@csstools/postcss-alpha-function@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-alpha-function/-/postcss-alpha-function-1.0.1.tgz" - integrity sha512-isfLLwksH3yHkFXfCI2Gcaqg7wGGHZZwunoJzEZk0yKYIokgre6hYVFibKL3SYAoR1kBXova8LB+JoO5vZzi9w== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-cascade-layers@^5.0.2": - version "5.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.2.tgz" - integrity sha512-nWBE08nhO8uWl6kSAeCx4im7QfVko3zLrtgWZY4/bP87zrSPpSyN/3W3TDqz1jJuH+kbKOHXg5rJnK+ZVYcFFg== +"@csstools/postcss-cascade-layers@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-5.0.1.tgz" + integrity sha512-XOfhI7GShVcKiKwmPAnWSqd2tBR0uxt+runAxttbSp/LY2U16yAVPmAf7e9q4JJ0d+xMNmpwNDLBXnmRCl3HMQ== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -"@csstools/postcss-color-function-display-p3-linear@^1.0.1": - version "1.0.1" - resolved "https://registry.npmjs.org/@csstools/postcss-color-function-display-p3-linear/-/postcss-color-function-display-p3-linear-1.0.1.tgz" - integrity sha512-E5qusdzhlmO1TztYzDIi8XPdPoYOjoTY6HBYBCYSj+Gn4gQRBlvjgPQXzfzuPQqt8EhkC/SzPKObg4Mbn8/xMg== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-function@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.12.tgz" - integrity sha512-yx3cljQKRaSBc2hfh8rMZFZzChaFgwmO2JfFgFr1vMcF3C/uyy5I4RFIBOIWGq1D+XbKCG789CGkG6zzkLpagA== - dependencies: - "@csstools/css-color-parser" "^3.1.0" - "@csstools/css-parser-algorithms" "^3.0.5" - "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" - "@csstools/utilities" "^2.0.0" - -"@csstools/postcss-color-mix-function@^3.0.12": - version "3.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.12.tgz" - integrity sha512-4STERZfCP5Jcs13P1U5pTvI9SkgLgfMUMhdXW8IlJWkzOOOqhZIjcNhWtNJZes2nkBDsIKJ0CJtFtuaZ00moag== +"@csstools/postcss-color-function@^4.0.10": + version "4.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-4.0.10.tgz" + integrity sha512-4dY0NBu7NVIpzxZRgh/Q/0GPSz/jLSw0i/u3LTUor0BkQcz/fNhN10mSWBDsL0p9nDb0Ky1PD6/dcGbhACuFTQ== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.2.tgz" - integrity sha512-rM67Gp9lRAkTo+X31DUqMEq+iK+EFqsidfecmhrteErxJZb6tUoJBVQca1Vn1GpDql1s1rD1pKcuYzMsg7Z1KQ== +"@csstools/postcss-color-mix-function@^3.0.10": + version "3.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-3.0.10.tgz" + integrity sha512-P0lIbQW9I4ShE7uBgZRib/lMTf9XMjJkFl/d6w4EMNHu2qvQ6zljJGEcBkw/NsBtq/6q3WrmgxSS8kHtPMkK4Q== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-content-alt-text@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.8.tgz" - integrity sha512-9SfEW9QCxEpTlNMnpSqFaHyzsiRpZ5J5+KqCu1u5/eEJAWsMhzT40qf0FIbeeglEvrGRMdDzAxMIz3wqoGSb+Q== +"@csstools/postcss-color-mix-variadic-function-arguments@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@csstools/postcss-color-mix-variadic-function-arguments/-/postcss-color-mix-variadic-function-arguments-1.0.0.tgz" + integrity sha512-Z5WhouTyD74dPFPrVE7KydgNS9VvnjB8qcdes9ARpCOItb4jTnm7cHp4FhxCRUoyhabD0WVv43wbkJ4p8hLAlQ== dependencies: + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-contrast-color-function@^2.0.12": - version "2.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-contrast-color-function/-/postcss-contrast-color-function-2.0.12.tgz" - integrity sha512-YbwWckjK3qwKjeYz/CijgcS7WDUCtKTd8ShLztm3/i5dhh4NaqzsbYnhm4bjrpFpnLZ31jVcbK8YL77z3GBPzA== +"@csstools/postcss-content-alt-text@^2.0.6": + version "2.0.6" + resolved "https://registry.npmjs.org/@csstools/postcss-content-alt-text/-/postcss-content-alt-text-2.0.6.tgz" + integrity sha512-eRjLbOjblXq+byyaedQRSrAejKGNAFued+LcbzT+LCL78fabxHkxYjBbxkroONxHHYu2qxhFK2dBStTLPG3jpQ== dependencies: - "@csstools/css-color-parser" "^3.1.0" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" "@csstools/postcss-exponential-functions@^2.0.9": @@ -1321,43 +1298,43 @@ "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -"@csstools/postcss-gamut-mapping@^2.0.11": - version "2.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.11.tgz" - integrity sha512-fCpCUgZNE2piVJKC76zFsgVW1apF6dpYsqGyH8SIeCcM4pTEsRTWTLCaJIMKFEundsCKwY1rwfhtrio04RJ4Dw== +"@csstools/postcss-gamut-mapping@^2.0.10": + version "2.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-2.0.10.tgz" + integrity sha512-QDGqhJlvFnDlaPAfCYPsnwVA6ze+8hhrwevYWlnUeSjkkZfBpcCO42SaUD8jiLlq7niouyLgvup5lh+f1qessg== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-gradients-interpolation-method@^5.0.12": - version "5.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.12.tgz" - integrity sha512-jugzjwkUY0wtNrZlFeyXzimUL3hN4xMvoPnIXxoZqxDvjZRiSh+itgHcVUWzJ2VwD/VAMEgCLvtaJHX+4Vj3Ow== +"@csstools/postcss-gradients-interpolation-method@^5.0.10": + version "5.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-5.0.10.tgz" + integrity sha512-HHPauB2k7Oits02tKFUeVFEU2ox/H3OQVrP3fSOKDxvloOikSal+3dzlyTZmYsb9FlY9p5EUpBtz0//XBmy+aw== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-hwb-function@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.12.tgz" - integrity sha512-mL/+88Z53KrE4JdePYFJAQWFrcADEqsLprExCM04GDNgHIztwFzj0Mbhd/yxMBngq0NIlz58VVxjt5abNs1VhA== +"@csstools/postcss-hwb-function@^4.0.10": + version "4.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-4.0.10.tgz" + integrity sha512-nOKKfp14SWcdEQ++S9/4TgRKchooLZL0TUFdun3nI4KPwCjETmhjta1QT4ICQcGVWQTvrsgMM/aLB5We+kMHhQ== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-ic-unit@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.4.tgz" - integrity sha512-yQ4VmossuOAql65sCPppVO1yfb7hDscf4GseF0VCA/DTDaBc0Wtf8MTqVPfjGYlT5+2buokG0Gp7y0atYZpwjg== +"@csstools/postcss-ic-unit@^4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-4.0.2.tgz" + integrity sha512-lrK2jjyZwh7DbxaNnIUjkeDmU8Y6KyzRBk91ZkI5h8nb1ykEfZrtIVArdIjX4DHMIBGpdHrgP0n4qXDr7OHaKA== dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" @@ -1366,22 +1343,22 @@ resolved "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-2.0.1.tgz" integrity sha512-L1wLVMSAZ4wovznquK0xmC7QSctzO4D0Is590bxpGqhqjboLXYA16dWZpfwImkdOgACdQ9PqXsuRroW6qPlEsg== -"@csstools/postcss-is-pseudo-class@^5.0.3": - version "5.0.3" - resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.3.tgz" - integrity sha512-jS/TY4SpG4gszAtIg7Qnf3AS2pjcUM5SzxpApOrlndMeGhIbaTzWBzzP/IApXoNWEW7OhcjkRT48jnAUIFXhAQ== +"@csstools/postcss-is-pseudo-class@^5.0.1": + version "5.0.1" + resolved "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-5.0.1.tgz" + integrity sha512-JLp3POui4S1auhDR0n8wHd/zTOWmMsmK3nQd3hhL6FhWPaox5W7j1se6zXOG/aP07wV2ww0lxbKYGwbBszOtfQ== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" -"@csstools/postcss-light-dark-function@^2.0.11": - version "2.0.11" - resolved "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.11.tgz" - integrity sha512-fNJcKXJdPM3Lyrbmgw2OBbaioU7yuKZtiXClf4sGdQttitijYlZMD5K7HrC/eF83VRWRrYq6OZ0Lx92leV2LFA== +"@csstools/postcss-light-dark-function@^2.0.9": + version "2.0.9" + resolved "https://registry.npmjs.org/@csstools/postcss-light-dark-function/-/postcss-light-dark-function-2.0.9.tgz" + integrity sha512-1tCZH5bla0EAkFAI2r0H33CDnIBeLUaJh1p+hvvsylJ4svsv2wOmJjJn+OXwUZLXef37GYbRIVKX+X+g6m+3CQ== dependencies: "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" "@csstools/postcss-logical-float-and-clear@^3.0.0": @@ -1448,21 +1425,21 @@ dependencies: postcss-value-parser "^4.2.0" -"@csstools/postcss-oklab-function@^4.0.12": - version "4.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.12.tgz" - integrity sha512-HhlSmnE1NKBhXsTnNGjxvhryKtO7tJd1w42DKOGFD6jSHtYOrsJTQDKPMwvOfrzUAk8t7GcpIfRyM7ssqHpFjg== +"@csstools/postcss-oklab-function@^4.0.10": + version "4.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-4.0.10.tgz" + integrity sha512-ZzZUTDd0fgNdhv8UUjGCtObPD8LYxMH+MJsW9xlZaWTV8Ppr4PtxlHYNMmF4vVWGl0T6f8tyWAKjoI6vePSgAg== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" -"@csstools/postcss-progressive-custom-properties@^4.2.1": - version "4.2.1" - resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.2.1.tgz" - integrity sha512-uPiiXf7IEKtUQXsxu6uWtOlRMXd2QWWy5fhxHDnPdXKCQckPP3E34ZgDoZ62r2iT+UOgWsSbM4NvHE5m3mAEdw== +"@csstools/postcss-progressive-custom-properties@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-4.1.0.tgz" + integrity sha512-YrkI9dx8U4R8Sz2EJaoeD9fI7s7kmeEBfmO+UURNeL6lQI7VxF6sBE+rSqdCBn4onwqmxFdBU3lTwyYb/lCmxA== dependencies: postcss-value-parser "^4.2.0" @@ -1475,15 +1452,15 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-relative-color-syntax@^3.0.12": - version "3.0.12" - resolved "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.12.tgz" - integrity sha512-0RLIeONxu/mtxRtf3o41Lq2ghLimw0w9ByLWnnEVuy89exmEEq8bynveBxNW3nyHqLAFEeNtVEmC1QK9MZ8Huw== +"@csstools/postcss-relative-color-syntax@^3.0.10": + version "3.0.10" + resolved "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-3.0.10.tgz" + integrity sha512-8+0kQbQGg9yYG8hv0dtEpOMLwB9M+P7PhacgIzVzJpixxV4Eq9AUQtQw8adMmAJU1RBBmIlpmtmm3XTRd/T00g== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" "@csstools/postcss-scope-pseudo-class@^4.0.1": @@ -1511,12 +1488,12 @@ "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" -"@csstools/postcss-text-decoration-shorthand@^4.0.3": - version "4.0.3" - resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.3.tgz" - integrity sha512-KSkGgZfx0kQjRIYnpsD7X2Om9BUXX/Kii77VBifQW9Ih929hK0KNjVngHDH0bFB9GmfWcR9vJYJJRvw/NQjkrA== +"@csstools/postcss-text-decoration-shorthand@^4.0.2": + version "4.0.2" + resolved "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-4.0.2.tgz" + integrity sha512-8XvCRrFNseBSAGxeaVTaNijAu+FzUvjwFXtcrynmazGb/9WUdsPCpBX+mHEHShVRq47Gy4peYAoxYs8ltUnmzA== dependencies: - "@csstools/color-helpers" "^5.1.0" + "@csstools/color-helpers" "^5.0.2" postcss-value-parser "^4.2.0" "@csstools/postcss-trigonometric-functions@^4.0.9": @@ -1533,10 +1510,10 @@ resolved "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-4.0.0.tgz" integrity sha512-cBz3tOCI5Fw6NIFEwU3RiwK6mn3nKegjpJuzCndoGq3BZPkUjnsq7uQmIeMNeMbMk7YD2MfKcgCpZwX5jyXqCA== -"@csstools/selector-resolve-nested@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.1.0.tgz" - integrity sha512-mf1LEW0tJLKfWyvn5KdDrhpxHyuxpbNwTIwOYLIvsTffeyOf85j5oIzfG0yosxDgx/sswlqBnESYUcQH0vgZ0g== +"@csstools/selector-resolve-nested@^3.0.0": + version "3.0.0" + resolved "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-3.0.0.tgz" + integrity sha512-ZoK24Yku6VJU1gS79a5PFmC8yn3wIapiKmPgun0hZgEI5AOqgH2kiPRsPz1qkGv4HL+wuDLH83yQyk6inMYrJQ== "@csstools/selector-specificity@^5.0.0": version "5.0.0" @@ -1553,25 +1530,19 @@ resolved "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/core@4.3.1": - version "4.3.1" - resolved "https://registry.npmjs.org/@docsearch/core/-/core-4.3.1.tgz" - integrity sha512-ktVbkePE+2h9RwqCUMbWXOoebFyDOxHqImAqfs+lC8yOU+XwEW4jgvHGJK079deTeHtdhUNj0PXHSnhJINvHzQ== - -"@docsearch/css@4.3.2": - version "4.3.2" - resolved "https://registry.npmjs.org/@docsearch/css/-/css-4.3.2.tgz" - integrity sha512-K3Yhay9MgkBjJJ0WEL5MxnACModX9xuNt3UlQQkDEDZJZ0+aeWKtOkxHNndMRkMBnHdYvQjxkm6mdlneOtU1IQ== +"@docsearch/css@4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@docsearch/css/-/css-4.1.0.tgz" + integrity sha512-nuNKGjHj/FQeWgE9t+i83QD/V67QiaAmGY7xS9TVCRUiCqSljOgIKlsLoQZKKVwEG8f+OWKdznzZkJxGZ7d06A== "@docsearch/react@^3.9.0 || ^4.1.0": - version "4.3.2" - resolved "https://registry.npmjs.org/@docsearch/react/-/react-4.3.2.tgz" - integrity sha512-74SFD6WluwvgsOPqifYOviEEVwDxslxfhakTlra+JviaNcs7KK/rjsPj89kVEoQc9FUxRkAofaJnHIR7pb4TSQ== + version "4.1.0" + resolved "https://registry.npmjs.org/@docsearch/react/-/react-4.1.0.tgz" + integrity sha512-4GHI7TT3sJZ2Vs4Kjadv7vAkMrTsJqHvzvxO3JA7UT8iPRKaDottG5o5uNshPWhVVaBYPC35Ukf8bfCotGpjSg== dependencies: "@ai-sdk/react" "^2.0.30" "@algolia/autocomplete-core" "1.19.2" - "@docsearch/core" "4.3.1" - "@docsearch/css" "4.3.2" + "@docsearch/css" "4.1.0" ai "^5.0.30" algoliasearch "^5.28.0" marked "^16.3.0" @@ -2115,20 +2086,13 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.12", "@jridgewell/gen-mapping@^0.3.5": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz" - integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.5": + version "0.3.5" + resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz" + integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - "@jridgewell/trace-mapping" "^0.3.24" - -"@jridgewell/remapping@^2.3.5": - version "2.3.5" - resolved "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz" - integrity sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.24" "@jridgewell/resolve-uri@^3.1.0": @@ -2136,6 +2100,11 @@ resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz" integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + "@jridgewell/source-map@^0.3.3": version "0.3.5" resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" @@ -2144,15 +2113,15 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.5" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz" - integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== -"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.31" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz" - integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== +"@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.20", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.25" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== dependencies: "@jridgewell/resolve-uri" "^3.1.0" "@jridgewell/sourcemap-codec" "^1.4.14" @@ -2162,10 +2131,10 @@ resolved "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz" integrity sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA== -"@jsonjoy.com/buffers@^1.0.0", "@jsonjoy.com/buffers@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz" - integrity sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA== +"@jsonjoy.com/buffers@^1.0.0": + version "1.0.0" + resolved "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz" + integrity sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q== "@jsonjoy.com/codegen@^1.0.0": version "1.0.0" @@ -2173,20 +2142,19 @@ integrity sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g== "@jsonjoy.com/json-pack@^1.11.0": - version "1.21.0" - resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz" - integrity sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg== + version "1.14.0" + resolved "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.14.0.tgz" + integrity sha512-LpWbYgVnKzphN5S6uss4M25jJ/9+m6q6UJoeN6zTkK4xAGhKsiBRPVeF7OYMWonn5repMQbE5vieRXcMUrKDKw== dependencies: "@jsonjoy.com/base64" "^1.1.2" - "@jsonjoy.com/buffers" "^1.2.0" + "@jsonjoy.com/buffers" "^1.0.0" "@jsonjoy.com/codegen" "^1.0.0" - "@jsonjoy.com/json-pointer" "^1.0.2" + "@jsonjoy.com/json-pointer" "^1.0.1" "@jsonjoy.com/util" "^1.9.0" hyperdyperid "^1.2.0" thingies "^2.5.0" - tree-dump "^1.1.0" -"@jsonjoy.com/json-pointer@^1.0.2": +"@jsonjoy.com/json-pointer@^1.0.1": version "1.0.2" resolved "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz" integrity sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg== @@ -2203,31 +2171,29 @@ "@jsonjoy.com/codegen" "^1.0.0" "@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + version "2.0.4" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== "@mdx-js/mdx@^3.0.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz" - integrity sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ== + version "3.0.1" + resolved "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.0.1.tgz" + integrity sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA== dependencies: "@types/estree" "^1.0.0" "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" "@types/mdx" "^2.0.0" - acorn "^8.0.0" collapse-white-space "^2.0.0" devlop "^1.0.0" + estree-util-build-jsx "^3.0.0" estree-util-is-identifier-name "^3.0.0" - estree-util-scope "^1.0.0" + estree-util-to-js "^2.0.0" estree-walker "^3.0.0" + hast-util-to-estree "^3.0.0" hast-util-to-jsx-runtime "^2.0.0" markdown-extensions "^2.0.0" - recma-build-jsx "^1.0.0" - recma-jsx "^1.0.0" - recma-stringify "^1.0.0" - rehype-recma "^1.0.0" + periscopic "^3.0.0" remark-mdx "^3.0.0" remark-parse "^11.0.0" remark-rehype "^11.0.0" @@ -2468,10 +2434,17 @@ resolved "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== +"@types/acorn@^4.0.0": + version "4.0.6" + resolved "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz" + integrity sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ== + dependencies: + "@types/estree" "*" + "@types/body-parser@*": - version "1.19.6" - resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz" - integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== + version "1.19.5" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== dependencies: "@types/connect" "*" "@types/node" "*" @@ -2732,9 +2705,9 @@ "@types/json-schema" "*" "@types/estree-jsx@^1.0.0": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz" - integrity sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg== + version "1.0.4" + resolved "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.4.tgz" + integrity sha512-5idy3hvI9lAMqsyilBM+N+boaCf1MgoefbDxN6KEO5aK17TOHwFAYT9sjxzeKAiIWRUBgLxmZ9mPcnzZXtTcRQ== dependencies: "@types/estree" "*" @@ -2744,9 +2717,9 @@ integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.21", "@types/express-serve-static-core@^4.17.33": - version "4.19.7" - resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.7.tgz" - integrity sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg== + version "4.19.6" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" @@ -2754,14 +2727,14 @@ "@types/send" "*" "@types/express@*", "@types/express@^4.17.13", "@types/express@^4.17.21": - version "4.17.25" - resolved "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz" - integrity sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw== + version "4.17.23" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== dependencies: "@types/body-parser" "*" "@types/express-serve-static-core" "^4.17.33" "@types/qs" "*" - "@types/serve-static" "^1" + "@types/serve-static" "*" "@types/geojson@*": version "7946.0.16" @@ -2796,14 +2769,14 @@ integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== "@types/http-errors@*": - version "2.0.5" - resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz" - integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== + version "2.0.4" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== "@types/http-proxy@^1.17.8": - version "1.17.17" - resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz" - integrity sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw== + version "1.17.14" + resolved "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz" + integrity sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w== dependencies: "@types/node" "*" @@ -2832,9 +2805,9 @@ integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== "@types/mdast@^4.0.0", "@types/mdast@^4.0.2": - version "4.0.4" - resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz" - integrity sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA== + version "4.0.3" + resolved "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.3.tgz" + integrity sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg== dependencies: "@types/unist" "*" @@ -2849,14 +2822,14 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/ms@*": - version "2.1.0" - resolved "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz" - integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + version "0.7.34" + resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz" + integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== "@types/node-forge@^1.3.0": - version "1.3.14" - resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz" - integrity sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw== + version "1.3.11" + resolved "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz" + integrity sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ== dependencies: "@types/node" "*" @@ -2878,9 +2851,9 @@ integrity sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ== "@types/qs@*": - version "6.14.0" - resolved "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz" - integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== + version "6.9.11" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz" + integrity sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ== "@types/range-parser@*": version "1.2.7" @@ -2914,11 +2887,11 @@ "@types/react" "*" "@types/react@*", "@types/react@>= 16.8.0 < 20.0.0", "@types/react@>=16": - version "19.2.7" - resolved "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz" - integrity sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg== + version "19.2.2" + resolved "https://registry.npmjs.org/@types/react/-/react-19.2.2.tgz" + integrity sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA== dependencies: - csstype "^3.2.2" + csstype "^3.0.2" "@types/retry@0.12.2": version "0.12.2" @@ -2933,16 +2906,9 @@ "@types/node" "*" "@types/send@*": - version "1.2.1" - resolved "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz" - integrity sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ== - dependencies: - "@types/node" "*" - -"@types/send@<1": - version "0.17.6" - resolved "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz" - integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + version "0.17.4" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== dependencies: "@types/mime" "^1" "@types/node" "*" @@ -2954,14 +2920,14 @@ dependencies: "@types/express" "*" -"@types/serve-static@^1", "@types/serve-static@^1.15.5": - version "1.15.10" - resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz" - integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== +"@types/serve-static@*", "@types/serve-static@^1.15.5": + version "1.15.8" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== dependencies: "@types/http-errors" "*" "@types/node" "*" - "@types/send" "<1" + "@types/send" "*" "@types/sockjs@^0.3.36": version "0.3.36" @@ -2976,14 +2942,14 @@ integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== "@types/unist@*", "@types/unist@^3.0.0": - version "3.0.3" - resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz" - integrity sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q== + version "3.0.2" + resolved "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz" + integrity sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ== "@types/unist@^2.0.0": - version "2.0.11" - resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz" - integrity sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA== + version "2.0.10" + resolved "https://registry.npmjs.org/@types/unist/-/unist-2.0.10.tgz" + integrity sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA== "@types/ws@^8.5.10": version "8.18.1" @@ -2998,21 +2964,16 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.35" - resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz" - integrity sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg== + version "17.0.32" + resolved "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz" + integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== dependencies: "@types/yargs-parser" "*" "@ungap/structured-clone@^1.0.0": - version "1.3.0" - resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz" - integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== - -"@vercel/oidc@3.0.5": - version "3.0.5" - resolved "https://registry.npmjs.org/@vercel/oidc/-/oidc-3.0.5.tgz" - integrity sha512-fnYhv671l+eTTp48gB4zEsTW/YtRgRPnkI2nT7x6qw5rkI1Lq2hTmQIpHPgyThI0znLK+vX2n9XxKdXZ7BUbbw== + version "1.2.0" + resolved "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz" + integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== "@webassemblyjs/ast@^1.12.1", "@webassemblyjs/ast@1.12.1": version "1.12.1" @@ -3145,7 +3106,7 @@ resolved "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -accepts@~1.3.4, accepts@~1.3.8: +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: version "1.3.8" resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz" integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== @@ -3181,14 +3142,14 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ai@^5.0.30, ai@5.0.100: - version "5.0.100" - resolved "https://registry.npmjs.org/ai/-/ai-5.0.100.tgz" - integrity sha512-+ANP4EJomTcUKdEF3UpVAWEl6DGn+ozDLxVZKXmTV7NRfyEC2cLYcKwoU4o3sKJpqXMUKNzpFlJFBKOcsKdMyg== +ai@^5.0.30, ai@5.0.52: + version "5.0.52" + resolved "https://registry.npmjs.org/ai/-/ai-5.0.52.tgz" + integrity sha512-GLlRHjMlvN9+w7UYGxCpUQ8GgCRv5Z+JCprRH3Q8YbXJ/JyIc6EP9+YRUmQsyExX/qQsuehe7y/LLygarbSTOw== dependencies: - "@ai-sdk/gateway" "2.0.14" + "@ai-sdk/gateway" "1.0.29" "@ai-sdk/provider" "2.0.0" - "@ai-sdk/provider-utils" "3.0.17" + "@ai-sdk/provider-utils" "3.0.9" "@opentelemetry/api" "1.9.0" ajv-formats@^2.1.1: @@ -3221,41 +3182,41 @@ ajv@^6.12.5, ajv@^6.9.1: uri-js "^4.2.2" ajv@^8.0.0, ajv@^8.8.2, ajv@^8.9.0: - version "8.17.1" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz" - integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + version "8.12.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== dependencies: - fast-deep-equal "^3.1.3" - fast-uri "^3.0.1" + fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" require-from-string "^2.0.2" + uri-js "^4.2.2" algoliasearch-helper@^3.26.0: - version "3.26.1" - resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.1.tgz" - integrity sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw== + version "3.26.0" + resolved "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.26.0.tgz" + integrity sha512-Rv2x3GXleQ3ygwhkhJubhhYGsICmShLAiqtUuJTUkr9uOCOXyF2E71LVT4XDnVffbknv8XgScP4U0Oxtgm+hIw== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^5.28.0, algoliasearch@^5.37.0, "algoliasearch@>= 3.1 < 6", "algoliasearch@>= 4.9.1 < 6": - version "5.44.0" - resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.44.0.tgz" - integrity sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA== - dependencies: - "@algolia/abtesting" "1.10.0" - "@algolia/client-abtesting" "5.44.0" - "@algolia/client-analytics" "5.44.0" - "@algolia/client-common" "5.44.0" - "@algolia/client-insights" "5.44.0" - "@algolia/client-personalization" "5.44.0" - "@algolia/client-query-suggestions" "5.44.0" - "@algolia/client-search" "5.44.0" - "@algolia/ingestion" "1.44.0" - "@algolia/monitoring" "1.44.0" - "@algolia/recommend" "5.44.0" - "@algolia/requester-browser-xhr" "5.44.0" - "@algolia/requester-fetch" "5.44.0" - "@algolia/requester-node-http" "5.44.0" + version "5.38.0" + resolved "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.38.0.tgz" + integrity sha512-8VJKIzheeI9cjuVJhU1hYEVetOTe7LvA+CujAI7yqvYsPtZfVEvv1pg9AeFNtHBg/ZoSLGU5LPijhcY5l3Ea9g== + dependencies: + "@algolia/abtesting" "1.4.0" + "@algolia/client-abtesting" "5.38.0" + "@algolia/client-analytics" "5.38.0" + "@algolia/client-common" "5.38.0" + "@algolia/client-insights" "5.38.0" + "@algolia/client-personalization" "5.38.0" + "@algolia/client-query-suggestions" "5.38.0" + "@algolia/client-search" "5.38.0" + "@algolia/ingestion" "1.38.0" + "@algolia/monitoring" "1.38.0" + "@algolia/recommend" "5.38.0" + "@algolia/requester-browser-xhr" "5.38.0" + "@algolia/requester-fetch" "5.38.0" + "@algolia/requester-node-http" "5.38.0" ansi-align@^3.0.1: version "3.0.1" @@ -3334,18 +3295,18 @@ array-union@^2.1.0: integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== astring@^1.8.0: - version "1.9.0" - resolved "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz" - integrity sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg== + version "1.8.6" + resolved "https://registry.npmjs.org/astring/-/astring-1.8.6.tgz" + integrity sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== autoprefixer@^10.4.19, autoprefixer@^10.4.21: - version "10.4.22" - resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.22.tgz" - integrity sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg== + version "10.4.21" + resolved "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz" + integrity sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ== dependencies: - browserslist "^4.27.0" - caniuse-lite "^1.0.30001754" - fraction.js "^5.3.4" + browserslist "^4.24.4" + caniuse-lite "^1.0.30001702" + fraction.js "^4.3.7" normalize-range "^0.1.2" picocolors "^1.1.1" postcss-value-parser "^4.2.0" @@ -3365,29 +3326,29 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-polyfill-corejs2@^0.4.14: - version "0.4.14" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.14.tgz" - integrity sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg== +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.11" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz" + integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== dependencies: - "@babel/compat-data" "^7.27.7" - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.2" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.13.0.tgz" - integrity sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A== +babel-plugin-polyfill-corejs3@^0.10.6: + version "0.10.6" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.6.tgz" + integrity sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" - core-js-compat "^3.43.0" + "@babel/helper-define-polyfill-provider" "^0.6.2" + core-js-compat "^3.38.0" -babel-plugin-polyfill-regenerator@^0.6.5: - version "0.6.5" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.5.tgz" - integrity sha512-ISqQ2frbiNU9vIJkzg7dlPpznPZ4jOiUQ1uSmB0fEHeowtN3COYRsXr/xexn64NpU13P06jc/L5TgiJXOgrbEg== +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz" + integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.5" + "@babel/helper-define-polyfill-provider" "^0.6.2" bail@^2.0.0: version "2.0.2" @@ -3399,11 +3360,6 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -baseline-browser-mapping@^2.8.25: - version "2.8.30" - resolved "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.30.tgz" - integrity sha512-aTUKW4ptQhS64+v2d6IkPzymEzzhw+G0bA1g3uBRV3+ntkH+svttKseW5IOR4Ed6NUVKqnY7qT3dKvzQ7io4AA== - batch@0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz" @@ -3415,9 +3371,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== body-parser@1.20.3: version "1.20.3" @@ -3479,9 +3435,9 @@ boxen@^7.0.0: wrap-ansi "^8.1.0" brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + version "1.1.12" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz" + integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -3500,16 +3456,15 @@ braces@^3.0.3, braces@~3.0.2: dependencies: fill-range "^7.1.1" -browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.26.0, browserslist@^4.27.0, browserslist@^4.28.0, "browserslist@>= 4.21.0": - version "4.28.0" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz" - integrity sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ== +browserslist@^4.0.0, browserslist@^4.23.0, browserslist@^4.24.0, browserslist@^4.24.2, browserslist@^4.24.4, browserslist@^4.25.0, "browserslist@>= 4.21.0": + version "4.25.0" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.25.0.tgz" + integrity sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA== dependencies: - baseline-browser-mapping "^2.8.25" - caniuse-lite "^1.0.30001754" - electron-to-chromium "^1.5.249" - node-releases "^2.0.27" - update-browserslist-db "^1.1.4" + caniuse-lite "^1.0.30001718" + electron-to-chromium "^1.5.160" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" buffer-from@^1.0.0: version "1.1.2" @@ -3551,31 +3506,16 @@ cacheable-request@^10.2.8: normalize-url "^8.0.0" responselike "^3.0.0" -call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== +call-bind@^1.0.5, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== dependencies: + es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" - -call-bind@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz" - integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== - dependencies: - call-bind-apply-helpers "^1.0.0" - es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.2" - -call-bound@^1.0.2, call-bound@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz" - integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== - dependencies: - call-bind-apply-helpers "^1.0.2" - get-intrinsic "^1.3.0" + set-function-length "^1.2.1" callsites@^3.0.0: version "3.1.0" @@ -3610,10 +3550,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001754: - version "1.0.30001756" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz" - integrity sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001702, caniuse-lite@^1.0.30001718: + version "1.0.30001721" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001721.tgz" + integrity sha512-cOuvmUVtKrtEaoKiO0rSc29jcjwMwX5tOHDy4MgVFEWiUXj4uBMJkwI8MDySkgXidpMiHUcviogAvFi4pA2hDQ== ccount@^2.0.0: version "2.0.1" @@ -3839,7 +3779,7 @@ common-path-prefix@^3.0.0: resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== -compressible@~2.0.18: +compressible@~2.0.16: version "2.0.18" resolved "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz" integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== @@ -3847,16 +3787,16 @@ compressible@~2.0.18: mime-db ">= 1.43.0 < 2" compression@^1.7.4: - version "1.8.1" - resolved "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz" - integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== + version "1.7.4" + resolved "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== dependencies: - bytes "3.1.2" - compressible "~2.0.18" + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" debug "2.6.9" - negotiator "~0.6.4" - on-headers "~1.1.0" - safe-buffer "5.2.1" + on-headers "~1.0.2" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: @@ -3899,9 +3839,9 @@ connect-history-api-fallback@^2.0.0: integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== consola@^3.2.3: - version "3.4.2" - resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" - integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + version "3.2.3" + resolved "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== content-disposition@0.5.2: version "0.5.2" @@ -3947,17 +3887,17 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.43.0: - version "3.47.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz" - integrity sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ== +core-js-compat@^3.38.0, core-js-compat@^3.38.1: + version "3.39.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz" + integrity sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw== dependencies: - browserslist "^4.28.0" + browserslist "^4.24.2" -core-js-pure@^3.43.0: - version "3.47.0" - resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.47.0.tgz" - integrity sha512-BcxeDbzUrRnXGYIVAGFtcGQVNpFcUhVjr6W7F8XktvQW2iJP9e66GP6xdKotCRFlrxBvNIBrhwKteRXqMV86Nw== +core-js-pure@^3.30.2: + version "3.36.0" + resolved "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz" + integrity sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ== core-js@^3.31.1: version "3.36.0" @@ -4017,14 +3957,14 @@ css-blank-pseudo@^7.0.1: postcss-selector-parser "^7.0.0" css-declaration-sorter@^7.2.0: - version "7.3.0" - resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.0.tgz" - integrity sha512-LQF6N/3vkAMYF4xoHLJfG718HRJh34Z8BnNhd6bosOMIVjMlhuZK5++oZa3uYAgrI5+7x2o27gUqTR2U/KjUOQ== + version "7.2.0" + resolved "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.2.0.tgz" + integrity sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow== -css-has-pseudo@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.3.tgz" - integrity sha512-oG+vKuGyqe/xvEMoxAQrhi7uY16deJR3i7wwhBerVrGQKSqUC5GiOVxTpM9F9B9hw0J+eKeOWLH7E9gZ1Dr5rA== +css-has-pseudo@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-7.0.2.tgz" + integrity sha512-nzol/h+E0bId46Kn2dQH5VElaknX2Sr0hFuB/1EomdC7j+OISt2ZzK7EHX9DZDY53WbIVAR7FYKSO2XnSf07MQ== dependencies: "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" @@ -4073,9 +4013,9 @@ css-select@^4.1.3: nth-check "^2.0.1" css-select@^5.1.0: - version "5.2.2" - resolved "https://registry.npmjs.org/css-select/-/css-select-5.2.2.tgz" - integrity sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw== + version "5.1.0" + resolved "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== dependencies: boolbase "^1.0.0" css-what "^6.1.0" @@ -4104,10 +4044,10 @@ css-what@^6.0.1, css-what@^6.1.0: resolved "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -cssdb@^8.4.2: - version "8.4.2" - resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.4.2.tgz" - integrity sha512-PzjkRkRUS+IHDJohtxkIczlxPPZqRo0nXplsYXOMBRPjcVRjj1W4DfvRgshUYTVuUigU7ptVYkFJQ7abUB0nyg== +cssdb@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/cssdb/-/cssdb-8.3.0.tgz" + integrity sha512-c7bmItIg38DgGjSwDPZOYF/2o0QU/sSgkWOMyl8votOfgFuyiFKWPesmCGEsrGLxEA9uL540cp8LdaGEjUGsZQ== cssesc@^3.0.0: version "3.0.0" @@ -4183,10 +4123,10 @@ csso@^5.0.5: dependencies: css-tree "~2.2.0" -csstype@^3.2.2: - version "3.2.3" - resolved "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz" - integrity sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ== +csstype@^3.0.2: + version "3.1.3" + resolved "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz" + integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== cytoscape-cose-bilkent@^4.1.0: version "4.1.0" @@ -4496,7 +4436,7 @@ debounce@^1.2.1: resolved "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz" integrity sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug== -debug@^4.0.0, debug@^4.1.0, debug@^4.3.1, debug@^4.4.1, debug@4: +debug@^4.0.0, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.4.1, debug@4: version "4.4.3" resolved "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -4511,9 +4451,9 @@ debug@2.6.9: ms "2.0.0" decode-named-character-reference@^1.0.0: - version "1.2.0" - resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.2.0.tgz" - integrity sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q== + version "1.0.2" + resolved "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== dependencies: character-entities "^2.0.0" @@ -4535,14 +4475,14 @@ deepmerge@^4.3.1: integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== default-browser-id@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz" - integrity sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q== + version "5.0.0" + resolved "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== default-browser@^5.2.1: - version "5.4.0" - resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.4.0.tgz" - integrity sha512-XDuvSq38Hr1MdN47EDvYtx3U0MTqpCEn+F6ft8z2vYDzMrvQhVp0ui9oQdqW3MvK3vqUETglt1tVGgjLuJ5izg== + version "5.2.1" + resolved "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== dependencies: bundle-name "^4.1.0" default-browser-id "^5.0.0" @@ -4552,7 +4492,7 @@ defer-to-connect@^2.0.1: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== -define-data-property@^1.0.1, define-data-property@^1.1.4: +define-data-property@^1.0.1, define-data-property@^1.1.2: version "1.1.4" resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz" integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== @@ -4711,9 +4651,9 @@ domutils@^2.5.2, domutils@^2.8.0: domhandler "^4.2.0" domutils@^3.0.1: - version "3.2.2" - resolved "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz" - integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== + version "3.1.0" + resolved "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" @@ -4734,15 +4674,6 @@ dot-prop@^6.0.1: dependencies: is-obj "^2.0.0" -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - duplexer@^0.1.2: version "0.1.2" resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" @@ -4758,10 +4689,10 @@ ee-first@1.1.1: resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.5.249: - version "1.5.259" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz" - integrity sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ== +electron-to-chromium@^1.5.160: + version "1.5.165" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.165.tgz" + integrity sha512-naiMx1Z6Nb2TxPU6fiFrUrDTjyPMLdTtaOd2oLmG8zVSg2hCWGkhPyxwk+qRmZ1ytwVqUv0u7ZcDA5+ALhaUtw== emoji-regex@^8.0.0: version "8.0.0" @@ -4784,9 +4715,9 @@ emojis-list@^3.0.0: integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== emoticon@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.1.0.tgz" - integrity sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ== + version "4.0.1" + resolved "https://registry.npmjs.org/emoticon/-/emoticon-4.0.1.tgz" + integrity sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw== encodeurl@~1.0.2: version "1.0.2" @@ -4816,22 +4747,19 @@ entities@^4.2.0, entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz" - integrity sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g== - error-ex@^1.3.1: - version "1.3.4" - resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz" - integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + version "1.3.2" + resolved "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-define-property@^1.0.0, es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" es-errors@^1.3.0: version "1.3.0" @@ -4843,33 +4771,6 @@ es-module-lexer@^1.2.1: resolved "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz" integrity sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w== -es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -esast-util-from-estree@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz" - integrity sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ== - dependencies: - "@types/estree-jsx" "^1.0.0" - devlop "^1.0.0" - estree-util-visit "^2.0.0" - unist-util-position-from-estree "^2.0.0" - -esast-util-from-js@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/esast-util-from-js/-/esast-util-from-js-2.0.1.tgz" - integrity sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw== - dependencies: - "@types/estree-jsx" "^1.0.0" - acorn "^8.0.0" - esast-util-from-estree "^2.0.0" - vfile-message "^4.0.0" - escalade@^3.1.1, escalade@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz" @@ -4952,14 +4853,6 @@ estree-util-is-identifier-name@^3.0.0: resolved "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz" integrity sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg== -estree-util-scope@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/estree-util-scope/-/estree-util-scope-1.0.0.tgz" - integrity sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ== - dependencies: - "@types/estree" "^1.0.0" - devlop "^1.0.0" - estree-util-to-js@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/estree-util-to-js/-/estree-util-to-js-2.0.0.tgz" @@ -4970,9 +4863,9 @@ estree-util-to-js@^2.0.0: source-map "^0.7.0" estree-util-value-to-estree@^3.0.1: - version "3.5.0" - resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.5.0.tgz" - integrity sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ== + version "3.3.3" + resolved "https://registry.npmjs.org/estree-util-value-to-estree/-/estree-util-value-to-estree-3.3.3.tgz" + integrity sha512-Db+m1WSD4+mUO7UgMeKkAwdbfNWwIxLt48XF2oFU9emPfXkIu+k5/nlOj313v7wqtAPo0f9REhUvznFrPkG8CQ== dependencies: "@types/estree" "^1.0.0" @@ -5024,7 +4917,7 @@ events@^3.2.0: resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== -eventsource-parser@^3.0.6: +eventsource-parser@^3.0.5: version "3.0.6" resolved "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz" integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== @@ -5104,30 +4997,25 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + version "3.3.2" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.8" + micromatch "^4.0.4" fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-uri@^3.0.1: - version "3.1.0" - resolved "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz" - integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== - fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + version "1.17.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== dependencies: reusify "^1.0.4" @@ -5209,9 +5097,9 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== follow-redirects@^1.0.0: - version "1.15.11" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz" - integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== + version "1.15.6" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== form-data-encoder@^2.1.2: version "2.1.4" @@ -5228,10 +5116,10 @@ forwarded@0.2.0: resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== -fraction.js@^5.3.4: - version "5.3.4" - resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz" - integrity sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ== +fraction.js@^4.3.7: + version "4.3.7" + resolved "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz" + integrity sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew== fresh@0.5.2: version "0.5.2" @@ -5257,35 +5145,22 @@ gensync@^1.0.0-beta.2: resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz" - integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== +get-intrinsic@^1.1.3, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== dependencies: - call-bind-apply-helpers "^1.0.2" - es-define-property "^1.0.1" es-errors "^1.3.0" - es-object-atoms "^1.1.1" function-bind "^1.1.2" - get-proto "^1.0.1" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - get-stream@^6.0.0, get-stream@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" @@ -5311,9 +5186,9 @@ glob-parent@^6.0.1: is-glob "^4.0.3" glob-to-regex.js@^1.0.1: - version "1.2.0" - resolved "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz" - integrity sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ== + version "1.0.1" + resolved "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz" + integrity sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg== glob-to-regexp@^0.4.1: version "0.4.1" @@ -5327,6 +5202,11 @@ global-dirs@^3.0.0: dependencies: ini "2.0.0" +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + globals@^15.15.0: version "15.15.0" resolved "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz" @@ -5355,10 +5235,12 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -gopd@^1.0.1, gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" got@^12.1.0: version "12.6.1" @@ -5419,40 +5301,45 @@ has-flag@^4.0.0: resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== -has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.1: version "1.0.2" resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz" integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== dependencies: es-define-property "^1.0.0" -has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has-yarn@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz" integrity sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA== -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== +hasown@^2.0.0: + version "2.0.1" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== dependencies: function-bind "^1.1.2" hast-util-from-parse5@^8.0.0: - version "8.0.3" - resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz" - integrity sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg== + version "8.0.1" + resolved "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.1.tgz" + integrity sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" - hastscript "^9.0.0" - property-information "^7.0.0" + hastscript "^8.0.0" + property-information "^6.0.0" vfile "^6.0.0" vfile-location "^5.0.0" web-namespaces "^2.0.0" @@ -5465,9 +5352,9 @@ hast-util-parse-selector@^4.0.0: "@types/hast" "^3.0.0" hast-util-raw@^9.0.0: - version "9.1.0" - resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.1.0.tgz" - integrity sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw== + version "9.0.2" + resolved "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-9.0.2.tgz" + integrity sha512-PldBy71wO9Uq1kyaMch9AHIghtQvIwxBUkv823pKmkTM3oV1JxtsTNYdevMxvUHqcnOAuO65JKU2+0NOxc2ksA== dependencies: "@types/hast" "^3.0.0" "@types/unist" "^3.0.0" @@ -5484,9 +5371,9 @@ hast-util-raw@^9.0.0: zwitch "^2.0.0" hast-util-to-estree@^3.0.0: - version "3.1.3" - resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.3.tgz" - integrity sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w== + version "3.1.0" + resolved "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.0.tgz" + integrity sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw== dependencies: "@types/estree" "^1.0.0" "@types/estree-jsx" "^1.0.0" @@ -5499,16 +5386,16 @@ hast-util-to-estree@^3.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" + property-information "^6.0.0" space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" + style-to-object "^0.4.0" unist-util-position "^5.0.0" zwitch "^2.0.0" hast-util-to-jsx-runtime@^2.0.0: - version "2.3.6" - resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz" - integrity sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg== + version "2.3.0" + resolved "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.0.tgz" + integrity sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ== dependencies: "@types/estree" "^1.0.0" "@types/hast" "^3.0.0" @@ -5520,9 +5407,9 @@ hast-util-to-jsx-runtime@^2.0.0: mdast-util-mdx-expression "^2.0.0" mdast-util-mdx-jsx "^3.0.0" mdast-util-mdxjs-esm "^2.0.0" - property-information "^7.0.0" + property-information "^6.0.0" space-separated-tokens "^2.0.0" - style-to-js "^1.0.0" + style-to-object "^1.0.0" unist-util-position "^5.0.0" vfile-message "^4.0.0" @@ -5546,15 +5433,15 @@ hast-util-whitespace@^3.0.0: dependencies: "@types/hast" "^3.0.0" -hastscript@^9.0.0: - version "9.0.1" - resolved "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz" - integrity sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w== +hastscript@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/hastscript/-/hastscript-8.0.0.tgz" + integrity sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw== dependencies: "@types/hast" "^3.0.0" comma-separated-tokens "^2.0.0" hast-util-parse-selector "^4.0.0" - property-information "^7.0.0" + property-information "^6.0.0" space-separated-tokens "^2.0.0" he@^1.2.0: @@ -5695,9 +5582,9 @@ http-errors@2.0.0: toidentifier "1.0.1" http-parser-js@>=0.5.1: - version "0.5.10" - resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz" - integrity sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA== + version "0.5.8" + resolved "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== http-proxy-middleware@^2.0.9: version "2.0.9" @@ -5757,9 +5644,9 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== ignore@^5.2.0, ignore@^5.2.4: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + version "5.3.1" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== image-size@^2.0.2: version "2.0.2" @@ -5767,9 +5654,9 @@ image-size@^2.0.2: integrity sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w== import-fresh@^3.3.0: - version "3.3.1" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz" - integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" @@ -5819,10 +5706,15 @@ ini@2.0.0: resolved "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz" integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== -inline-style-parser@0.2.7: - version "0.2.7" - resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz" - integrity sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA== +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +inline-style-parser@0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.2.tgz" + integrity sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ== internmap@^1.0.0: version "1.0.1" @@ -5883,12 +5775,12 @@ is-ci@^3.0.1: dependencies: ci-info "^3.2.0" -is-core-module@^2.16.1: - version "2.16.1" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz" - integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== dependencies: - hasown "^2.0.2" + hasown "^2.0.0" is-decimal@^2.0.0: version "2.0.1" @@ -5994,6 +5886,13 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-reference@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz" + integrity sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg== + dependencies: + "@types/estree" "*" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz" @@ -6080,14 +5979,14 @@ jest-worker@^29.4.3: supports-color "^8.0.0" jiti@^1.20.0: - version "1.21.7" - resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz" - integrity sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A== + version "1.21.0" + resolved "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz" + integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== joi@^17.9.2: - version "17.13.3" - resolved "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz" - integrity sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA== + version "17.12.1" + resolved "https://registry.npmjs.org/joi/-/joi-17.12.1.tgz" + integrity sha512-vtxmq+Lsc5SlfqotnfVjlViWfOL9nt/avKNbKYizwf6gsCfq9NYY/ceYRMFD8XDdrjJ9abJyScWmhmIiy+XRtQ== dependencies: "@hapi/hoek" "^9.3.0" "@hapi/topo" "^5.1.0" @@ -6101,24 +6000,24 @@ joi@^17.9.2: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: - version "3.14.2" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz" - integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== dependencies: argparse "^1.0.7" esprima "^4.0.0" js-yaml@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz" - integrity sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA== + version "4.1.0" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== dependencies: argparse "^2.0.1" -jsesc@^3.0.2, jsesc@~3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz" - integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== +jsesc@^3.0.2, jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -6212,9 +6111,9 @@ latest-version@^7.0.0: package-json "^8.1.0" launch-editor@^2.6.1: - version "2.12.0" - resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.12.0.tgz" - integrity sha512-giOHXoOtifjdHqUamwKq6c49GzBdLjvxrd2D+Q4V6uOHopJv7p9VJxikDsQ/CBXZbEITgUqSVHXLTG3VhPP1Dg== + version "2.11.1" + resolved "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz" + integrity sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg== dependencies: picocolors "^1.1.1" shell-quote "^1.8.3" @@ -6235,9 +6134,9 @@ leven@^3.1.0: integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== + version "3.1.1" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz" + integrity sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ== lines-and-columns@^1.1.6: version "1.2.4" @@ -6350,28 +6249,22 @@ markdown-table@^2.0.0: repeat-string "^1.0.0" markdown-table@^3.0.0: - version "3.0.4" - resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz" - integrity sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw== + version "3.0.3" + resolved "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.3.tgz" + integrity sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw== marked@^16.2.1, marked@^16.3.0: - version "16.4.2" - resolved "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz" - integrity sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA== - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + version "16.3.0" + resolved "https://registry.npmjs.org/marked/-/marked-16.3.0.tgz" + integrity sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w== mdast-util-directive@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.1.0.tgz" - integrity sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q== + version "3.0.0" + resolved "https://registry.npmjs.org/mdast-util-directive/-/mdast-util-directive-3.0.0.tgz" + integrity sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" - ccount "^2.0.0" devlop "^1.0.0" mdast-util-from-markdown "^2.0.0" mdast-util-to-markdown "^2.0.0" @@ -6380,9 +6273,9 @@ mdast-util-directive@^3.0.0: unist-util-visit-parents "^6.0.0" mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.2.tgz" - integrity sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg== + version "3.0.1" + resolved "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz" + integrity sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA== dependencies: "@types/mdast" "^4.0.0" escape-string-regexp "^5.0.0" @@ -6390,9 +6283,9 @@ mdast-util-find-and-replace@^3.0.0, mdast-util-find-and-replace@^3.0.1: unist-util-visit-parents "^6.0.0" mdast-util-from-markdown@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz" - integrity sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA== + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.0.tgz" + integrity sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" @@ -6420,9 +6313,9 @@ mdast-util-frontmatter@^2.0.0: micromark-extension-frontmatter "^2.0.0" mdast-util-gfm-autolink-literal@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz" - integrity sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ== + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.0.tgz" + integrity sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg== dependencies: "@types/mdast" "^4.0.0" ccount "^2.0.0" @@ -6431,9 +6324,9 @@ mdast-util-gfm-autolink-literal@^2.0.0: micromark-util-character "^2.0.0" mdast-util-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.1.0.tgz" - integrity sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ== + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz" + integrity sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ== dependencies: "@types/mdast" "^4.0.0" devlop "^1.1.0" @@ -6472,9 +6365,9 @@ mdast-util-gfm-task-list-item@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-gfm@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.1.0.tgz" - integrity sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ== + version "3.0.0" + resolved "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz" + integrity sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw== dependencies: mdast-util-from-markdown "^2.0.0" mdast-util-gfm-autolink-literal "^2.0.0" @@ -6485,9 +6378,9 @@ mdast-util-gfm@^3.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-expression@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz" - integrity sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ== + version "2.0.0" + resolved "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.0.tgz" + integrity sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -6497,9 +6390,9 @@ mdast-util-mdx-expression@^2.0.0: mdast-util-to-markdown "^2.0.0" mdast-util-mdx-jsx@^3.0.0: - version "3.2.0" - resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz" - integrity sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q== + version "3.1.0" + resolved "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.0.tgz" + integrity sha512-A8AJHlR7/wPQ3+Jre1+1rq040fX9A4Q1jG8JxmSNp/PLPHg80A6475wxTp3KzHpApFH6yWxFotHrJQA3dXP6/w== dependencies: "@types/estree-jsx" "^1.0.0" "@types/hast" "^3.0.0" @@ -6511,6 +6404,7 @@ mdast-util-mdx-jsx@^3.0.0: mdast-util-to-markdown "^2.0.0" parse-entities "^4.0.0" stringify-entities "^4.0.0" + unist-util-remove-position "^5.0.0" unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" @@ -6546,9 +6440,9 @@ mdast-util-phrasing@^4.0.0: unist-util-is "^6.0.0" mdast-util-to-hast@^13.0.0: - version "13.2.1" - resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz" - integrity sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA== + version "13.1.0" + resolved "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.1.0.tgz" + integrity sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -6561,16 +6455,15 @@ mdast-util-to-hast@^13.0.0: vfile "^6.0.0" mdast-util-to-markdown@^2.0.0: - version "2.1.2" - resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz" - integrity sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA== + version "2.1.0" + resolved "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.0.tgz" + integrity sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ== dependencies: "@types/mdast" "^4.0.0" "@types/unist" "^3.0.0" longest-streak "^3.0.0" mdast-util-phrasing "^4.0.0" mdast-util-to-string "^4.0.0" - micromark-util-classify-character "^2.0.0" micromark-util-decode-string "^2.0.0" unist-util-visit "^5.0.0" zwitch "^2.0.0" @@ -6598,9 +6491,9 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^4.43.1: - version "4.51.0" - resolved "https://registry.npmjs.org/memfs/-/memfs-4.51.0.tgz" - integrity sha512-4zngfkVM/GpIhC8YazOsM6E8hoB33NP0BCESPOA6z7qaL6umPJNqkO8CNYaLV2FB2MV6H1O3x2luHHOSqppv+A== + version "4.46.1" + resolved "https://registry.npmjs.org/memfs/-/memfs-4.46.1.tgz" + integrity sha512-2wjHDg7IjP+ufAqqqSxjiNePFDrvWviA79ajUwG9lkHhk3HzZOLBzzoUG8cx9vCagj6VvBQD7oXuLuFz5LaAOQ== dependencies: "@jsonjoy.com/json-pack" "^1.11.0" "@jsonjoy.com/util" "^1.9.0" @@ -6656,9 +6549,9 @@ methods@~1.1.2: integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== micromark-core-commonmark@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz" - integrity sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.0.tgz" + integrity sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA== dependencies: decode-named-character-reference "^1.0.0" devlop "^1.0.0" @@ -6678,9 +6571,9 @@ micromark-core-commonmark@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-directive@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.2.tgz" - integrity sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA== + version "3.0.0" + resolved "https://registry.npmjs.org/micromark-extension-directive/-/micromark-extension-directive-3.0.0.tgz" + integrity sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -6701,9 +6594,9 @@ micromark-extension-frontmatter@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-autolink-literal@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz" - integrity sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.0.0.tgz" + integrity sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg== dependencies: micromark-util-character "^2.0.0" micromark-util-sanitize-uri "^2.0.0" @@ -6711,9 +6604,9 @@ micromark-extension-gfm-autolink-literal@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-footnote@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz" - integrity sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.0.0.tgz" + integrity sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg== dependencies: devlop "^1.0.0" micromark-core-commonmark "^2.0.0" @@ -6725,9 +6618,9 @@ micromark-extension-gfm-footnote@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-strikethrough@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz" - integrity sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.0.0.tgz" + integrity sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -6737,9 +6630,9 @@ micromark-extension-gfm-strikethrough@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-table@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.1.tgz" - integrity sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.0.0.tgz" + integrity sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -6755,9 +6648,9 @@ micromark-extension-gfm-tagfilter@^2.0.0: micromark-util-types "^2.0.0" micromark-extension-gfm-task-list-item@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz" - integrity sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw== + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.0.1.tgz" + integrity sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw== dependencies: devlop "^1.0.0" micromark-factory-space "^2.0.0" @@ -6780,9 +6673,9 @@ micromark-extension-gfm@^3.0.0: micromark-util-types "^2.0.0" micromark-extension-mdx-expression@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz" - integrity sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q== + version "3.0.0" + resolved "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz" + integrity sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ== dependencies: "@types/estree" "^1.0.0" devlop "^1.0.0" @@ -6794,17 +6687,17 @@ micromark-extension-mdx-expression@^3.0.0: micromark-util-types "^2.0.0" micromark-extension-mdx-jsx@^3.0.0: - version "3.0.2" - resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz" - integrity sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ== + version "3.0.0" + resolved "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.0.tgz" + integrity sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w== dependencies: + "@types/acorn" "^4.0.0" "@types/estree" "^1.0.0" devlop "^1.0.0" estree-util-is-identifier-name "^3.0.0" micromark-factory-mdx-expression "^2.0.0" micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" - micromark-util-events-to-acorn "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" vfile-message "^4.0.0" @@ -6846,18 +6739,18 @@ micromark-extension-mdxjs@^3.0.0: micromark-util-types "^2.0.0" micromark-factory-destination@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz" - integrity sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.0.tgz" + integrity sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-label@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz" - integrity sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.0.tgz" + integrity sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw== dependencies: devlop "^1.0.0" micromark-util-character "^2.0.0" @@ -6865,13 +6758,12 @@ micromark-factory-label@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-mdx-expression@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz" - integrity sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ== + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.1.tgz" + integrity sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg== dependencies: "@types/estree" "^1.0.0" devlop "^1.0.0" - micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" micromark-util-events-to-acorn "^2.0.0" micromark-util-symbol "^2.0.0" @@ -6888,17 +6780,17 @@ micromark-factory-space@^1.0.0: micromark-util-types "^1.0.0" micromark-factory-space@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz" - integrity sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.0.tgz" + integrity sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg== dependencies: micromark-util-character "^2.0.0" micromark-util-types "^2.0.0" micromark-factory-title@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz" - integrity sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.0.tgz" + integrity sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -6906,9 +6798,9 @@ micromark-factory-title@^2.0.0: micromark-util-types "^2.0.0" micromark-factory-whitespace@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz" - integrity sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.0.tgz" + integrity sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA== dependencies: micromark-factory-space "^2.0.0" micromark-util-character "^2.0.0" @@ -6924,48 +6816,48 @@ micromark-util-character@^1.0.0, micromark-util-character@^1.1.0: micromark-util-types "^1.0.0" micromark-util-character@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz" - integrity sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q== + version "2.1.0" + resolved "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz" + integrity sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ== dependencies: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-chunked@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz" - integrity sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.0.tgz" + integrity sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg== dependencies: micromark-util-symbol "^2.0.0" micromark-util-classify-character@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz" - integrity sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.0.tgz" + integrity sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw== dependencies: micromark-util-character "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" micromark-util-combine-extensions@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz" - integrity sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.0.tgz" + integrity sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ== dependencies: micromark-util-chunked "^2.0.0" micromark-util-types "^2.0.0" micromark-util-decode-numeric-character-reference@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz" - integrity sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw== + version "2.0.1" + resolved "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.1.tgz" + integrity sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ== dependencies: micromark-util-symbol "^2.0.0" micromark-util-decode-string@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz" - integrity sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.0.tgz" + integrity sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA== dependencies: decode-named-character-reference "^1.0.0" micromark-util-character "^2.0.0" @@ -6973,15 +6865,16 @@ micromark-util-decode-string@^2.0.0: micromark-util-symbol "^2.0.0" micromark-util-encode@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz" - integrity sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz" + integrity sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA== micromark-util-events-to-acorn@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz" - integrity sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg== + version "2.0.2" + resolved "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz" + integrity sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA== dependencies: + "@types/acorn" "^4.0.0" "@types/estree" "^1.0.0" "@types/unist" "^3.0.0" devlop "^1.0.0" @@ -6991,37 +6884,37 @@ micromark-util-events-to-acorn@^2.0.0: vfile-message "^4.0.0" micromark-util-html-tag-name@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz" - integrity sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.0.tgz" + integrity sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw== micromark-util-normalize-identifier@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz" - integrity sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.0.tgz" + integrity sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w== dependencies: micromark-util-symbol "^2.0.0" micromark-util-resolve-all@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz" - integrity sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.0.tgz" + integrity sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA== dependencies: micromark-util-types "^2.0.0" micromark-util-sanitize-uri@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz" - integrity sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz" + integrity sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw== dependencies: micromark-util-character "^2.0.0" micromark-util-encode "^2.0.0" micromark-util-symbol "^2.0.0" micromark-util-subtokenize@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz" - integrity sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.0.tgz" + integrity sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg== dependencies: devlop "^1.0.0" micromark-util-chunked "^2.0.0" @@ -7034,9 +6927,9 @@ micromark-util-symbol@^1.0.0, micromark-util-symbol@^1.0.1: integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== micromark-util-symbol@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz" - integrity sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz" + integrity sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw== micromark-util-types@^1.0.0: version "1.1.0" @@ -7044,14 +6937,14 @@ micromark-util-types@^1.0.0: integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== micromark-util-types@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz" - integrity sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA== + version "2.0.0" + resolved "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz" + integrity sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w== micromark@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz" - integrity sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA== + version "4.0.0" + resolved "https://registry.npmjs.org/micromark/-/micromark-4.0.0.tgz" + integrity sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ== dependencies: "@types/debug" "^4.0.0" debug "^4.0.0" @@ -7071,7 +6964,7 @@ micromark@^4.0.0: micromark-util-symbol "^2.0.0" micromark-util-types "^2.0.0" -micromatch@^4.0.2, micromatch@^4.0.5, micromatch@^4.0.8: +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.8" resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -7107,9 +7000,9 @@ mime-types@^2.1.27: mime-db "1.52.0" mime-types@^3.0.1: - version "3.0.2" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz" - integrity sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A== + version "3.0.1" + resolved "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz" + integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== dependencies: mime-db "^1.54.0" @@ -7155,9 +7048,9 @@ mimic-response@^4.0.0: integrity sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg== mini-css-extract-plugin@^2.9.2: - version "2.9.4" - resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz" - integrity sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ== + version "2.9.2" + resolved "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz" + integrity sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w== dependencies: schema-utils "^4.0.0" tapable "^2.2.1" @@ -7224,11 +7117,6 @@ nanoid@^3.3.11: resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz" integrity sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w== -negotiator@~0.6.4: - version "0.6.4" - resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz" - integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== - negotiator@0.6.3: version "0.6.3" resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" @@ -7248,9 +7136,9 @@ no-case@^3.0.4: tslib "^2.0.3" node-emoji@^2.1.0: - version "2.2.0" - resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz" - integrity sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw== + version "2.1.3" + resolved "https://registry.npmjs.org/node-emoji/-/node-emoji-2.1.3.tgz" + integrity sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA== dependencies: "@sindresorhus/is" "^4.6.0" char-regex "^1.0.2" @@ -7258,14 +7146,14 @@ node-emoji@^2.1.0: skin-tone "^2.0.0" node-forge@^1: - version "1.3.2" - resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.2.tgz" - integrity sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw== + version "1.3.1" + resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.27: - version "2.0.27" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz" - integrity sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" @@ -7314,10 +7202,10 @@ object-assign@^4.1.1: resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.13.3: - version "1.13.4" - resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz" - integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== object-keys@^1.1.1: version "1.1.1" @@ -7325,15 +7213,13 @@ object-keys@^1.1.1: integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object.assign@^4.1.0: - version "4.1.7" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz" - integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + version "4.1.5" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== dependencies: - call-bind "^1.0.8" - call-bound "^1.0.3" + call-bind "^1.0.5" define-properties "^1.2.1" - es-object-atoms "^1.0.0" - has-symbols "^1.1.0" + has-symbols "^1.0.3" object-keys "^1.1.1" obuf@^1.0.0, obuf@^1.1.2: @@ -7348,10 +7234,10 @@ on-finished@^2.4.1, on-finished@2.4.1: dependencies: ee-first "1.1.1" -on-headers@~1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz" - integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== onetime@^5.1.2: version "5.1.2" @@ -7470,11 +7356,12 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-entities@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz" - integrity sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw== + version "4.0.1" + resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz" + integrity sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w== dependencies: "@types/unist" "^2.0.0" + character-entities "^2.0.0" character-entities-legacy "^3.0.0" character-reference-invalid "^2.0.0" decode-named-character-reference "^1.0.0" @@ -7498,19 +7385,19 @@ parse-numeric-range@^1.3.0: integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz" - integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== + version "7.0.0" + resolved "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== dependencies: - domhandler "^5.0.3" + domhandler "^5.0.2" parse5 "^7.0.0" parse5@^7.0.0: - version "7.3.0" - resolved "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz" - integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + version "7.1.2" + resolved "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== dependencies: - entities "^6.0.0" + entities "^4.4.0" parseurl@~1.3.2, parseurl@~1.3.3: version "1.3.3" @@ -7577,6 +7464,15 @@ pathe@^2.0.1, pathe@^2.0.3: resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== +periscopic@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz" + integrity sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^3.0.0" + is-reference "^3.0.0" + picocolors@^1.0.0, picocolors@^1.1.1: version "1.1.1" resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" @@ -7647,15 +7543,15 @@ postcss-clamp@^4.1.0: dependencies: postcss-value-parser "^4.2.0" -postcss-color-functional-notation@^7.0.12: - version "7.0.12" - resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.12.tgz" - integrity sha512-TLCW9fN5kvO/u38/uesdpbx3e8AkTYhMvDZYa9JpmImWuTE99bDQ7GU7hdOADIZsiI9/zuxfAJxny/khknp1Zw== +postcss-color-functional-notation@^7.0.10: + version "7.0.10" + resolved "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-7.0.10.tgz" + integrity sha512-k9qX+aXHBiLTRrWoCJuUFI6F1iF6QJQUXNVWJVSbqZgj57jDhBlOvD8gNUGl35tgqDivbGLhZeW3Ongz4feuKA== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" postcss-color-hex-alpha@^10.0.0: @@ -7757,12 +7653,12 @@ postcss-discard-unused@^6.0.5: dependencies: postcss-selector-parser "^6.0.16" -postcss-double-position-gradients@^6.0.4: - version "6.0.4" - resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.4.tgz" - integrity sha512-m6IKmxo7FxSP5nF2l63QbCC3r+bWpFUWmZXZf096WxG0m7Vl1Q1+ruFOhpdDRmKrRS+S3Jtk+TVk/7z0+BVK6g== +postcss-double-position-gradients@^6.0.2: + version "6.0.2" + resolved "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-6.0.2.tgz" + integrity sha512-7qTqnL7nfLRyJK/AHSVrrXOuvDDzettC+wGoienURV8v2svNbu6zJC52ruZtHaO6mfcagFmuTGFdzRsJKB3k5Q== dependencies: - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" @@ -7798,15 +7694,15 @@ postcss-image-set-function@^7.0.0: "@csstools/utilities" "^2.0.0" postcss-value-parser "^4.2.0" -postcss-lab-function@^7.0.12: - version "7.0.12" - resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.12.tgz" - integrity sha512-tUcyRk1ZTPec3OuKFsqtRzW2Go5lehW29XA21lZ65XmzQkz43VY2tyWEC202F7W3mILOjw0voOiuxRGTsN+J9w== +postcss-lab-function@^7.0.10: + version "7.0.10" + resolved "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-7.0.10.tgz" + integrity sha512-tqs6TCEv9tC1Riq6fOzHuHcZyhg4k3gIAMB8GGY/zA1ssGdm6puHMVE7t75aOSoFg7UD2wyrFFhbldiCMyyFTQ== dependencies: - "@csstools/css-color-parser" "^3.1.0" + "@csstools/css-color-parser" "^3.0.10" "@csstools/css-parser-algorithms" "^3.0.5" "@csstools/css-tokenizer" "^3.0.4" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/utilities" "^2.0.0" postcss-loader@^7.3.4: @@ -7911,12 +7807,12 @@ postcss-modules-values@^4.0.0: dependencies: icss-utils "^5.0.0" -postcss-nesting@^13.0.2: - version "13.0.2" - resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.2.tgz" - integrity sha512-1YCI290TX+VP0U/K/aFxzHzQWHWURL+CtHMSbex1lCdpXD1SoR2sYuxDu5aNI9lPoXpKTCggFZiDJbwylU0LEQ== +postcss-nesting@^13.0.1: + version "13.0.1" + resolved "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-13.0.1.tgz" + integrity sha512-VbqqHkOBOt4Uu3G8Dm8n6lU5+9cJFxiuty9+4rcoyRPO9zZS1JIs6td49VIoix3qYqELHlJIn46Oih9SAKo+yQ== dependencies: - "@csstools/selector-resolve-nested" "^3.1.0" + "@csstools/selector-resolve-nested" "^3.0.0" "@csstools/selector-specificity" "^5.0.0" postcss-selector-parser "^7.0.0" @@ -8015,27 +7911,24 @@ postcss-place@^10.0.0: postcss-value-parser "^4.2.0" postcss-preset-env@^10.2.1: - version "10.4.0" - resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.4.0.tgz" - integrity sha512-2kqpOthQ6JhxqQq1FSAAZGe9COQv75Aw8WbsOvQVNJ2nSevc9Yx/IKZGuZ7XJ+iOTtVon7LfO7ELRzg8AZ+sdw== - dependencies: - "@csstools/postcss-alpha-function" "^1.0.1" - "@csstools/postcss-cascade-layers" "^5.0.2" - "@csstools/postcss-color-function" "^4.0.12" - "@csstools/postcss-color-function-display-p3-linear" "^1.0.1" - "@csstools/postcss-color-mix-function" "^3.0.12" - "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.2" - "@csstools/postcss-content-alt-text" "^2.0.8" - "@csstools/postcss-contrast-color-function" "^2.0.12" + version "10.2.1" + resolved "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-10.2.1.tgz" + integrity sha512-mDInnlm4mYhmR0S79hNLzseW9nx4Ihd8s15K99iu6u6QhoSQgqWX9Oj6nTd/8Dz3b0T7v2JSrfnXsDfv9TFvDg== + dependencies: + "@csstools/postcss-cascade-layers" "^5.0.1" + "@csstools/postcss-color-function" "^4.0.10" + "@csstools/postcss-color-mix-function" "^3.0.10" + "@csstools/postcss-color-mix-variadic-function-arguments" "^1.0.0" + "@csstools/postcss-content-alt-text" "^2.0.6" "@csstools/postcss-exponential-functions" "^2.0.9" "@csstools/postcss-font-format-keywords" "^4.0.0" - "@csstools/postcss-gamut-mapping" "^2.0.11" - "@csstools/postcss-gradients-interpolation-method" "^5.0.12" - "@csstools/postcss-hwb-function" "^4.0.12" - "@csstools/postcss-ic-unit" "^4.0.4" + "@csstools/postcss-gamut-mapping" "^2.0.10" + "@csstools/postcss-gradients-interpolation-method" "^5.0.10" + "@csstools/postcss-hwb-function" "^4.0.10" + "@csstools/postcss-ic-unit" "^4.0.2" "@csstools/postcss-initial" "^2.0.1" - "@csstools/postcss-is-pseudo-class" "^5.0.3" - "@csstools/postcss-light-dark-function" "^2.0.11" + "@csstools/postcss-is-pseudo-class" "^5.0.1" + "@csstools/postcss-light-dark-function" "^2.0.9" "@csstools/postcss-logical-float-and-clear" "^3.0.0" "@csstools/postcss-logical-overflow" "^2.0.0" "@csstools/postcss-logical-overscroll-behavior" "^2.0.0" @@ -8045,40 +7938,40 @@ postcss-preset-env@^10.2.1: "@csstools/postcss-media-queries-aspect-ratio-number-values" "^3.0.5" "@csstools/postcss-nested-calc" "^4.0.0" "@csstools/postcss-normalize-display-values" "^4.0.0" - "@csstools/postcss-oklab-function" "^4.0.12" - "@csstools/postcss-progressive-custom-properties" "^4.2.1" + "@csstools/postcss-oklab-function" "^4.0.10" + "@csstools/postcss-progressive-custom-properties" "^4.1.0" "@csstools/postcss-random-function" "^2.0.1" - "@csstools/postcss-relative-color-syntax" "^3.0.12" + "@csstools/postcss-relative-color-syntax" "^3.0.10" "@csstools/postcss-scope-pseudo-class" "^4.0.1" "@csstools/postcss-sign-functions" "^1.1.4" "@csstools/postcss-stepped-value-functions" "^4.0.9" - "@csstools/postcss-text-decoration-shorthand" "^4.0.3" + "@csstools/postcss-text-decoration-shorthand" "^4.0.2" "@csstools/postcss-trigonometric-functions" "^4.0.9" "@csstools/postcss-unset-value" "^4.0.0" autoprefixer "^10.4.21" - browserslist "^4.26.0" + browserslist "^4.25.0" css-blank-pseudo "^7.0.1" - css-has-pseudo "^7.0.3" + css-has-pseudo "^7.0.2" css-prefers-color-scheme "^10.0.0" - cssdb "^8.4.2" + cssdb "^8.3.0" postcss-attribute-case-insensitive "^7.0.1" postcss-clamp "^4.1.0" - postcss-color-functional-notation "^7.0.12" + postcss-color-functional-notation "^7.0.10" postcss-color-hex-alpha "^10.0.0" postcss-color-rebeccapurple "^10.0.0" postcss-custom-media "^11.0.6" postcss-custom-properties "^14.0.6" postcss-custom-selectors "^8.0.5" postcss-dir-pseudo-class "^9.0.1" - postcss-double-position-gradients "^6.0.4" + postcss-double-position-gradients "^6.0.2" postcss-focus-visible "^10.0.1" postcss-focus-within "^9.0.1" postcss-font-variant "^5.0.0" postcss-gap-properties "^6.0.0" postcss-image-set-function "^7.0.0" - postcss-lab-function "^7.0.12" + postcss-lab-function "^7.0.10" postcss-logical "^8.1.0" - postcss-nesting "^13.0.2" + postcss-nesting "^13.0.1" postcss-opacity-percentage "^3.0.0" postcss-overflow-shorthand "^6.0.0" postcss-page-break "^3.0.4" @@ -8129,17 +8022,17 @@ postcss-selector-not@^8.0.1: postcss-selector-parser "^7.0.0" postcss-selector-parser@^6.0.11, postcss-selector-parser@^6.0.16: - version "6.1.2" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz" - integrity sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg== + version "6.0.16" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz" + integrity sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-selector-parser@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz" - integrity sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA== + version "7.0.0" + resolved "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.0.0.tgz" + integrity sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" @@ -8177,9 +8070,9 @@ postcss-zindex@^6.0.2: integrity sha512-5BxW9l1evPB/4ZIc+2GobEBoKC+h8gPGCMi+jxsYvd2x0mjq7wazk6DrP71pStqxE9Foxh5TVnonbWpFZzXaYg== "postcss@^7.0.0 || ^8.0.1", postcss@^8, postcss@^8.0.3, postcss@^8.0.9, postcss@^8.1.0, postcss@^8.2.2, postcss@^8.4, postcss@^8.4.21, postcss@^8.4.23, postcss@^8.4.24, postcss@^8.4.31, postcss@^8.4.33, postcss@^8.4.6, postcss@^8.5.4: - version "8.5.6" - resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz" - integrity sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg== + version "8.5.4" + resolved "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz" + integrity sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w== dependencies: nanoid "^3.3.11" picocolors "^1.1.1" @@ -8234,14 +8127,9 @@ prop-types@^15.6.2, prop-types@^15.7.2: react-is "^16.13.1" property-information@^6.0.0: - version "6.5.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz" - integrity sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig== - -property-information@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz" - integrity sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ== + version "6.4.1" + resolved "https://registry.npmjs.org/property-information/-/property-information-6.4.1.tgz" + integrity sha512-OHYtXfu5aI2sS2LWFSN5rgJjrQ4pCy8i1jubJLe2QvMF8JJ++HXTUIVWFLfXJoaOfvYYjk2SN8J2wFUWIGXT4w== proto-list@~1.2.1: version "1.2.4" @@ -8333,9 +8221,9 @@ rc@1.2.8: strip-json-comments "~2.0.1" react-dom@*, "react-dom@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom@^18.0.0 || ^19.0.0", react-dom@^19.0.0, "react-dom@>= 16.8.0 < 20.0.0": - version "19.2.3" - resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz" - integrity sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg== + version "19.2.0" + resolved "https://registry.npmjs.org/react-dom/-/react-dom-19.2.0.tgz" + integrity sha512-UlbRu4cAiGaIewkPyiRGJk0imDN2T3JjieT6spoL2UeSf5od4n5LB/mQ4ejmxhCFT1tYe8IvaFulzynWovsEFQ== dependencies: scheduler "^0.27.0" @@ -8361,9 +8249,9 @@ react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== react-json-view-lite@^2.3.0: - version "2.5.0" - resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.5.0.tgz" - integrity sha512-tk7o7QG9oYyELWHL8xiMQ8x4WzjCzbWNyig3uexmkLb54r8jO0yH3WCWx8UZS0c49eSA4QUmG5caiRJ8fAn58g== + version "2.4.1" + resolved "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz" + integrity sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA== react-loadable-ssr-addon-v5-slorber@^1.0.1: version "1.0.1" @@ -8414,10 +8302,10 @@ react-router@^5.3.4, react-router@>=5, react-router@5.3.4: tiny-invariant "^1.0.2" tiny-warning "^1.0.0" -react@*, "react@^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18 || ^19 || ^19.0.0-rc", "react@^18.0.0 || ^19.0.0", react@^19.2.0, react@^19.2.3, "react@>= 16.8.0 < 20.0.0", react@>=15, react@>=16, react@>=16.0.0: - version "19.2.3" - resolved "https://registry.npmjs.org/react/-/react-19.2.3.tgz" - integrity sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA== +react@*, "react@^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react@^18 || ^19 || ^19.0.0-rc", "react@^18.0.0 || ^19.0.0", react@^19.2.0, "react@>= 16.8.0 < 20.0.0", react@>=15, react@>=16, react@>=16.0.0: + version "19.2.0" + resolved "https://registry.npmjs.org/react/-/react-19.2.0.tgz" + integrity sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ== readable-stream@^2.0.1: version "2.3.8" @@ -8448,50 +8336,10 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -recma-build-jsx@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz" - integrity sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew== - dependencies: - "@types/estree" "^1.0.0" - estree-util-build-jsx "^3.0.0" - vfile "^6.0.0" - -recma-jsx@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz" - integrity sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w== - dependencies: - acorn-jsx "^5.0.0" - estree-util-to-js "^2.0.0" - recma-parse "^1.0.0" - recma-stringify "^1.0.0" - unified "^11.0.0" - -recma-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-parse/-/recma-parse-1.0.0.tgz" - integrity sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ== - dependencies: - "@types/estree" "^1.0.0" - esast-util-from-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -recma-stringify@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz" - integrity sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g== - dependencies: - "@types/estree" "^1.0.0" - estree-util-to-js "^2.0.0" - unified "^11.0.0" - vfile "^6.0.0" - -regenerate-unicode-properties@^10.2.2: - version "10.2.2" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.2.tgz" - integrity sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g== +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -8505,17 +8353,24 @@ regenerator-runtime@^0.14.0: resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz" integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== -regexpu-core@^6.3.1: - version "6.4.0" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz" - integrity sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^6.1.1: + version "6.1.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz" + integrity sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw== dependencies: regenerate "^1.4.2" - regenerate-unicode-properties "^10.2.2" + regenerate-unicode-properties "^10.2.0" regjsgen "^0.8.0" - regjsparser "^0.13.0" + regjsparser "^0.11.0" unicode-match-property-ecmascript "^2.0.0" - unicode-match-property-value-ecmascript "^2.2.1" + unicode-match-property-value-ecmascript "^2.1.0" registry-auth-token@^5.0.1: version "5.0.2" @@ -8536,12 +8391,12 @@ regjsgen@^0.8.0: resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz" integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== -regjsparser@^0.13.0: - version "0.13.0" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz" - integrity sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q== +regjsparser@^0.11.0: + version "0.11.2" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.2.tgz" + integrity sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA== dependencies: - jsesc "~3.1.0" + jsesc "~3.0.2" rehype-raw@^7.0.0: version "7.0.0" @@ -8552,24 +8407,15 @@ rehype-raw@^7.0.0: hast-util-raw "^9.0.0" vfile "^6.0.0" -rehype-recma@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz" - integrity sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw== - dependencies: - "@types/estree" "^1.0.0" - "@types/hast" "^3.0.0" - hast-util-to-estree "^3.0.0" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== remark-directive@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.1.tgz" - integrity sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A== + version "3.0.0" + resolved "https://registry.npmjs.org/remark-directive/-/remark-directive-3.0.0.tgz" + integrity sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA== dependencies: "@types/mdast" "^4.0.0" mdast-util-directive "^3.0.0" @@ -8598,9 +8444,9 @@ remark-frontmatter@^5.0.0: unified "^11.0.0" remark-gfm@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.1.tgz" - integrity sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg== + version "4.0.0" + resolved "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz" + integrity sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA== dependencies: "@types/mdast" "^4.0.0" mdast-util-gfm "^3.0.0" @@ -8610,9 +8456,9 @@ remark-gfm@^4.0.0: unified "^11.0.0" remark-mdx@^3.0.0: - version "3.1.1" - resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz" - integrity sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg== + version "3.0.1" + resolved "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.0.1.tgz" + integrity sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA== dependencies: mdast-util-mdx "^3.0.0" micromark-extension-mdxjs "^3.0.0" @@ -8628,9 +8474,9 @@ remark-parse@^11.0.0: unified "^11.0.0" remark-rehype@^11.0.0: - version "11.1.2" - resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz" - integrity sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw== + version "11.1.0" + resolved "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.0.tgz" + integrity sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g== dependencies: "@types/hast" "^3.0.0" "@types/mdast" "^4.0.0" @@ -8693,12 +8539,12 @@ resolve-pathname@^3.0.0: resolved "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz" integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== -resolve@^1.22.10: - version "1.22.11" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz" - integrity sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ== +resolve@^1.14.2: + version "1.22.8" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== dependencies: - is-core-module "^2.16.1" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -8715,9 +8561,9 @@ retry@^0.13.1: integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== robust-predicates@^3.0.2: version "3.0.2" @@ -8735,9 +8581,9 @@ roughjs@^4.6.6: points-on-path "^0.2.1" rtlcss@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz" - integrity sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig== + version "4.1.1" + resolved "https://registry.npmjs.org/rtlcss/-/rtlcss-4.1.1.tgz" + integrity sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -8771,15 +8617,20 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-buffer@5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sax@^1.2.4: - version "1.4.3" - resolved "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz" - integrity sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ== + version "1.3.0" + resolved "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz" + integrity sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA== scheduler@^0.27.0: version "0.27.0" @@ -8819,9 +8670,9 @@ schema-utils@^3.2.0: ajv-keywords "^3.5.2" schema-utils@^4.0.0, schema-utils@^4.0.1, schema-utils@^4.2.0: - version "4.3.3" - resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz" - integrity sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA== + version "4.2.0" + resolved "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" ajv "^8.9.0" @@ -8935,17 +8786,17 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" -set-function-length@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz" - integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== dependencies: - define-data-property "^1.1.4" + define-data-property "^1.1.2" es-errors "^1.3.0" function-bind "^1.1.2" - get-intrinsic "^1.2.4" + get-intrinsic "^1.2.3" gopd "^1.0.1" - has-property-descriptors "^1.0.2" + has-property-descriptors "^1.0.1" setprototypeof@1.1.0: version "1.1.0" @@ -8986,45 +8837,15 @@ shell-quote@^1.8.3: resolved "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz" integrity sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw== -side-channel-list@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz" - integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== - dependencies: - es-errors "^1.3.0" - object-inspect "^1.13.3" - -side-channel-map@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz" - integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - -side-channel-weakmap@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz" - integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== - dependencies: - call-bound "^1.0.2" - es-errors "^1.3.0" - get-intrinsic "^1.2.5" - object-inspect "^1.13.3" - side-channel-map "^1.0.1" - side-channel@^1.0.6: - version "1.1.0" - resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz" - integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + version "1.0.6" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== dependencies: + call-bind "^1.0.7" es-errors "^1.3.0" - object-inspect "^1.13.3" - side-channel-list "^1.0.0" - side-channel-map "^1.0.1" - side-channel-weakmap "^1.0.2" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.7" @@ -9046,9 +8867,9 @@ sisteransi@^1.0.5: integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== sitemap@^7.1.1: - version "7.1.2" - resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.2.tgz" - integrity sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw== + version "7.1.1" + resolved "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== dependencies: "@types/node" "^17.0.5" "@types/sax" "^1.2.1" @@ -9113,9 +8934,9 @@ source-map@^0.6.0: integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== source-map@^0.7.0: - version "0.7.6" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz" - integrity sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ== + version "0.7.4" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== source-map@~0.6.0: version "0.6.1" @@ -9171,9 +8992,9 @@ statuses@2.0.1: integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== std-env@^3.7.0: - version "3.10.0" - resolved "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz" - integrity sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg== + version "3.7.0" + resolved "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== string_decoder@^1.1.1: version "1.3.0" @@ -9217,9 +9038,9 @@ string-width@^5.0.1, string-width@^5.1.2: strip-ansi "^7.0.1" stringify-entities@^4.0.0: - version "4.0.4" - resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz" - integrity sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg== + version "4.0.3" + resolved "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.3.tgz" + integrity sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g== dependencies: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" @@ -9267,19 +9088,19 @@ strip-json-comments@~2.0.1: resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== -style-to-js@^1.0.0: - version "1.1.21" - resolved "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz" - integrity sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ== +style-to-object@^0.4.0: + version "0.4.4" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-0.4.4.tgz" + integrity sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== dependencies: - style-to-object "1.0.14" + inline-style-parser "0.1.1" -style-to-object@1.0.14: - version "1.0.14" - resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz" - integrity sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw== +style-to-object@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.5.tgz" + integrity sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ== dependencies: - inline-style-parser "0.2.7" + inline-style-parser "0.2.2" stylehacks@^6.1.1: version "6.1.1" @@ -9319,9 +9140,9 @@ svg-parser@^2.0.4: integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== svgo@^3.0.2, svgo@^3.2.0: - version "3.3.2" - resolved "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz" - integrity sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw== + version "3.2.0" + resolved "https://registry.npmjs.org/svgo/-/svgo-3.2.0.tgz" + integrity sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ== dependencies: "@trysound/sax" "0.2.0" commander "^7.2.0" @@ -9417,7 +9238,7 @@ totalist@^3.0.0: resolved "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz" integrity sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ== -tree-dump@^1.0.3, tree-dump@^1.1.0: +tree-dump@^1.0.3: version "1.1.0" resolved "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz" integrity sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA== @@ -9488,9 +9309,9 @@ undici-types@~5.26.4: integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz" - integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + version "2.0.0" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== unicode-emoji-modifier-base@^1.0.0: version "1.0.0" @@ -9505,20 +9326,20 @@ unicode-match-property-ecmascript@^2.0.0: unicode-canonical-property-names-ecmascript "^2.0.0" unicode-property-aliases-ecmascript "^2.0.0" -unicode-match-property-value-ecmascript@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.1.tgz" - integrity sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg== +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== unicode-property-aliases-ecmascript@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.2.0.tgz" - integrity sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ== + version "2.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== unified@^11.0.0, unified@^11.0.3, unified@^11.0.4: - version "11.0.5" - resolved "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz" - integrity sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA== + version "11.0.4" + resolved "https://registry.npmjs.org/unified/-/unified-11.0.4.tgz" + integrity sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ== dependencies: "@types/unist" "^3.0.0" bail "^2.0.0" @@ -9536,9 +9357,9 @@ unique-string@^3.0.0: crypto-random-string "^4.0.0" unist-util-is@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz" - integrity sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g== + version "6.0.0" + resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz" + integrity sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw== dependencies: "@types/unist" "^3.0.0" @@ -9556,6 +9377,14 @@ unist-util-position@^5.0.0: dependencies: "@types/unist" "^3.0.0" +unist-util-remove-position@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz" + integrity sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q== + dependencies: + "@types/unist" "^3.0.0" + unist-util-visit "^5.0.0" + unist-util-stringify-position@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz" @@ -9564,9 +9393,9 @@ unist-util-stringify-position@^4.0.0: "@types/unist" "^3.0.0" unist-util-visit-parents@^6.0.0: - version "6.0.2" - resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz" - integrity sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ== + version "6.0.1" + resolved "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz" + integrity sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw== dependencies: "@types/unist" "^3.0.0" unist-util-is "^6.0.0" @@ -9590,10 +9419,10 @@ unpipe@~1.0.0, unpipe@1.0.0: resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz" - integrity sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A== +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: escalade "^3.2.0" picocolors "^1.1.1" @@ -9635,9 +9464,9 @@ url-loader@^4.1.1: schema-utils "^3.0.0" use-sync-external-store@^1.4.0: - version "1.6.0" - resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz" - integrity sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w== + version "1.5.0" + resolved "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz" + integrity sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A== util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" @@ -9680,27 +9509,28 @@ vary@~1.1.2: integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== vfile-location@^5.0.0: - version "5.0.3" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz" - integrity sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg== + version "5.0.2" + resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.2.tgz" + integrity sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg== dependencies: "@types/unist" "^3.0.0" vfile "^6.0.0" vfile-message@^4.0.0: - version "4.0.3" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz" - integrity sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw== + version "4.0.2" + resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz" + integrity sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw== dependencies: "@types/unist" "^3.0.0" unist-util-stringify-position "^4.0.0" vfile@^6.0.0, vfile@^6.0.1: - version "6.0.3" - resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz" - integrity sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q== + version "6.0.1" + resolved "https://registry.npmjs.org/vfile/-/vfile-6.0.1.tgz" + integrity sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw== dependencies: "@types/unist" "^3.0.0" + unist-util-stringify-position "^4.0.0" vfile-message "^4.0.0" vscode-jsonrpc@8.2.0: @@ -9989,19 +9819,19 @@ yallist@^4.0.0: integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yaml@^2.8.1: - version "2.8.1" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz" - integrity sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw== + version "2.8.2" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz" + integrity sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A== yocto-queue@^1.0.0: - version "1.2.2" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz" - integrity sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ== + version "1.0.0" + resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== -"zod@^3.25.76 || ^4.1.8", zod@^4.1.8: - version "4.1.12" - resolved "https://registry.npmjs.org/zod/-/zod-4.1.12.tgz" - integrity sha512-JInaHOamG8pt5+Ey8kGmdcAcg3OL9reK8ltczgHTAwNhMys/6ThXHityHxVV2p3fkw/c+MAvBHFVYHFZDmjMCQ== +"zod@^3.25.76 || ^4", zod@^4.1.8: + version "4.1.11" + resolved "https://registry.npmjs.org/zod/-/zod-4.1.11.tgz" + integrity sha512-WPsqwxITS2tzx1bzhIKsEs19ABD5vmCVa4xBo2tq/SrV4RNZtfws1EnCWQXM6yh8bD08a1idvkB5MZSBiZsjwg== zwitch@^2.0.0: version "2.0.4" diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/Program.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/Program.cs new file mode 100644 index 0000000000..17ce53228e --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/Program.cs @@ -0,0 +1,63 @@ +var builder = WebApplication.CreateBuilder(args); + +// Register services that can be replaced in tests +builder.Services.AddSingleton(); +builder.Services.AddSingleton(); + +var app = builder.Build(); + +// Basic ping endpoint +app.MapGet("/ping", () => "pong"); + +// Greeting endpoint using injected service +app.MapGet("/greet/{name}", (string name, IGreetingService greetingService) => + greetingService.GetGreeting(name)); + +// Time endpoint using injected service +app.MapGet("/time", (ITimeService timeService) => + new { CurrentTime = timeService.GetCurrentTime() }); + +// Configuration endpoint for testing config overrides +app.MapGet("/config/message", (IConfiguration config) => + config["TestMessage"] ?? "default message"); + +// Echo endpoint for testing request/response capture +app.MapPost("/echo", async (HttpRequest request) => +{ + using var reader = new StreamReader(request.Body); + var body = await reader.ReadToEndAsync(); + return Results.Ok(new { Echo = body, Received = DateTime.UtcNow }); +}); + +// Status endpoint that returns headers for testing +app.MapGet("/status", (HttpContext context) => +{ + context.Response.Headers.Append("X-Custom-Header", "test-value"); + return Results.Ok(new { Status = "healthy" }); +}); + +app.Run(); + +// Service interfaces and implementations +public interface IGreetingService +{ + string GetGreeting(string name); +} + +public class DefaultGreetingService : IGreetingService +{ + public string GetGreeting(string name) => $"Hello, {name}!"; +} + +public interface ITimeService +{ + DateTime GetCurrentTime(); +} + +public class SystemTimeService : ITimeService +{ + public DateTime GetCurrentTime() => DateTime.UtcNow; +} + +// Required for WebApplicationFactory +public partial class Program; diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/TUnit.AspNetCore.NugetTester.WebApp.csproj b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/TUnit.AspNetCore.NugetTester.WebApp.csproj new file mode 100644 index 0000000000..ff70c90a2d --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.WebApp/TUnit.AspNetCore.NugetTester.WebApp.csproj @@ -0,0 +1,10 @@ + + + + net8.0;net9.0;net10.0 + enable + enable + false + + + diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.sln b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.sln new file mode 100644 index 0000000000..2e8965641f --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.sln @@ -0,0 +1,48 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.NugetTester.WebApp", "TUnit.AspNetCore.NugetTester.WebApp\TUnit.AspNetCore.NugetTester.WebApp.csproj", "{72905889-262E-4555-A47B-F3C2E8768BA0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TUnit.AspNetCore.NugetTester", "TUnit.AspNetCore.NugetTester\TUnit.AspNetCore.NugetTester.csproj", "{D9FA8977-E954-436E-81C8-38DCE64B1A7D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|x64.ActiveCfg = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|x64.Build.0 = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|x86.ActiveCfg = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Debug|x86.Build.0 = Debug|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|Any CPU.Build.0 = Release|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|x64.ActiveCfg = Release|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|x64.Build.0 = Release|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|x86.ActiveCfg = Release|Any CPU + {72905889-262E-4555-A47B-F3C2E8768BA0}.Release|x86.Build.0 = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|x64.ActiveCfg = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|x64.Build.0 = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|x86.ActiveCfg = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Debug|x86.Build.0 = Debug|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|Any CPU.Build.0 = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|x64.ActiveCfg = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|x64.Build.0 = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|x86.ActiveCfg = Release|Any CPU + {D9FA8977-E954-436E-81C8-38DCE64B1A7D}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/GlobalUsings.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/GlobalUsings.cs new file mode 100644 index 0000000000..4ee3a4af7b --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/GlobalUsings.cs @@ -0,0 +1,6 @@ +global using System.Collections.Concurrent; +global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.Logging; +global using Microsoft.Extensions.Configuration; +global using TUnit.Core; +global using TUnit.AspNetCore.Extensions; diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HooksAndLifecycleTests.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HooksAndLifecycleTests.cs new file mode 100644 index 0000000000..69d24dd51a --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HooksAndLifecycleTests.cs @@ -0,0 +1,131 @@ +namespace TUnit.AspNetCore.NugetTester; + +/// +/// Tests verifying that TUnit hooks and WebApplicationTest lifecycle work correctly together. +/// These tests prove that source generation and hooks function properly when TUnit.AspNetCore +/// is consumed as a NuGet package. +/// +public class HooksAndLifecycleTests : TestsBase +{ + private bool _beforeTestHookRan; + private bool _setupAsyncRan; + private string? _isolatedName; + + protected override async Task SetupAsync() + { + _setupAsyncRan = true; + _isolatedName = GetIsolatedName("test-resource"); + await Task.CompletedTask; + } + + [Before(HookType.Test)] + public void BeforeTestHook() + { + _beforeTestHookRan = true; + Console.WriteLine($"[BeforeTest] Starting test: {TestContext.Current?.Metadata?.DisplayName}"); + } + + [After(HookType.Test)] + public void AfterTestHook() + { + // This hook runs after each test, proving After hooks work with WebApplicationTest + Console.WriteLine($"[AfterTest] Finished test: {TestContext.Current?.Metadata?.DisplayName}"); + } + + [Test] + public async Task Factory_IsNotNull_WhenTestRuns() + { + // Verifies that the Factory is properly initialized before test execution + await Assert.That(Factory).IsNotNull(); + } + + [Test] + public async Task Factory_CreateClient_Works() + { + // Verifies that we can create an HttpClient from the factory + var client = Factory.CreateClient(); + await Assert.That(client).IsNotNull(); + } + + [Test] + public async Task Services_AreAccessible_FromFactory() + { + // Verifies that Services property exposes the service provider + await Assert.That(Services).IsNotNull(); + + var greetingService = Services.GetService(); + await Assert.That(greetingService).IsNotNull(); + } + + [Test] + public async Task GlobalFactory_IsShared_AcrossTests() + { + // Verifies that GlobalFactory is accessible + await Assert.That(GlobalFactory).IsNotNull(); + } + + [Test] + public async Task SetupAsync_RanBeforeTest() + { + // Verifies that SetupAsync was called before the test + await Assert.That(_setupAsyncRan).IsTrue(); + } + + [Test] + public async Task BeforeTestHook_RanBeforeTest() + { + // Verifies that the [Before(Test)] hook ran before this test + await Assert.That(_beforeTestHookRan).IsTrue(); + } + + [Test] + public async Task GetIsolatedName_ReturnsUniqueValue() + { + // Verifies that GetIsolatedName produces a unique isolation name + await Assert.That(_isolatedName).IsNotNull(); + await Assert.That(_isolatedName).Contains("test-resource"); + await Assert.That(_isolatedName).Contains("Test_"); + } + + [Test] + public async Task UniqueId_IsPositive() + { + // Verifies that UniqueId is assigned and positive + await Assert.That(UniqueId).IsPositive(); + } + + [Test] + public async Task GetIsolatedPrefix_ReturnsFormattedPrefix() + { + // Verifies that GetIsolatedPrefix produces a formatted prefix + var prefix = GetIsolatedPrefix("_"); + await Assert.That(prefix).StartsWith("test_"); + await Assert.That(prefix).Contains("_"); + } + + [Test] + public async Task Ping_Endpoint_ReturnsExpectedResponse() + { + // Basic integration test verifying the factory and web app work together + var client = Factory.CreateClient(); + var response = await client.GetAsync("/ping"); + + await Assert.That(response.IsSuccessStatusCode).IsTrue(); + var content = await response.Content.ReadAsStringAsync(); + await Assert.That(content).IsEqualTo("pong"); + } + + [Test] + [Arguments("Alice")] + [Arguments("Bob")] + [Arguments("Charlie")] + public async Task DataDrivenTest_WithArguments_Works(string name) + { + // Verifies that data-driven tests work with WebApplicationTest + var client = Factory.CreateClient(); + var response = await client.GetAsync($"/greet/{name}"); + + var content = await response.Content.ReadAsStringAsync(); + await Assert.That(content).Contains(name); + } +} diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HttpExchangeCaptureTests.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HttpExchangeCaptureTests.cs new file mode 100644 index 0000000000..67ac41ffdc --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/HttpExchangeCaptureTests.cs @@ -0,0 +1,184 @@ +using System.Net; +using System.Text; +using TUnit.AspNetCore; +using TUnit.AspNetCore.Interception; + +namespace TUnit.AspNetCore.NugetTester; + +/// +/// Tests verifying that HTTP exchange capture works correctly when TUnit.AspNetCore +/// is consumed as a NuGet package. +/// +public class HttpExchangeCaptureTests : TestsBase +{ + protected override void ConfigureTestOptions(WebApplicationTestOptions options) + { + // Enable HTTP exchange capture for these tests + options.EnableHttpExchangeCapture = true; + } + + /// + /// Gets the HttpExchangeCapture from DI services. + /// Note: Use this instead of the HttpCapture property until bug is fixed. + /// + private HttpExchangeCapture Capture => Services.GetRequiredService(); + + [Test] + public async Task HttpCapture_IsAvailableInServices_WhenEnabled() + { + // Verifies that HttpExchangeCapture is registered when enabled in options + var capture = Services.GetService(); + await Assert.That(capture).IsNotNull(); + } + + [Test] + public async Task HttpCapture_CapturesGetRequest() + { + // Verifies that GET requests are captured + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + + await Assert.That(Capture.Count).IsEqualTo(1); + await Assert.That(Capture.Last!.Request.Method).IsEqualTo("GET"); + await Assert.That(Capture.Last.Request.Path).IsEqualTo("/ping"); + } + + [Test] + public async Task HttpCapture_CapturesResponseStatusCode() + { + // Verifies that response status codes are captured + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + + await Assert.That(Capture.Last!.Response.StatusCode).IsEqualTo(HttpStatusCode.OK); + await Assert.That(Capture.Last.Response.StatusCodeValue).IsEqualTo(200); + } + + [Test] + public async Task HttpCapture_CapturesResponseBody() + { + // Verifies that response body is captured + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + + await Assert.That(Capture.Last!.Response.Body).IsEqualTo("pong"); + } + + [Test] + public async Task HttpCapture_CapturesPostRequestBody() + { + // Verifies that POST request body is captured + var client = Factory.CreateClient(); + var content = new StringContent("test payload", Encoding.UTF8, "text/plain"); + await client.PostAsync("/echo", content); + + await Assert.That(Capture.Last!.Request.Method).IsEqualTo("POST"); + await Assert.That(Capture.Last.Request.Body).Contains("test payload"); + } + + [Test] + public async Task HttpCapture_CapturesResponseHeaders() + { + // Verifies that response headers are captured + var client = Factory.CreateClient(); + await client.GetAsync("/status"); + + await Assert.That(Capture.Last!.Response.Headers) + .ContainsKey("X-Custom-Header"); + } + + [Test] + public async Task HttpCapture_CapturesMultipleExchanges() + { + // Verifies that multiple exchanges are captured in order + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + await client.GetAsync("/status"); + await client.GetAsync("/greet/World"); + + await Assert.That(Capture.Count).IsEqualTo(3); + await Assert.That(Capture.First!.Request.Path).IsEqualTo("/ping"); + await Assert.That(Capture.Last!.Request.Path).IsEqualTo("/greet/World"); + } + + [Test] + public async Task HttpCapture_ForMethod_FiltersCorrectly() + { + // Verifies that filtering by HTTP method works + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + await client.PostAsync("/echo", new StringContent("test")); + + var getExchanges = Capture.ForMethod("GET"); + var postExchanges = Capture.ForMethod("POST"); + + await Assert.That(getExchanges.Count()).IsEqualTo(1); + await Assert.That(postExchanges.Count()).IsEqualTo(1); + } + + [Test] + public async Task HttpCapture_ForPath_FiltersCorrectly() + { + // Verifies that filtering by path works + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + await client.GetAsync("/status"); + + var pingExchanges = Capture.ForPath("/ping"); + + await Assert.That(pingExchanges.Count()).IsEqualTo(1); + await Assert.That(pingExchanges.First()!.Request.Path).IsEqualTo("/ping"); + } + + [Test] + public async Task HttpCapture_ForPathStartingWith_FiltersCorrectly() + { + // Verifies that filtering by path prefix works + var client = Factory.CreateClient(); + await client.GetAsync("/greet/Alice"); + await client.GetAsync("/greet/Bob"); + await client.GetAsync("/ping"); + + var greetExchanges = Capture.ForPathStartingWith("/greet"); + + await Assert.That(greetExchanges.Count()).IsEqualTo(2); + } + + [Test] + public async Task HttpCapture_Clear_RemovesAllExchanges() + { + // Verifies that Clear() works correctly + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + await client.GetAsync("/status"); + + await Assert.That(Capture.Count).IsEqualTo(2); + + Capture.Clear(); + + await Assert.That(Capture.Count).IsEqualTo(0); + } + + [Test] + public async Task HttpCapture_TracksDuration() + { + // Verifies that request duration is tracked + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + + await Assert.That(Capture.Last!.Duration).IsGreaterThanOrEqualTo(TimeSpan.Zero); + } + + [Test] + public async Task HttpCapture_TracksTimestamp() + { + // Verifies that timestamp is tracked + var before = DateTime.UtcNow; + var client = Factory.CreateClient(); + await client.GetAsync("/ping"); + var after = DateTime.UtcNow; + + await Assert.That(Capture.Last!.Timestamp).IsGreaterThanOrEqualTo(before); + await Assert.That(Capture.Last.Timestamp).IsLessThanOrEqualTo(after); + } +} diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/ServiceOverrideTests.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/ServiceOverrideTests.cs new file mode 100644 index 0000000000..560aaac12c --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/ServiceOverrideTests.cs @@ -0,0 +1,195 @@ +using Microsoft.Extensions.Configuration; +using TUnit.AspNetCore; + +namespace TUnit.AspNetCore.NugetTester; + +/// +/// Tests verifying that service and configuration overrides work correctly when +/// TUnit.AspNetCore is consumed as a NuGet package. +/// +public class ServiceOverrideTests : TestsBase +{ + private const string TestConfigMessage = "Custom test message from configuration"; + + protected override void ConfigureTestServices(IServiceCollection services) + { + // Replace the greeting service with a test double + services.ReplaceService(new TestGreetingService()); + + // Replace the time service with a fixed time for deterministic testing + services.ReplaceService(new FixedTimeService(new DateTime(2024, 1, 15, 12, 0, 0, DateTimeKind.Utc))); + } + + protected override void ConfigureTestConfiguration(IConfigurationBuilder config) + { + // Add test-specific configuration + config.AddInMemoryCollection(new Dictionary + { + { "TestMessage", TestConfigMessage } + }); + } + + [Test] + public async Task ServiceReplacement_UsesTestDouble() + { + // Verifies that the replaced IGreetingService is used + var client = Factory.CreateClient(); + var response = await client.GetAsync("/greet/World"); + var content = await response.Content.ReadAsStringAsync(); + + // The test double should return a different format + await Assert.That(content).IsEqualTo("Test greeting for: World"); + } + + [Test] + public async Task ServiceReplacement_FixedTimeService_ReturnsDeterministicTime() + { + // Verifies that the replaced ITimeService returns the fixed time + var timeService = Services.GetRequiredService(); + var time = timeService.GetCurrentTime(); + + await Assert.That(time).IsEqualTo(new DateTime(2024, 1, 15, 12, 0, 0, DateTimeKind.Utc)); + } + + [Test] + public async Task ConfigurationOverride_AppliesTestConfiguration() + { + // Verifies that configuration overrides are applied + var client = Factory.CreateClient(); + var response = await client.GetAsync("/config/message"); + var content = await response.Content.ReadAsStringAsync(); + + await Assert.That(content).IsEqualTo(TestConfigMessage); + } + + [Test] + public async Task ConfigurationOverride_AccessibleViaServices() + { + // Verifies that configuration is accessible via IConfiguration + var config = Services.GetRequiredService(); + var message = config["TestMessage"]; + + await Assert.That(message).IsEqualTo(TestConfigMessage); + } + + /// + /// Test double for IGreetingService that returns a different format. + /// + private class TestGreetingService : IGreetingService + { + public string GetGreeting(string name) => $"Test greeting for: {name}"; + } + + /// + /// Test double for ITimeService that returns a fixed time. + /// + private class FixedTimeService : ITimeService + { + private readonly DateTime _fixedTime; + + public FixedTimeService(DateTime fixedTime) + { + _fixedTime = fixedTime; + } + + public DateTime GetCurrentTime() => _fixedTime; + } +} + +/// +/// Tests verifying that SetupAsync can perform async operations before factory creation, +/// and those results can be used in synchronous configuration methods. +/// +public class AsyncSetupTests : TestsBase +{ + private string? _asyncResult; + + protected override async Task SetupAsync() + { + // Simulate async setup work (e.g., container health check, database creation) + await Task.Delay(10); + _asyncResult = $"async-result-{UniqueId}"; + } + + protected override void ConfigureTestConfiguration(IConfigurationBuilder config) + { + // Use the result from SetupAsync in the synchronous configuration + config.AddInMemoryCollection(new Dictionary + { + { "AsyncResult", _asyncResult } + }); + } + + [Test] + public async Task SetupAsync_CompletesBeforeConfigureTestConfiguration() + { + // Verifies that SetupAsync runs before ConfigureTestConfiguration + await Assert.That(_asyncResult).IsNotNull(); + await Assert.That(_asyncResult).StartsWith("async-result-"); + } + + [Test] + public async Task AsyncResultFromSetup_AvailableInConfiguration() + { + // Verifies that async setup results are available in configuration + var config = Services.GetRequiredService(); + var asyncResult = config["AsyncResult"]; + + await Assert.That(asyncResult).IsNotNull(); + await Assert.That(asyncResult).IsEqualTo(_asyncResult); + } +} + +/// +/// Tests verifying that test isolation works correctly - each test gets its own +/// factory and services don't leak between tests. +/// +public class IsolationTests : TestsBase +{ + private static readonly ConcurrentDictionary SeenUniqueIds = new(); + + [Test] + [Repeat(3)] + public async Task UniqueId_IsDifferentForEachTestInstance() + { + // Record the unique ID for this test instance + var wasAdded = SeenUniqueIds.TryAdd(UniqueId.ToString(), 1); + + // Each test should have a unique ID not seen before + await Assert.That(wasAdded).IsTrue(); + } + + [Test] + public async Task GetIsolatedName_IncludesUniqueId() + { + // Verifies that isolated names include the unique ID + var name1 = GetIsolatedName("resource"); + var name2 = GetIsolatedName("resource"); + + // Same test instance should get the same isolated name for same base + await Assert.That(name1).IsEqualTo(name2); + await Assert.That(name1).Contains(UniqueId.ToString()); + } +} + +/// +/// Tests verifying that logging integration works correctly. +/// +public class LoggingIntegrationTests : TestsBase +{ + [Test] + public async Task TestContext_IsAccessible_DuringTest() + { + // Verifies that TestContext is accessible during test execution + await Assert.That(TestContext.Current).IsNotNull(); + await Assert.That(TestContext.Current!.Metadata?.DisplayName).IsNotNull(); + } + + [Test] + public async Task LoggerFactory_IsAvailable_InServices() + { + // Verifies that logging services are available + var loggerFactory = Services.GetService(); + await Assert.That(loggerFactory).IsNotNull(); + } +} diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.csproj b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.csproj new file mode 100644 index 0000000000..0752ac3005 --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester.csproj @@ -0,0 +1,26 @@ + + + + net8.0;net9.0;net10.0 + latest + true + enable + exe + enable + true + $(NoWarn);NU1504 + + + + + + $(TUnitVersion) + + + + + + + + + diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestWebAppFactory.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestWebAppFactory.cs new file mode 100644 index 0000000000..38ca78b8c2 --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestWebAppFactory.cs @@ -0,0 +1,30 @@ +using TUnit.AspNetCore; +using TUnit.Core.Interfaces; + +namespace TUnit.AspNetCore.NugetTester; + +/// +/// Factory for integration tests. Extends TestWebApplicationFactory to support +/// per-test isolation via the WebApplicationTest pattern. +/// +public class TestWebAppFactory : TestWebApplicationFactory, IAsyncInitializer +{ + private int _configuredWebHostCalled; + + /// + /// Tracks how many times ConfiguredWebHost was called, useful for verifying factory behavior. + /// + public int ConfiguredWebHostCalled => _configuredWebHostCalled; + + public Task InitializeAsync() + { + // Eagerly start the server to catch configuration errors early + _ = Server; + return Task.CompletedTask; + } + + protected override void ConfigureWebHost(Microsoft.AspNetCore.Hosting.IWebHostBuilder builder) + { + Interlocked.Increment(ref _configuredWebHostCalled); + } +} diff --git a/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestsBase.cs b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestsBase.cs new file mode 100644 index 0000000000..4252c2f609 --- /dev/null +++ b/tools/tunit-nuget-tester/TUnit.AspNetCore.NugetTester/TUnit.AspNetCore.NugetTester/TestsBase.cs @@ -0,0 +1,10 @@ +using TUnit.AspNetCore; + +namespace TUnit.AspNetCore.NugetTester; + +/// +/// Base class for ASP.NET Core integration tests using the WebApplicationTest pattern. +/// +public abstract class TestsBase : WebApplicationTest +{ +}